1 /* 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 8 #ifndef SkSVGDOM_DEFINED 9 #define SkSVGDOM_DEFINED 10 11 #include "include/core/SkFontMgr.h" 12 #include "include/core/SkRefCnt.h" 13 #include "include/core/SkSize.h" 14 #include "include/private/SkTemplates.h" 15 #include "modules/skresources/include/SkResources.h" 16 #include "modules/svg/include/SkSVGIDMapper.h" 17 18 class SkCanvas; 19 class SkDOM; 20 class SkStream; 21 class SkSVGNode; 22 class SkSVGSVG; 23 24 class SkSVGDOM : public SkRefCnt { 25 public: 26 class Builder final { 27 public: 28 /** 29 * Specify a font manager for loading SVG fonts. 30 */ 31 Builder& setFontManager(sk_sp<SkFontMgr>); 32 33 /** 34 * Specify a resource provider for loading images etc. 35 */ 36 Builder& setResourceProvider(sk_sp<skresources::ResourceProvider>); 37 38 sk_sp<SkSVGDOM> make(SkStream&) const; 39 40 private: 41 sk_sp<SkFontMgr> fFontMgr; 42 sk_sp<skresources::ResourceProvider> fResourceProvider; 43 }; 44 MakeFromStream(SkStream & str)45 static sk_sp<SkSVGDOM> MakeFromStream(SkStream& str) { 46 return Builder().make(str); 47 } 48 49 const SkSize& containerSize() const; 50 void setContainerSize(const SkSize&); 51 52 // Returns the node with the given id, or nullptr if not found. 53 sk_sp<SkSVGNode>* findNodeById(const char* id); 54 55 void render(SkCanvas*) const; 56 57 private: 58 SkSVGDOM(sk_sp<SkSVGSVG>, sk_sp<SkFontMgr>, sk_sp<skresources::ResourceProvider>, 59 SkSVGIDMapper&&); 60 61 const sk_sp<SkSVGSVG> fRoot; 62 const sk_sp<SkFontMgr> fFontMgr; 63 const sk_sp<skresources::ResourceProvider> fResourceProvider; 64 const SkSVGIDMapper fIDMapper; 65 66 SkSize fContainerSize; 67 }; 68 69 #endif // SkSVGDOM_DEFINED 70