• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)15 SKPSlide::SKPSlide(const SkString& name, const SkString& path) : fPath(path) {
16     fName = name;
17 }
18 
~SKPSlide()19 SKPSlide::~SKPSlide() {}
20 
draw(SkCanvas * canvas)21 void 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[])37 static 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)51 void SKPSlide::load(SkScalar, SkScalar) {
52     fPic = read_picture(fPath.c_str());
53     fCullRect = fPic->cullRect().roundOut();
54 }
55 
unload()56 void SKPSlide::unload() {
57     fPic.reset(nullptr);
58 }
59