1 /* 2 * Copyright 2016 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SKPSlide.h" 9 10 #include "SkCanvas.h" 11 #include "SkCommonFlags.h" 12 #include "SkOSFile.h" 13 #include "SkStream.h" 14 SKPSlide(const SkString & name,const SkString & path)15SKPSlide::SKPSlide(const SkString& name, const SkString& path) : fPath(path) { 16 fName = name; 17 } 18 ~SKPSlide()19SKPSlide::~SKPSlide() {} 20 draw(SkCanvas * canvas)21void SKPSlide::draw(SkCanvas* canvas) { 22 if (fPic.get()) { 23 bool isOffset = SkToBool(fCullRect.left() | fCullRect.top()); 24 if (isOffset) { 25 canvas->save(); 26 canvas->translate(SkIntToScalar(-fCullRect.left()), SkIntToScalar(-fCullRect.top())); 27 } 28 29 canvas->drawPicture(fPic.get()); 30 31 if (isOffset) { 32 canvas->restore(); 33 } 34 } 35 } 36 read_picture(const char path[])37static sk_sp<SkPicture> read_picture(const char path[]) { 38 std::unique_ptr<SkStream> stream = SkStream::MakeFromFile(path); 39 if (!stream) { 40 SkDebugf("Could not read %s.\n", path); 41 return nullptr; 42 } 43 44 auto pic = SkPicture::MakeFromStream(stream.get()); 45 if (!pic) { 46 SkDebugf("Could not read %s as an SkPicture.\n", path); 47 } 48 return pic; 49 } 50 load(SkScalar,SkScalar)51void SKPSlide::load(SkScalar, SkScalar) { 52 fPic = read_picture(fPath.c_str()); 53 fCullRect = fPic->cullRect().roundOut(); 54 } 55 unload()56void SKPSlide::unload() { 57 fPic.reset(nullptr); 58 } 59