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 = NULL, 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, 40 SkCanvas::DrawBitmapRectFlags flags) override; 41 42 void drawText(const SkDraw&, const void* text, size_t len, 43 SkScalar x, SkScalar y, const SkPaint& paint) override; 44 void drawPosText(const SkDraw&, const void* text, size_t len, 45 const SkScalar pos[], int scalarsPerPos, 46 const SkPoint& offset, const SkPaint& paint) override; 47 void drawTextOnPath(const SkDraw&, const void* text, size_t len, 48 const SkPath& path, const SkMatrix* matrix, 49 const SkPaint& paint) override; 50 void drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount, 51 const SkPoint verts[], const SkPoint texs[], 52 const SkColor colors[], SkXfermode* xmode, 53 const uint16_t indices[], int indexCount, 54 const SkPaint& paint) override; 55 56 void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, 57 const SkPaint&) override; 58 const SkBitmap& onAccessBitmap() override; 59 60 private: 61 SkSVGDevice(const SkISize& size, SkXMLWriter* writer); 62 virtual ~SkSVGDevice(); 63 64 void drawBitmapCommon(const SkDraw& draw, const SkBitmap& bm, const SkPaint& paint); 65 66 class AutoElement; 67 class ResourceBucket; 68 69 SkXMLWriter* fWriter; 70 SkAutoTDelete<AutoElement> fRootElement; 71 SkAutoTDelete<ResourceBucket> fResourceBucket; 72 SkBitmap fLegacyBitmap; 73 }; 74 75 #endif // SkSVGDevice_DEFINED 76