Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: src/utils/debugger/SkDebugCanvas.cpp

Issue 660883002: "Fix" debugger's setMatrix handling (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/utils/debugger/SkDebugCanvas.h ('k') | src/utils/debugger/SkDrawCommand.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
11 #include "SkDebugCanvas.h" 11 #include "SkDebugCanvas.h"
12 #include "SkDrawCommand.h" 12 #include "SkDrawCommand.h"
13 #include "SkDrawFilter.h" 13 #include "SkDrawFilter.h"
14 #include "SkDevice.h" 14 #include "SkDevice.h"
15 #include "SkXfermode.h" 15 #include "SkXfermode.h"
16 16
17 SkDebugCanvas::SkDebugCanvas(int windowWidth, int windowHeight) 17 SkDebugCanvas::SkDebugCanvas(int windowWidth, int windowHeight)
18 : INHERITED(windowWidth, windowHeight) 18 : INHERITED(windowWidth, windowHeight)
19 , fPicture(NULL) 19 , fPicture(NULL)
20 , fWindowSize(SkISize::Make(windowWidth, windowHeight)) 20 , fWindowSize(SkISize::Make(windowWidth, windowHeight))
21 , fFilter(false) 21 , fFilter(false)
22 , fMegaVizMode(false) 22 , fMegaVizMode(false)
23 , fIndex(0) 23 , fIndex(0)
24 , fOverdrawViz(false) 24 , fOverdrawViz(false)
25 , fOverdrawFilter(NULL) 25 , fOverdrawFilter(NULL)
26 , fOverrideTexFiltering(false) 26 , fOverrideTexFiltering(false)
27 , fTexOverrideFilter(NULL) 27 , fTexOverrideFilter(NULL)
28 , fOutstandingSaveCount(0) { 28 , fOutstandingSaveCount(0) {
29 fUserMatrix.reset(); 29 fUserMatrix.reset();
30 fDrawNeedsReset = false;
30 31
31 // SkPicturePlayback uses the base-class' quickReject calls to cull clipped 32 // SkPicturePlayback uses the base-class' quickReject calls to cull clipped
32 // operations. This can lead to problems in the debugger which expects all 33 // operations. This can lead to problems in the debugger which expects all
33 // the operations in the captured skp to appear in the debug canvas. To 34 // the operations in the captured skp to appear in the debug canvas. To
34 // circumvent this we create a wide open clip here (an empty clip rect 35 // circumvent this we create a wide open clip here (an empty clip rect
35 // is not sufficient). 36 // is not sufficient).
36 // Internally, the SkRect passed to clipRect is converted to an SkIRect and 37 // Internally, the SkRect passed to clipRect is converted to an SkIRect and
37 // rounded out. The following code creates a nearly maximal rect that will 38 // rounded out. The following code creates a nearly maximal rect that will
38 // not get collapsed by the coming conversions (Due to precision loss the 39 // not get collapsed by the coming conversions (Due to precision loss the
39 // inset has to be surprisingly large). 40 // inset has to be surprisingly large).
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 bitmap.allocPixels(SkImageInfo::MakeN32Premul(1, 1)); 75 bitmap.allocPixels(SkImageInfo::MakeN32Premul(1, 1));
75 76
76 SkCanvas canvas(bitmap); 77 SkCanvas canvas(bitmap);
77 canvas.translate(SkIntToScalar(-x), SkIntToScalar(-y)); 78 canvas.translate(SkIntToScalar(-x), SkIntToScalar(-y));
78 this->applyUserTransform(&canvas); 79 this->applyUserTransform(&canvas);
79 80
80 int layer = 0; 81 int layer = 0;
81 SkColor prev = bitmap.getColor(0,0); 82 SkColor prev = bitmap.getColor(0,0);
82 for (int i = 0; i < index; i++) { 83 for (int i = 0; i < index; i++) {
83 if (fCommandVector[i]->isVisible()) { 84 if (fCommandVector[i]->isVisible()) {
85 fCommandVector[i]->setUserMatrix(fUserMatrix);
84 fCommandVector[i]->execute(&canvas); 86 fCommandVector[i]->execute(&canvas);
85 } 87 }
86 if (prev != bitmap.getColor(0,0)) { 88 if (prev != bitmap.getColor(0,0)) {
87 layer = i; 89 layer = i;
88 } 90 }
89 prev = bitmap.getColor(0,0); 91 prev = bitmap.getColor(0,0);
90 } 92 }
91 return layer; 93 return layer;
92 } 94 }
93 95
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 SkASSERT(index < fCommandVector.count()); 241 SkASSERT(index < fCommandVector.count());
240 int i = 0; 242 int i = 0;
241 243
242 bool pathOpsMode = getAllowSimplifyClip(); 244 bool pathOpsMode = getAllowSimplifyClip();
243 canvas->setAllowSimplifyClip(pathOpsMode); 245 canvas->setAllowSimplifyClip(pathOpsMode);
244 // This only works assuming the canvas and device are the same ones that 246 // This only works assuming the canvas and device are the same ones that
245 // were previously drawn into because they need to preserve all saves 247 // were previously drawn into because they need to preserve all saves
246 // and restores. 248 // and restores.
247 // The visibility filter also requires a full re-draw - otherwise we can 249 // The visibility filter also requires a full re-draw - otherwise we can
248 // end up drawing the filter repeatedly. 250 // end up drawing the filter repeatedly.
249 if (fIndex < index && !fFilter && !fMegaVizMode && !pathOpsMode) { 251 if (fIndex < index && !fFilter && !fMegaVizMode && !pathOpsMode && !fDrawNee dsReset) {
250 i = fIndex + 1; 252 i = fIndex + 1;
251 } else { 253 } else {
252 for (int j = 0; j < fOutstandingSaveCount; j++) { 254 for (int j = 0; j < fOutstandingSaveCount; j++) {
253 canvas->restore(); 255 canvas->restore();
254 } 256 }
255 canvas->clear(SK_ColorTRANSPARENT); 257 canvas->clear(SK_ColorTRANSPARENT);
256 canvas->resetMatrix(); 258 canvas->resetMatrix();
257 SkRect rect = SkRect::MakeWH(SkIntToScalar(fWindowSize.fWidth), 259 SkRect rect = SkRect::MakeWH(SkIntToScalar(fWindowSize.fWidth),
258 SkIntToScalar(fWindowSize.fHeight)); 260 SkIntToScalar(fWindowSize.fHeight));
259 canvas->clipRect(rect, SkRegion::kReplace_Op); 261 canvas->clipRect(rect, SkRegion::kReplace_Op);
260 this->applyUserTransform(canvas); 262 this->applyUserTransform(canvas);
263 fDrawNeedsReset = false;
261 fOutstandingSaveCount = 0; 264 fOutstandingSaveCount = 0;
262 } 265 }
263 266
264 // The setting of the draw filter has to go here (rather than in 267 // The setting of the draw filter has to go here (rather than in
265 // SkRasterWidget) due to the canvas restores this class performs. 268 // SkRasterWidget) due to the canvas restores this class performs.
266 // Since the draw filter is stored in the layer stack if we 269 // Since the draw filter is stored in the layer stack if we
267 // call setDrawFilter on anything but the root layer odd things happen. 270 // call setDrawFilter on anything but the root layer odd things happen.
268 if (fOverdrawViz) { 271 if (fOverdrawViz) {
269 if (NULL == fOverdrawFilter) { 272 if (NULL == fOverdrawFilter) {
270 fOverdrawFilter = new SkOverdrawFilter; 273 fOverdrawFilter = new SkOverdrawFilter;
(...skipping 24 matching lines...) Expand all
295 } 298 }
296 299
297 if (fCommandVector[i]->isVisible()) { 300 if (fCommandVector[i]->isVisible()) {
298 if (fMegaVizMode && fCommandVector[i]->active()) { 301 if (fMegaVizMode && fCommandVector[i]->active()) {
299 // "active" commands execute their visualization behaviors: 302 // "active" commands execute their visualization behaviors:
300 // All active saveLayers get replaced with saves so all draw s go to the 303 // All active saveLayers get replaced with saves so all draw s go to the
301 // visible canvas. 304 // visible canvas.
302 // All active culls draw their cull box 305 // All active culls draw their cull box
303 fCommandVector[i]->vizExecute(canvas); 306 fCommandVector[i]->vizExecute(canvas);
304 } else { 307 } else {
308 fCommandVector[i]->setUserMatrix(fUserMatrix);
305 fCommandVector[i]->execute(canvas); 309 fCommandVector[i]->execute(canvas);
306 } 310 }
307 311
308 fCommandVector[i]->trackSaveState(&fOutstandingSaveCount); 312 fCommandVector[i]->trackSaveState(&fOutstandingSaveCount);
309 } 313 }
310 } 314 }
311 315
312 if (fMegaVizMode) { 316 if (fMegaVizMode) {
313 SkRect r = SkRect::MakeWH(SkIntToScalar(fWindowSize.fWidth), 317 SkRect r = SkRect::MakeWH(SkIntToScalar(fWindowSize.fWidth),
314 SkIntToScalar(fWindowSize.fHeight)); 318 SkIntToScalar(fWindowSize.fHeight));
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 } 731 }
728 732
729 bool SkDebugCanvas::lastClipStackData(const SkPath& devPath) { 733 bool SkDebugCanvas::lastClipStackData(const SkPath& devPath) {
730 if (fCalledAddStackData) { 734 if (fCalledAddStackData) {
731 fClipStackData.appendf("<br>"); 735 fClipStackData.appendf("<br>");
732 addPathData(devPath, "pathOut"); 736 addPathData(devPath, "pathOut");
733 return true; 737 return true;
734 } 738 }
735 return false; 739 return false;
736 } 740 }
OLDNEW
« no previous file with comments | « src/utils/debugger/SkDebugCanvas.h ('k') | src/utils/debugger/SkDrawCommand.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698