1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2018 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/SvgSlide.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#if defined(SK_ENABLE_SVG) 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 13cb93a386Sopenharmony_ci#include "include/core/SkStream.h" 14cb93a386Sopenharmony_ci#include "modules/skresources/include/SkResources.h" 15cb93a386Sopenharmony_ci#include "modules/svg/include/SkSVGDOM.h" 16cb93a386Sopenharmony_ci#include "modules/svg/include/SkSVGNode.h" 17cb93a386Sopenharmony_ci#include "src/utils/SkOSPath.h" 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_ciSvgSlide::SvgSlide(const SkString& name, const SkString& path) 20cb93a386Sopenharmony_ci : fPath(path) 21cb93a386Sopenharmony_ci{ 22cb93a386Sopenharmony_ci fName = name; 23cb93a386Sopenharmony_ci} 24cb93a386Sopenharmony_ci 25cb93a386Sopenharmony_civoid SvgSlide::load(SkScalar w, SkScalar h) { 26cb93a386Sopenharmony_ci auto stream = SkStream::MakeFromFile(fPath.c_str()); 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ci if (!stream) { 29cb93a386Sopenharmony_ci SkDebugf("Could not open %s.\n", fPath.c_str()); 30cb93a386Sopenharmony_ci return; 31cb93a386Sopenharmony_ci } 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_ci fWinSize = SkSize::Make(w, h); 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci auto rp = skresources::DataURIResourceProviderProxy::Make( 36cb93a386Sopenharmony_ci skresources::FileResourceProvider::Make(SkOSPath::Dirname(fPath.c_str()), 37cb93a386Sopenharmony_ci /*predecode=*/true), 38cb93a386Sopenharmony_ci /*predecode=*/true); 39cb93a386Sopenharmony_ci fDom = SkSVGDOM::Builder().setResourceProvider(std::move(rp)).make(*stream); 40cb93a386Sopenharmony_ci if (fDom) { 41cb93a386Sopenharmony_ci fDom->setContainerSize(fWinSize); 42cb93a386Sopenharmony_ci } 43cb93a386Sopenharmony_ci} 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_civoid SvgSlide::unload() { 46cb93a386Sopenharmony_ci fDom.reset(); 47cb93a386Sopenharmony_ci} 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_civoid SvgSlide::resize(SkScalar w, SkScalar h) { 50cb93a386Sopenharmony_ci fWinSize = { w, h }; 51cb93a386Sopenharmony_ci if (fDom) { 52cb93a386Sopenharmony_ci fDom->setContainerSize(fWinSize); 53cb93a386Sopenharmony_ci } 54cb93a386Sopenharmony_ci} 55cb93a386Sopenharmony_ci 56cb93a386Sopenharmony_ciSkISize SvgSlide::getDimensions() const { 57cb93a386Sopenharmony_ci // We always scale to fill the window. 58cb93a386Sopenharmony_ci return fWinSize.toCeil(); 59cb93a386Sopenharmony_ci} 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_civoid SvgSlide::draw(SkCanvas* canvas) { 62cb93a386Sopenharmony_ci if (fDom) { 63cb93a386Sopenharmony_ci fDom->render(canvas); 64cb93a386Sopenharmony_ci } 65cb93a386Sopenharmony_ci} 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_ci#endif // defined(SK_ENABLE_SVG) 68