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