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