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