1 /* 2 * Copyright 2015 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 SkSVGDevice_DEFINED 9 #define SkSVGDevice_DEFINED 10 11 #include "SkDevice.h" 12 13 class SkXMLWriter; 14 15 class SkSVGDevice : public SkBaseDevice { 16 public: 17 static SkBaseDevice* Create(const SkISize& size, SkXMLWriter* writer); 18 19 SkImageInfo imageInfo() const override; 20 21 protected: 22 void drawPaint(const SkDraw&, const SkPaint& paint) override; 23 void drawPoints(const SkDraw&, SkCanvas::PointMode mode, size_t count, 24 const SkPoint[], const SkPaint& paint) override; 25 void drawRect(const SkDraw&, const SkRect& r, const SkPaint& paint) override; 26 void drawOval(const SkDraw&, const SkRect& oval, const SkPaint& paint) override; 27 void drawRRect(const SkDraw&, const SkRRect& rr, const SkPaint& paint) override; 28 void drawPath(const SkDraw&, const SkPath& path, 29 const SkPaint& paint, 30 const SkMatrix* prePathMatrix = nullptr, 31 bool pathIsMutable = false) override; 32 33 void drawBitmap(const SkDraw&, const SkBitmap& bitmap, 34 const SkMatrix& matrix, const SkPaint& paint) override; 35 void drawSprite(const SkDraw&, const SkBitmap& bitmap, 36 int x, int y, const SkPaint& paint) override; 37 void drawBitmapRect(const SkDraw&, const SkBitmap&, 38 const SkRect* srcOrNull, const SkRect& dst, 39 const SkPaint& paint, SkCanvas::SrcRectConstraint) override; 40 41 void drawText(const SkDraw&, const void* text, size_t len, 42 SkScalar x, SkScalar y, const SkPaint& paint) override; 43 void drawPosText(const SkDraw&, const void* text, size_t len, 44 const SkScalar pos[], int scalarsPerPos, 45 const SkPoint& offset, const SkPaint& paint) override; 46 void drawTextOnPath(const SkDraw&, const void* text, size_t len, 47 const SkPath& path, const SkMatrix* matrix, 48 const SkPaint& paint) override; 49 void drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount, 50 const SkPoint verts[], const SkPoint texs[], 51 const SkColor colors[], SkXfermode* xmode, 52 const uint16_t indices[], int indexCount, 53 const SkPaint& paint) override; 54 55 void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, 56 const SkPaint&) override; 57 const SkBitmap& onAccessBitmap() override; 58 59 private: 60 SkSVGDevice(const SkISize& size, SkXMLWriter* writer); 61 virtual ~SkSVGDevice(); 62 63 void drawBitmapCommon(const SkDraw& draw, const SkBitmap& bm, const SkPaint& paint); 64 65 class AutoElement; 66 class ResourceBucket; 67 68 SkXMLWriter* fWriter; 69 SkAutoTDelete<AutoElement> fRootElement; 70 SkAutoTDelete<ResourceBucket> fResourceBucket; 71 SkBitmap fLegacyBitmap; 72 73 typedef SkBaseDevice INHERITED; 74 }; 75 76 #endif // SkSVGDevice_DEFINED 77