1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2016 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SampleCode.h"
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvas.h"
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkDOM.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkOSFile.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkOSPath.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkStream.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkSVGDOM.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkView.h"
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace {
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SVGFileView : public SampleView {
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SVGFileView(const SkString& path)
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        : fPath(path), fLabel(SkStringPrintf("[%s]", SkOSPath::Basename(path.c_str()).c_str())) {}
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ~SVGFileView() override = default;
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onOnceBeforeDraw() override {
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkFILEStream svgStream(fPath.c_str());
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (!svgStream.isValid()) {
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkDebugf("file not found: \"path\"\n", fPath.c_str());
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return;
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkDOM xmlDom;
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (!xmlDom.build(svgStream)) {
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkDebugf("XML parsing failed: \"path\"\n", fPath.c_str());
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return;
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fDom = SkSVGDOM::MakeFromDOM(xmlDom);
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (fDom) {
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            fDom->setContainerSize(SkSize::Make(this->width(), this->height()));
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawContent(SkCanvas* canvas) override {
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (fDom) {
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            fDom->render(canvas);
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onSizeChange() override {
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (fDom) {
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            fDom->setContainerSize(SkSize::Make(this->width(), this->height()));
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        this->INHERITED::onSizeChange();
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool onQuery(SkEvent* evt) override {
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (SampleCode::TitleQ(*evt)) {
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SampleCode::TitleR(evt, fLabel.c_str());
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return true;
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->INHERITED::onQuery(evt);
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkSVGDOM> fDom;
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkString        fPath;
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkString        fLabel;
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef SampleView INHERITED;
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} // anonymous namespace
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSampleView* CreateSampleSVGFileView(const SkString& filename);
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSampleView* CreateSampleSVGFileView(const SkString& filename) {
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return new SVGFileView(filename);
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
81