SkRecorder.h revision 963137b75c0a1fe91f35e9826742f36309f5e65d
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
17class SkRecorder : public SkCanvas {
18public:
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    void drawPatch(const SkPatch& patch, const SkPaint& paint) SK_OVERRIDE;
65
66    void willSave() SK_OVERRIDE;
67    SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SkCanvas::SaveFlags) SK_OVERRIDE;
68    void willRestore() SK_OVERRIDE;
69
70    void didConcat(const SkMatrix&) SK_OVERRIDE;
71    void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
72
73    void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
74    void onDrawText(const void* text,
75                    size_t byteLength,
76                    SkScalar x,
77                    SkScalar y,
78                    const SkPaint& paint) SK_OVERRIDE;
79    void onDrawPosText(const void* text,
80                       size_t byteLength,
81                       const SkPoint pos[],
82                       const SkPaint& paint) SK_OVERRIDE;
83    void onDrawPosTextH(const void* text,
84                        size_t byteLength,
85                        const SkScalar xpos[],
86                        SkScalar constY,
87                        const SkPaint& paint) SK_OVERRIDE;
88    void onDrawTextOnPath(const void* text,
89                          size_t byteLength,
90                          const SkPath& path,
91                          const SkMatrix* matrix,
92                          const SkPaint& paint) SK_OVERRIDE;
93    void onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE;
94    void onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE;
95    void onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) SK_OVERRIDE;
96    void onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) SK_OVERRIDE;
97
98    void onDrawPicture(const SkPicture* picture) SK_OVERRIDE;
99
100    void onPushCull(const SkRect& cullRect) SK_OVERRIDE;
101    void onPopCull() SK_OVERRIDE;
102
103private:
104    template <typename T>
105    T* copy(const T*);
106
107    template <typename T>
108    T* copy(const T[], unsigned count);
109
110    SkRecord* fRecord;
111};
112
113#endif//SkRecorder_DEFINED
114