12bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth/* 22bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth* Copyright 2016 Google Inc. 32bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth* 42bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth* Use of this source code is governed by a BSD-style license that can be 52bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth* found in the LICENSE file. 62bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth*/ 72bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth 82bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth#include "SKPSlide.h" 92bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth 102bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth#include "SkCanvas.h" 11c265a92741a8deee8adb62bb20c756b46672a11cjvanverth#include "SkCommonFlags.h" 12c265a92741a8deee8adb62bb20c756b46672a11cjvanverth#include "SkOSFile.h" 13c265a92741a8deee8adb62bb20c756b46672a11cjvanverth#include "SkStream.h" 142bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth 15c265a92741a8deee8adb62bb20c756b46672a11cjvanverthSKPSlide::SKPSlide(const SkString& name, const SkString& path) : fPath(path) { 162bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth fName = name; 172bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth} 182bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth 192bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverthSKPSlide::~SKPSlide() {} 202bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth 212bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverthvoid SKPSlide::draw(SkCanvas* canvas) { 22c265a92741a8deee8adb62bb20c756b46672a11cjvanverth if (fPic.get()) { 23c265a92741a8deee8adb62bb20c756b46672a11cjvanverth bool isOffset = SkToBool(fCullRect.left() | fCullRect.top()); 24c265a92741a8deee8adb62bb20c756b46672a11cjvanverth if (isOffset) { 25c265a92741a8deee8adb62bb20c756b46672a11cjvanverth canvas->save(); 26c265a92741a8deee8adb62bb20c756b46672a11cjvanverth canvas->translate(SkIntToScalar(-fCullRect.left()), SkIntToScalar(-fCullRect.top())); 27c265a92741a8deee8adb62bb20c756b46672a11cjvanverth } 28c265a92741a8deee8adb62bb20c756b46672a11cjvanverth 29c265a92741a8deee8adb62bb20c756b46672a11cjvanverth canvas->drawPicture(fPic.get()); 30c265a92741a8deee8adb62bb20c756b46672a11cjvanverth 31c265a92741a8deee8adb62bb20c756b46672a11cjvanverth if (isOffset) { 32c265a92741a8deee8adb62bb20c756b46672a11cjvanverth canvas->restore(); 33c265a92741a8deee8adb62bb20c756b46672a11cjvanverth } 342bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth } 35c265a92741a8deee8adb62bb20c756b46672a11cjvanverth} 362bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth 37c265a92741a8deee8adb62bb20c756b46672a11cjvanverthstatic sk_sp<SkPicture> read_picture(const char path[]) { 38f93d71122e4fcfcdc674a0163455990b13855f2fbungeman std::unique_ptr<SkStream> stream = SkStream::MakeFromFile(path); 39f93d71122e4fcfcdc674a0163455990b13855f2fbungeman if (!stream) { 40c265a92741a8deee8adb62bb20c756b46672a11cjvanverth SkDebugf("Could not read %s.\n", path); 41c265a92741a8deee8adb62bb20c756b46672a11cjvanverth return nullptr; 42c265a92741a8deee8adb62bb20c756b46672a11cjvanverth } 432bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth 44c265a92741a8deee8adb62bb20c756b46672a11cjvanverth auto pic = SkPicture::MakeFromStream(stream.get()); 45c265a92741a8deee8adb62bb20c756b46672a11cjvanverth if (!pic) { 46c265a92741a8deee8adb62bb20c756b46672a11cjvanverth SkDebugf("Could not read %s as an SkPicture.\n", path); 472bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth } 48c265a92741a8deee8adb62bb20c756b46672a11cjvanverth return pic; 49c265a92741a8deee8adb62bb20c756b46672a11cjvanverth} 50c265a92741a8deee8adb62bb20c756b46672a11cjvanverth 51c7027ab03f2e8bab4c74bc1b047642622d3d682bjvanverthvoid SKPSlide::load(SkScalar, SkScalar) { 52c265a92741a8deee8adb62bb20c756b46672a11cjvanverth fPic = read_picture(fPath.c_str()); 53c265a92741a8deee8adb62bb20c756b46672a11cjvanverth fCullRect = fPic->cullRect().roundOut(); 54c265a92741a8deee8adb62bb20c756b46672a11cjvanverth} 55c265a92741a8deee8adb62bb20c756b46672a11cjvanverth 56c265a92741a8deee8adb62bb20c756b46672a11cjvanverthvoid SKPSlide::unload() { 57c265a92741a8deee8adb62bb20c756b46672a11cjvanverth fPic.reset(nullptr); 582bb3b6d2bb2cb3cc72ba254b34fadde5319c141ajvanverth} 59