blob: b607d9a02ea3ec834dbd223bc2b0a19d84a6bd21 [file] [log] [blame]
fmalita6ceef3d2016-07-26 18:46:34 -07001/*
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
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "include/core/SkTypes.h"
Hal Canary0f666812018-03-22 15:21:12 -04009
Robert Phillips2af13c12021-09-01 16:47:01 +000010#if defined(SK_ENABLE_SVG)
Hal Canary0f666812018-03-22 15:21:12 -040011
Mike Kleinc0bd9f92019-04-23 12:05:21 -050012#include "include/core/SkCanvas.h"
13#include "include/core/SkStream.h"
Florin Malitab3418102020-10-15 18:10:29 -040014#include "modules/svg/include/SkSVGDOM.h"
Robert Phillips2af13c12021-09-01 16:47:01 +000015#include "modules/svg/include/SkSVGNode.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050016#include "samplecode/Sample.h"
17#include "src/core/SkOSFile.h"
18#include "src/utils/SkOSPath.h"
19#include "src/xml/SkDOM.h"
fmalita6ceef3d2016-07-26 18:46:34 -070020
21namespace {
22
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040023class SVGFileView : public Sample {
fmalita6ceef3d2016-07-26 18:46:34 -070024public:
fmalita851d68a2016-08-15 07:48:47 -070025 SVGFileView(const SkString& path)
26 : fPath(path), fLabel(SkStringPrintf("[%s]", SkOSPath::Basename(path.c_str()).c_str())) {}
Brian Salomond3b65972017-03-22 12:05:03 -040027 ~SVGFileView() override = default;
fmalita851d68a2016-08-15 07:48:47 -070028
29protected:
30 void onOnceBeforeDraw() override {
31 SkFILEStream svgStream(fPath.c_str());
fmalita6ceef3d2016-07-26 18:46:34 -070032 if (!svgStream.isValid()) {
John Stiles7bf79992021-06-25 11:05:20 -040033 SkDebugf("file not found: \"%s\"\n", fPath.c_str());
fmalita6ceef3d2016-07-26 18:46:34 -070034 return;
35 }
36
Florin Malita7006e152020-11-10 15:24:59 -050037 fDom = SkSVGDOM::MakeFromStream(svgStream);
fmalitae1baa7c2016-09-14 12:04:30 -070038 if (fDom) {
39 fDom->setContainerSize(SkSize::Make(this->width(), this->height()));
40 }
fmalita6ceef3d2016-07-26 18:46:34 -070041 }
42
fmalita6ceef3d2016-07-26 18:46:34 -070043 void onDrawContent(SkCanvas* canvas) override {
44 if (fDom) {
45 fDom->render(canvas);
46 }
47 }
48
49 void onSizeChange() override {
50 if (fDom) {
51 fDom->setContainerSize(SkSize::Make(this->width(), this->height()));
52 }
53
54 this->INHERITED::onSizeChange();
55 }
56
Hal Canary8a027312019-07-03 10:55:44 -040057 SkString name() override { return fLabel; }
fmalitab83cdbc2016-08-04 08:39:41 -070058
fmalita6ceef3d2016-07-26 18:46:34 -070059private:
60 sk_sp<SkSVGDOM> fDom;
fmalita851d68a2016-08-15 07:48:47 -070061 SkString fPath;
fmalitab83cdbc2016-08-04 08:39:41 -070062 SkString fLabel;
fmalita6ceef3d2016-07-26 18:46:34 -070063
John Stiles7571f9e2020-09-02 22:42:33 -040064 using INHERITED = Sample;
fmalita6ceef3d2016-07-26 18:46:34 -070065};
66
67} // anonymous namespace
68
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040069Sample* CreateSampleSVGFileView(const SkString& filename);
70Sample* CreateSampleSVGFileView(const SkString& filename) {
fmalita6ceef3d2016-07-26 18:46:34 -070071 return new SVGFileView(filename);
72}
Robert Phillips2af13c12021-09-01 16:47:01 +000073#endif // defined(SK_ENABLE_SVG)