OLD | NEW |
| (Empty) |
1 | |
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 | |
13 #include "SkCanvas.h" | |
14 #include "SkDrawCommand.h" | |
15 #include "SkPath.h" | |
16 #include "SkPathOps.h" | |
17 #include "SkPicture.h" | |
18 #include "SkString.h" | |
19 #include "SkTArray.h" | |
20 | |
21 class SkNWayCanvas; | |
22 | |
23 class SK_API SkDebugCanvas : public SkCanvas { | |
24 public: | |
25 SkDebugCanvas(int width, int height); | |
26 virtual ~SkDebugCanvas(); | |
27 | |
28 void toggleFilter(bool toggle) { fFilter = toggle; } | |
29 | |
30 void setMegaVizMode(bool megaVizMode) { fMegaVizMode = megaVizMode; } | |
31 bool getMegaVizMode() const { return fMegaVizMode; } | |
32 | |
33 /** | |
34 * Enable or disable overdraw visualization | |
35 */ | |
36 void setOverdrawViz(bool overdrawViz); | |
37 bool getOverdrawViz() const { return fOverdrawViz; } | |
38 | |
39 bool getAllowSimplifyClip() const { return fAllowSimplifyClip; } | |
40 | |
41 void setPicture(SkPicture* picture) { fPicture = picture; } | |
42 | |
43 /** | |
44 * Enable or disable texure filtering override | |
45 */ | |
46 void overrideTexFiltering(bool overrideTexFiltering, SkFilterQuality); | |
47 | |
48 /** | |
49 Executes all draw calls to the canvas. | |
50 @param canvas The canvas being drawn to | |
51 */ | |
52 void draw(SkCanvas* canvas); | |
53 | |
54 /** | |
55 Executes the draw calls up to the specified index. | |
56 @param canvas The canvas being drawn to | |
57 @param index The index of the final command being executed | |
58 */ | |
59 void drawTo(SkCanvas* canvas, int index); | |
60 | |
61 /** | |
62 Returns the most recently calculated transformation matrix | |
63 */ | |
64 const SkMatrix& getCurrentMatrix() { | |
65 return fMatrix; | |
66 } | |
67 | |
68 /** | |
69 Returns the most recently calculated clip | |
70 */ | |
71 const SkIRect& getCurrentClip() { | |
72 return fClip; | |
73 } | |
74 | |
75 /** | |
76 Returns the index of the last draw command to write to the pixel at (x,y
) | |
77 */ | |
78 int getCommandAtPoint(int x, int y, int index); | |
79 | |
80 /** | |
81 Removes the command at the specified index | |
82 @param index The index of the command to delete | |
83 */ | |
84 void deleteDrawCommandAt(int index); | |
85 | |
86 /** | |
87 Returns the draw command at the given index. | |
88 @param index The index of the command | |
89 */ | |
90 SkDrawCommand* getDrawCommandAt(int index); | |
91 | |
92 /** | |
93 Sets the draw command for a given index. | |
94 @param index The index to overwrite | |
95 @param command The new command | |
96 */ | |
97 void setDrawCommandAt(int index, SkDrawCommand* command); | |
98 | |
99 /** | |
100 Returns information about the command at the given index. | |
101 @param index The index of the command | |
102 */ | |
103 const SkTDArray<SkString*>* getCommandInfo(int index) const; | |
104 | |
105 /** | |
106 Returns the visibility of the command at the given index. | |
107 @param index The index of the command | |
108 */ | |
109 bool getDrawCommandVisibilityAt(int index); | |
110 | |
111 /** | |
112 Returns the vector of draw commands | |
113 */ | |
114 SK_ATTR_DEPRECATED("please use getDrawCommandAt and getSize instead") | |
115 const SkTDArray<SkDrawCommand*>& getDrawCommands() const; | |
116 | |
117 /** | |
118 Returns the vector of draw commands. Do not use this entry | |
119 point - it is going away! | |
120 */ | |
121 SkTDArray<SkDrawCommand*>& getDrawCommands(); | |
122 | |
123 /** | |
124 Returns length of draw command vector. | |
125 */ | |
126 int getSize() const { | |
127 return fCommandVector.count(); | |
128 } | |
129 | |
130 /** | |
131 Toggles the visibility / execution of the draw command at index i with | |
132 the value of toggle. | |
133 */ | |
134 void toggleCommand(int index, bool toggle); | |
135 | |
136 void setUserMatrix(SkMatrix matrix) { | |
137 fUserMatrix = matrix; | |
138 } | |
139 | |
140 SkString clipStackData() const { return fClipStackData; } | |
141 | |
142 //////////////////////////////////////////////////////////////////////////////// | |
143 // Inherited from SkCanvas | |
144 //////////////////////////////////////////////////////////////////////////////// | |
145 | |
146 static const int kVizImageHeight = 256; | |
147 static const int kVizImageWidth = 256; | |
148 | |
149 bool isClipEmpty() const override { return false; } | |
150 bool isClipRect() const override { return true; } | |
151 bool getClipBounds(SkRect* bounds) const override { | |
152 if (bounds) { | |
153 bounds->setXYWH(0, 0, | |
154 SkIntToScalar(this->imageInfo().width()), | |
155 SkIntToScalar(this->imageInfo().height())); | |
156 } | |
157 return true; | |
158 } | |
159 bool getClipDeviceBounds(SkIRect* bounds) const override { | |
160 if (bounds) { | |
161 bounds->setLargest(); | |
162 } | |
163 return true; | |
164 } | |
165 | |
166 protected: | |
167 void willSave() override; | |
168 SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec&) override; | |
169 void willRestore() override; | |
170 | |
171 void didConcat(const SkMatrix&) override; | |
172 void didSetMatrix(const SkMatrix&) override; | |
173 | |
174 void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override; | |
175 void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, | |
176 const SkPaint&) override; | |
177 void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[], | |
178 const SkPaint&) override; | |
179 void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos
[], | |
180 SkScalar constY, const SkPaint&) override; | |
181 void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& pat
h, | |
182 const SkMatrix* matrix, const SkPaint&) override; | |
183 void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, | |
184 const SkPaint& paint) override; | |
185 | |
186 void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], | |
187 const SkPoint texCoords[4], SkXfermode* xmode, const SkPain
t& paint) override; | |
188 void onDrawPaint(const SkPaint&) override; | |
189 | |
190 void onDrawRect(const SkRect&, const SkPaint&) override; | |
191 void onDrawOval(const SkRect&, const SkPaint&) override; | |
192 void onDrawRRect(const SkRRect&, const SkPaint&) override; | |
193 void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPain
t&) override; | |
194 void onDrawVertices(VertexMode vmode, int vertexCount, | |
195 const SkPoint vertices[], const SkPoint texs[], | |
196 const SkColor colors[], SkXfermode* xmode, | |
197 const uint16_t indices[], int indexCount, | |
198 const SkPaint&) override; | |
199 void onDrawPath(const SkPath&, const SkPaint&) override; | |
200 void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPain
t*) override; | |
201 void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst,
const SkPaint*, | |
202 SrcRectConstraint) override; | |
203 void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint*
) override; | |
204 void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst, | |
205 const SkPaint*, SrcRectConstraint) override; | |
206 void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect&
dst, | |
207 const SkPaint*) override; | |
208 void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) override; | |
209 void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) override; | |
210 void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) override; | |
211 void onClipRegion(const SkRegion& region, SkRegion::Op) override; | |
212 | |
213 void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) overri
de; | |
214 | |
215 void markActiveCommands(int index); | |
216 | |
217 private: | |
218 SkTDArray<SkDrawCommand*> fCommandVector; | |
219 SkPicture* fPicture; | |
220 bool fFilter; | |
221 bool fMegaVizMode; | |
222 SkMatrix fUserMatrix; | |
223 SkMatrix fMatrix; | |
224 SkIRect fClip; | |
225 | |
226 SkString fClipStackData; | |
227 bool fCalledAddStackData; | |
228 SkPath fSaveDevPath; | |
229 | |
230 bool fOverdrawViz; | |
231 bool fOverrideFilterQuality; | |
232 SkFilterQuality fFilterQuality; | |
233 | |
234 SkAutoTUnref<SkNWayCanvas> fPaintFilterCanvas; | |
235 | |
236 /** | |
237 The active saveLayer commands at a given point in the renderering. | |
238 Only used when "mega" visualization is enabled. | |
239 */ | |
240 SkTDArray<SkDrawCommand*> fActiveLayers; | |
241 | |
242 /** | |
243 Adds the command to the classes vector of commands. | |
244 @param command The draw command for execution | |
245 */ | |
246 void addDrawCommand(SkDrawCommand* command); | |
247 | |
248 /** | |
249 Applies any panning and zooming the user has specified before | |
250 drawing anything else into the canvas. | |
251 */ | |
252 void applyUserTransform(SkCanvas* canvas); | |
253 | |
254 void resetClipStackData() { fClipStackData.reset(); fCalledAddStackData = fa
lse; } | |
255 | |
256 void addClipStackData(const SkPath& devPath, const SkPath& operand, SkRegion
::Op elementOp); | |
257 void addPathData(const SkPath& path, const char* pathName); | |
258 bool lastClipStackData(const SkPath& devPath); | |
259 void outputConicPoints(const SkPoint* pts, SkScalar weight); | |
260 void outputPoints(const SkPoint* pts, int count); | |
261 void outputPointsCommon(const SkPoint* pts, int count); | |
262 void outputScalar(SkScalar num); | |
263 | |
264 void updatePaintFilterCanvas(); | |
265 | |
266 typedef SkCanvas INHERITED; | |
267 }; | |
268 | |
269 #endif | |
OLD | NEW |