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