blob: 5172bc23f51aab15ea6f52156646deed28179ca5 [file] [log] [blame]
chudy@google.com902ebe52012-06-29 14:21:22 +00001
2/*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9
10#ifndef SKDEBUGCANVAS_H_
11#define SKDEBUGCANVAS_H_
12
chudy@google.com902ebe52012-06-29 14:21:22 +000013#include "SkCanvas.h"
14#include "SkDrawCommand.h"
15#include "SkPicture.h"
chudy@google.com97cee972012-08-07 20:41:37 +000016#include "SkTDArray.h"
17#include "SkString.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000018
19class SkDebugCanvas : public SkCanvas {
20public:
chudy@google.com80a4a602012-07-30 18:54:07 +000021 SkDebugCanvas(int width, int height);
chudy@google.com902ebe52012-06-29 14:21:22 +000022 ~SkDebugCanvas();
23
24 void toggleFilter(bool toggle);
25
26 /**
27 Executes all draw calls to the canvas.
28 @param canvas The canvas being drawn to
29 */
30 void draw(SkCanvas* canvas);
31
32 /**
33 Executes the draw calls in the specified range.
34 @param canvas The canvas being drawn to
35 @param i The beginning of the range
36 @param j The end of the range
37 TODO(chudy): Implement
38 */
39 void drawRange(SkCanvas* canvas, int i, int j);
40
41 /**
42 Executes the draw calls up to the specified index.
43 @param canvas The canvas being drawn to
44 @param index The index of the final command being executed
45 */
chudy@google.com0b5bbb02012-07-31 19:55:32 +000046 void drawTo(SkCanvas* canvas, int index);
47
48 /**
chudy@google.coma9e937c2012-08-03 17:32:05 +000049 Returns the most recently calculated transformation matrix
50 */
51 const SkMatrix& getCurrentMatrix() {
52 return fMatrix;
53 }
54
55 /**
56 Returns the most recently calculated clip
57 */
58 const SkIRect& getCurrentClip() {
59 return fClip;
60 }
61
62 /**
chudy@google.com0b5bbb02012-07-31 19:55:32 +000063 Returns the index of the last draw command to write to the pixel at (x,y)
64 */
chudy@google.com830b8792012-08-01 15:57:52 +000065 int getCommandAtPoint(int x, int y, int index);
chudy@google.com902ebe52012-06-29 14:21:22 +000066
67 /**
68 Returns the draw command at the given index.
69 @param index The index of the command
70 */
71 SkDrawCommand* getDrawCommandAt(int index);
72
73 /**
74 Returns information about the command at the given index.
75 @param index The index of the command
76 */
chudy@google.com97cee972012-08-07 20:41:37 +000077 SkTDArray<SkString*>* getCommandInfo(int index);
chudy@google.com902ebe52012-06-29 14:21:22 +000078
79 /**
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000080 Returns the visibility of the command at the given index.
81 @param index The index of the command
82 */
83 bool getDrawCommandVisibilityAt(int index);
84
85 /**
chudy@google.com902ebe52012-06-29 14:21:22 +000086 Returns the vector of draw commands
87 */
chudy@google.com97cee972012-08-07 20:41:37 +000088 SkTDArray<SkDrawCommand*> getDrawCommands();
chudy@google.com902ebe52012-06-29 14:21:22 +000089
90 /**
91 * Returns the string vector of draw commands
92 */
chudy@google.com97cee972012-08-07 20:41:37 +000093 SkTDArray<SkString*>* getDrawCommandsAsStrings();
chudy@google.com902ebe52012-06-29 14:21:22 +000094
95 /**
chudy@google.comf1414322012-07-03 20:28:14 +000096 Returns length of draw command vector.
97 */
98 int getSize() {
chudy@google.com97cee972012-08-07 20:41:37 +000099 return commandVector.count();
chudy@google.comf1414322012-07-03 20:28:14 +0000100 }
101
chudy@google.com902ebe52012-06-29 14:21:22 +0000102 /**
103 Toggles the visibility / execution of the draw command at index i with
104 the value of toggle.
105 */
106 void toggleCommand(int index, bool toggle);
107
chudy@google.comb9ddd4e2012-07-10 14:14:50 +0000108 void setBounds(int width, int height) {
109 fWidth = width;
110 fHeight = height;
111 }
112
chudy@google.com830b8792012-08-01 15:57:52 +0000113 void setUserOffset(SkIPoint offset) {
114 fUserOffset = offset;
115 }
116
117 void setUserScale(float scale) {
118 fUserScale = scale;
119 }
120
chudy@google.com902ebe52012-06-29 14:21:22 +0000121////////////////////////////////////////////////////////////////////////////////
122// Inherited from SkCanvas
123////////////////////////////////////////////////////////////////////////////////
124
125 virtual void clear(SkColor) SK_OVERRIDE;
126
127 virtual bool clipPath(const SkPath&, SkRegion::Op, bool) SK_OVERRIDE;
128
129 virtual bool clipRect(const SkRect&, SkRegion::Op, bool) SK_OVERRIDE;
130
131 virtual bool clipRegion(const SkRegion& region, SkRegion::Op op) SK_OVERRIDE;
132
133 virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE;
134
135 virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
136 const SkPaint*) SK_OVERRIDE;
137
reed@google.com71121732012-09-18 15:14:33 +0000138 virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
139 const SkRect& dst, const SkPaint*) SK_OVERRIDE;
chudy@google.com902ebe52012-06-29 14:21:22 +0000140
141 virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
142 const SkPaint*) SK_OVERRIDE;
143
144 virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
145 const SkRect& dst, const SkPaint*) SK_OVERRIDE;
146
147 virtual void drawData(const void*, size_t) SK_OVERRIDE;
148
149 virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE;
150
151 virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
152
153 virtual void drawPicture(SkPicture& picture) SK_OVERRIDE;
154
155 virtual void drawPoints(PointMode, size_t count, const SkPoint pts[],
156 const SkPaint&) SK_OVERRIDE;
157
158 virtual void drawPosText(const void* text, size_t byteLength,
159 const SkPoint pos[], const SkPaint&) SK_OVERRIDE;
160
161 virtual void drawPosTextH(const void* text, size_t byteLength,
162 const SkScalar xpos[], SkScalar constY, const SkPaint&) SK_OVERRIDE;
163
164 virtual void drawRect(const SkRect& rect, const SkPaint&) SK_OVERRIDE;
165
166 virtual void drawSprite(const SkBitmap&, int left, int top,
167 const SkPaint*) SK_OVERRIDE;
168
169 virtual void drawText(const void* text, size_t byteLength, SkScalar x,
170 SkScalar y, const SkPaint&) SK_OVERRIDE;
171
172 virtual void drawTextOnPath(const void* text, size_t byteLength,
173 const SkPath& path, const SkMatrix* matrix,
174 const SkPaint&) SK_OVERRIDE;
175
176 virtual void drawVertices(VertexMode, int vertexCount,
177 const SkPoint vertices[], const SkPoint texs[],
178 const SkColor colors[], SkXfermode*,
179 const uint16_t indices[], int indexCount,
180 const SkPaint&) SK_OVERRIDE;
181
182 virtual void restore() SK_OVERRIDE;
183
184 virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
185
186 virtual int save(SaveFlags) SK_OVERRIDE;
187
188 virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE;
189
190 virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
191
192 virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE;
193
194 virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE;
195
196 virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
197
198private:
199 typedef SkCanvas INHERITED;
chudy@google.com97cee972012-08-07 20:41:37 +0000200 SkTDArray<SkDrawCommand*> commandVector;
chudy@google.comb9ddd4e2012-07-10 14:14:50 +0000201 int fHeight;
202 int fWidth;
chudy@google.com902ebe52012-06-29 14:21:22 +0000203 SkBitmap fBm;
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000204 bool fFilter;
chudy@google.com830b8792012-08-01 15:57:52 +0000205 int fIndex;
206 SkIPoint fUserOffset;
207 float fUserScale;
chudy@google.coma9e937c2012-08-03 17:32:05 +0000208 SkMatrix fMatrix;
209 SkIRect fClip;
chudy@google.com902ebe52012-06-29 14:21:22 +0000210
211 /**
212 Adds the command to the classes vector of commands.
213 @param command The draw command for execution
214 */
215 void addDrawCommand(SkDrawCommand* command);
chudy@google.com830b8792012-08-01 15:57:52 +0000216
217 /**
218 Applies any panning and zooming the user has specified before
219 drawing anything else into the canvas.
220 */
221 void applyUserTransform(SkCanvas* canvas);
chudy@google.com902ebe52012-06-29 14:21:22 +0000222};
223
224#endif