Home | History | Annotate | Download | only in core
      1 /*
      2  * Copyright 2014 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 SkRecorder_DEFINED
      9 #define SkRecorder_DEFINED
     10 
     11 #include "SkCanvas.h"
     12 #include "SkRecord.h"
     13 #include "SkRecords.h"
     14 
     15 // SkRecorder provides an SkCanvas interface for recording into an SkRecord.
     16 
     17 class SkRecorder : public SkCanvas {
     18 public:
     19     // Does not take ownership of the SkRecord.
     20     SkRecorder(SkRecord*, int width, int height);
     21 
     22     // Make SkRecorder forget entirely about its SkRecord*; all calls to SkRecorder will fail.
     23     void forgetRecord();
     24 
     25     void clear(SkColor) SK_OVERRIDE;
     26     void drawPaint(const SkPaint& paint) SK_OVERRIDE;
     27     void drawPoints(PointMode mode,
     28                     size_t count,
     29                     const SkPoint pts[],
     30                     const SkPaint& paint) SK_OVERRIDE;
     31     void drawRect(const SkRect& rect, const SkPaint& paint) SK_OVERRIDE;
     32     void drawOval(const SkRect& oval, const SkPaint&) SK_OVERRIDE;
     33     void drawRRect(const SkRRect& rrect, const SkPaint& paint) SK_OVERRIDE;
     34     void drawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE;
     35     void drawBitmap(const SkBitmap& bitmap,
     36                     SkScalar left,
     37                     SkScalar top,
     38                     const SkPaint* paint = NULL) SK_OVERRIDE;
     39     void drawBitmapRectToRect(const SkBitmap& bitmap,
     40                               const SkRect* src,
     41                               const SkRect& dst,
     42                               const SkPaint* paint = NULL,
     43                               DrawBitmapRectFlags flags = kNone_DrawBitmapRectFlag) SK_OVERRIDE;
     44     void drawBitmapMatrix(const SkBitmap& bitmap,
     45                           const SkMatrix& m,
     46                           const SkPaint* paint = NULL) SK_OVERRIDE;
     47     void drawBitmapNine(const SkBitmap& bitmap,
     48                         const SkIRect& center,
     49                         const SkRect& dst,
     50                         const SkPaint* paint = NULL) SK_OVERRIDE;
     51     void drawSprite(const SkBitmap& bitmap,
     52                     int left,
     53                     int top,
     54                     const SkPaint* paint = NULL) SK_OVERRIDE;
     55     void drawVertices(VertexMode vmode,
     56                       int vertexCount,
     57                       const SkPoint vertices[],
     58                       const SkPoint texs[],
     59                       const SkColor colors[],
     60                       SkXfermode* xmode,
     61                       const uint16_t indices[],
     62                       int indexCount,
     63                       const SkPaint& paint) SK_OVERRIDE;
     64 
     65     void willSave(SkCanvas::SaveFlags) SK_OVERRIDE;
     66     SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SkCanvas::SaveFlags) SK_OVERRIDE;
     67     void willRestore() SK_OVERRIDE;
     68 
     69     void didConcat(const SkMatrix&) SK_OVERRIDE;
     70     void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
     71 
     72     void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
     73     void onDrawText(const void* text,
     74                     size_t byteLength,
     75                     SkScalar x,
     76                     SkScalar y,
     77                     const SkPaint& paint) SK_OVERRIDE;
     78     void onDrawPosText(const void* text,
     79                        size_t byteLength,
     80                        const SkPoint pos[],
     81                        const SkPaint& paint) SK_OVERRIDE;
     82     void onDrawPosTextH(const void* text,
     83                         size_t byteLength,
     84                         const SkScalar xpos[],
     85                         SkScalar constY,
     86                         const SkPaint& paint) SK_OVERRIDE;
     87     void onDrawTextOnPath(const void* text,
     88                           size_t byteLength,
     89                           const SkPath& path,
     90                           const SkMatrix* matrix,
     91                           const SkPaint& paint) SK_OVERRIDE;
     92     void onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE;
     93     void onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE;
     94     void onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE;
     95     void onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) SK_OVERRIDE;
     96 
     97     void onDrawPicture(const SkPicture* picture) SK_OVERRIDE;
     98 
     99     void onPushCull(const SkRect& cullRect) SK_OVERRIDE;
    100     void onPopCull() SK_OVERRIDE;
    101 
    102 private:
    103     template <typename T>
    104     T* copy(const T*);
    105 
    106     template <typename T>
    107     T* copy(const T[], unsigned count);
    108 
    109     SkRecord* fRecord;
    110 };
    111 
    112 #endif//SkRecorder_DEFINED
    113