1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2016 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "include/core/SkTypes.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#if defined(SK_ENABLE_SVG) 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 13cb93a386Sopenharmony_ci#include "include/core/SkStream.h" 14cb93a386Sopenharmony_ci#include "modules/svg/include/SkSVGDOM.h" 15cb93a386Sopenharmony_ci#include "modules/svg/include/SkSVGNode.h" 16cb93a386Sopenharmony_ci#include "samplecode/Sample.h" 17cb93a386Sopenharmony_ci#include "src/core/SkOSFile.h" 18cb93a386Sopenharmony_ci#include "src/utils/SkOSPath.h" 19cb93a386Sopenharmony_ci#include "src/xml/SkDOM.h" 20cb93a386Sopenharmony_ci 21cb93a386Sopenharmony_cinamespace { 22cb93a386Sopenharmony_ci 23cb93a386Sopenharmony_ciclass SVGFileView : public Sample { 24cb93a386Sopenharmony_cipublic: 25cb93a386Sopenharmony_ci SVGFileView(const SkString& path) 26cb93a386Sopenharmony_ci : fPath(path), fLabel(SkStringPrintf("[%s]", SkOSPath::Basename(path.c_str()).c_str())) {} 27cb93a386Sopenharmony_ci ~SVGFileView() override = default; 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_ciprotected: 30cb93a386Sopenharmony_ci void onOnceBeforeDraw() override { 31cb93a386Sopenharmony_ci SkFILEStream svgStream(fPath.c_str()); 32cb93a386Sopenharmony_ci if (!svgStream.isValid()) { 33cb93a386Sopenharmony_ci SkDebugf("file not found: \"%s\"\n", fPath.c_str()); 34cb93a386Sopenharmony_ci return; 35cb93a386Sopenharmony_ci } 36cb93a386Sopenharmony_ci 37cb93a386Sopenharmony_ci fDom = SkSVGDOM::MakeFromStream(svgStream); 38cb93a386Sopenharmony_ci if (fDom) { 39cb93a386Sopenharmony_ci fDom->setContainerSize(SkSize::Make(this->width(), this->height())); 40cb93a386Sopenharmony_ci } 41cb93a386Sopenharmony_ci } 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci void onDrawContent(SkCanvas* canvas) override { 44cb93a386Sopenharmony_ci if (fDom) { 45cb93a386Sopenharmony_ci fDom->render(canvas); 46cb93a386Sopenharmony_ci } 47cb93a386Sopenharmony_ci } 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_ci void onSizeChange() override { 50cb93a386Sopenharmony_ci if (fDom) { 51cb93a386Sopenharmony_ci fDom->setContainerSize(SkSize::Make(this->width(), this->height())); 52cb93a386Sopenharmony_ci } 53cb93a386Sopenharmony_ci 54cb93a386Sopenharmony_ci this->INHERITED::onSizeChange(); 55cb93a386Sopenharmony_ci } 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci SkString name() override { return fLabel; } 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ciprivate: 60cb93a386Sopenharmony_ci sk_sp<SkSVGDOM> fDom; 61cb93a386Sopenharmony_ci SkString fPath; 62cb93a386Sopenharmony_ci SkString fLabel; 63cb93a386Sopenharmony_ci 64cb93a386Sopenharmony_ci using INHERITED = Sample; 65cb93a386Sopenharmony_ci}; 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_ci} // anonymous namespace 68cb93a386Sopenharmony_ci 69cb93a386Sopenharmony_ciSample* CreateSampleSVGFileView(const SkString& filename); 70cb93a386Sopenharmony_ciSample* CreateSampleSVGFileView(const SkString& filename) { 71cb93a386Sopenharmony_ci return new SVGFileView(filename); 72cb93a386Sopenharmony_ci} 73cb93a386Sopenharmony_ci#endif // defined(SK_ENABLE_SVG) 74