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