• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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