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 15SKPSlide::SKPSlide(const SkString& name, const SkString& path) : fPath(path) { 16 fName = name; 17} 18 19SKPSlide::~SKPSlide() {} 20 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 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 51void SKPSlide::load(SkScalar, SkScalar) { 52 fPic = read_picture(fPath.c_str()); 53 fCullRect = fPic->cullRect().roundOut(); 54} 55 56void SKPSlide::unload() { 57 fPic.reset(nullptr); 58} 59