Home | History | Annotate | Download | only in svg
      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