16ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita/* 26ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita * Copyright 2016 Google Inc. 36ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita * 46ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita * Use of this source code is governed by a BSD-style license that can be 56ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita * found in the LICENSE file. 66ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita */ 76ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 86ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita#include "SampleCode.h" 96ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita#include "SkCanvas.h" 106ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita#include "SkDOM.h" 11b83cdbcbb0829bf6e0c9cb2c7d9a0ff460f7f431fmalita#include "SkOSFile.h" 12bf111d7bc9ba3857433e30eae27f0272c34ed0fbBen Wagner#include "SkOSPath.h" 136ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita#include "SkStream.h" 146ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita#include "SkSVGDOM.h" 156ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita#include "SkView.h" 166ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 176ceef3dd67617c5f4572ada98d5ee85777d2db99fmalitanamespace { 186ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 196ceef3dd67617c5f4572ada98d5ee85777d2db99fmalitaclass SVGFileView : public SampleView { 206ceef3dd67617c5f4572ada98d5ee85777d2db99fmalitapublic: 21851d68aa5692103db67433354c7421863d01dbdafmalita SVGFileView(const SkString& path) 22851d68aa5692103db67433354c7421863d01dbdafmalita : fPath(path), fLabel(SkStringPrintf("[%s]", SkOSPath::Basename(path.c_str()).c_str())) {} 23d3b65972aad96453ff4510caa3e25a2b847c6d1eBrian Salomon ~SVGFileView() override = default; 24851d68aa5692103db67433354c7421863d01dbdafmalita 25851d68aa5692103db67433354c7421863d01dbdafmalitaprotected: 26851d68aa5692103db67433354c7421863d01dbdafmalita void onOnceBeforeDraw() override { 27851d68aa5692103db67433354c7421863d01dbdafmalita SkFILEStream svgStream(fPath.c_str()); 286ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita if (!svgStream.isValid()) { 29851d68aa5692103db67433354c7421863d01dbdafmalita SkDebugf("file not found: \"path\"\n", fPath.c_str()); 306ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita return; 316ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita } 326ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 336ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita SkDOM xmlDom; 346ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita if (!xmlDom.build(svgStream)) { 35851d68aa5692103db67433354c7421863d01dbdafmalita SkDebugf("XML parsing failed: \"path\"\n", fPath.c_str()); 366ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita return; 376ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita } 386ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 39e1baa7c105dad0f301ce34e5d6d1aa329334ef8cfmalita fDom = SkSVGDOM::MakeFromDOM(xmlDom); 40e1baa7c105dad0f301ce34e5d6d1aa329334ef8cfmalita if (fDom) { 41e1baa7c105dad0f301ce34e5d6d1aa329334ef8cfmalita fDom->setContainerSize(SkSize::Make(this->width(), this->height())); 42e1baa7c105dad0f301ce34e5d6d1aa329334ef8cfmalita } 436ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita } 446ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 456ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita void onDrawContent(SkCanvas* canvas) override { 466ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita if (fDom) { 476ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita fDom->render(canvas); 486ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita } 496ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita } 506ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 516ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita void onSizeChange() override { 526ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita if (fDom) { 536ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita fDom->setContainerSize(SkSize::Make(this->width(), this->height())); 546ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita } 556ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 566ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita this->INHERITED::onSizeChange(); 576ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita } 586ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 59b83cdbcbb0829bf6e0c9cb2c7d9a0ff460f7f431fmalita bool onQuery(SkEvent* evt) override { 60b83cdbcbb0829bf6e0c9cb2c7d9a0ff460f7f431fmalita if (SampleCode::TitleQ(*evt)) { 61b83cdbcbb0829bf6e0c9cb2c7d9a0ff460f7f431fmalita SampleCode::TitleR(evt, fLabel.c_str()); 62b83cdbcbb0829bf6e0c9cb2c7d9a0ff460f7f431fmalita return true; 63b83cdbcbb0829bf6e0c9cb2c7d9a0ff460f7f431fmalita } 64b83cdbcbb0829bf6e0c9cb2c7d9a0ff460f7f431fmalita 65b83cdbcbb0829bf6e0c9cb2c7d9a0ff460f7f431fmalita return this->INHERITED::onQuery(evt); 66b83cdbcbb0829bf6e0c9cb2c7d9a0ff460f7f431fmalita } 676ceef3dd67617c5f4572ada98d5ee85777d2db99fmalitaprivate: 686ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita sk_sp<SkSVGDOM> fDom; 69851d68aa5692103db67433354c7421863d01dbdafmalita SkString fPath; 70b83cdbcbb0829bf6e0c9cb2c7d9a0ff460f7f431fmalita SkString fLabel; 716ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 726ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita typedef SampleView INHERITED; 736ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita}; 746ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 756ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita} // anonymous namespace 766ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita 77851d68aa5692103db67433354c7421863d01dbdafmalitaSampleView* CreateSampleSVGFileView(const SkString& filename); 78851d68aa5692103db67433354c7421863d01dbdafmalitaSampleView* CreateSampleSVGFileView(const SkString& filename) { 796ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita return new SVGFileView(filename); 806ceef3dd67617c5f4572ada98d5ee85777d2db99fmalita} 81