Index: src/utils/debugger/SkDebugCanvas.cpp |
diff --git a/src/utils/debugger/SkDebugCanvas.cpp b/src/utils/debugger/SkDebugCanvas.cpp |
index 6a04006264966c3277e238a5a2e7c297e5d3e920..9d809559dcb0ea3af079049efa6aff711ac3fc09 100644 |
--- a/src/utils/debugger/SkDebugCanvas.cpp |
+++ b/src/utils/debugger/SkDebugCanvas.cpp |
@@ -19,14 +19,11 @@ SkDebugCanvas::SkDebugCanvas(int width, int height) |
, fPicture(NULL) |
, fFilter(false) |
, fMegaVizMode(false) |
- , fIndex(0) |
, fOverdrawViz(false) |
, fOverdrawFilter(NULL) |
, fOverrideTexFiltering(false) |
- , fTexOverrideFilter(NULL) |
- , fOutstandingSaveCount(0) { |
+ , fTexOverrideFilter(NULL) { |
fUserMatrix.reset(); |
- fDrawNeedsReset = false; |
// SkPicturePlayback uses the base-class' quickReject calls to cull clipped |
// operations. This can lead to problems in the debugger which expects all |
@@ -59,8 +56,6 @@ void SkDebugCanvas::addDrawCommand(SkDrawCommand* command) { |
} |
void SkDebugCanvas::draw(SkCanvas* canvas) { |
- fDrawNeedsReset = true; |
- |
if (!fCommandVector.isEmpty()) { |
this->drawTo(canvas, fCommandVector.count() - 1); |
} |
@@ -231,32 +226,20 @@ void SkDebugCanvas::markActiveCommands(int index) { |
void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) { |
SkASSERT(!fCommandVector.isEmpty()); |
SkASSERT(index < fCommandVector.count()); |
- int i = 0; |
+ |
+ int saveCount = canvas->save(); |
+ |
SkRect windowRect = SkRect::MakeWH(SkIntToScalar(canvas->getBaseLayerSize().width()), |
SkIntToScalar(canvas->getBaseLayerSize().height())); |
bool pathOpsMode = getAllowSimplifyClip(); |
canvas->setAllowSimplifyClip(pathOpsMode); |
- // This only works assuming the canvas and device are the same ones that |
- // were previously drawn into because they need to preserve all saves |
- // and restores. |
- // The visibility filter also requires a full re-draw - otherwise we can |
- // end up drawing the filter repeatedly. |
- if (fIndex < index && !fFilter && !fMegaVizMode && !pathOpsMode && !fDrawNeedsReset) { |
- i = fIndex + 1; |
- } else { |
- for (int j = 0; j < fOutstandingSaveCount; j++) { |
- canvas->restore(); |
- } |
- canvas->clear(SK_ColorTRANSPARENT); |
- canvas->resetMatrix(); |
- if (!windowRect.isEmpty()) { |
- canvas->clipRect(windowRect, SkRegion::kReplace_Op); |
- } |
- this->applyUserTransform(canvas); |
- fDrawNeedsReset = false; |
- fOutstandingSaveCount = 0; |
+ canvas->clear(SK_ColorTRANSPARENT); |
+ canvas->resetMatrix(); |
+ if (!windowRect.isEmpty()) { |
+ canvas->clipRect(windowRect, SkRegion::kReplace_Op); |
} |
+ this->applyUserTransform(canvas); |
// The setting of the draw filter has to go here (rather than in |
// SkRasterWidget) due to the canvas restores this class performs. |
@@ -286,7 +269,7 @@ void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) { |
this->markActiveCommands(index); |
} |
- for (; i <= index; i++) { |
+ for (int i = 0; i <= index; i++) { |
if (i == index && fFilter) { |
canvas->clear(0xAAFFFFFF); |
} |
@@ -302,8 +285,6 @@ void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) { |
fCommandVector[i]->setUserMatrix(fUserMatrix); |
fCommandVector[i]->execute(canvas); |
} |
- |
- fCommandVector[i]->trackSaveState(&fOutstandingSaveCount); |
} |
} |
@@ -350,7 +331,8 @@ void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) { |
if (!canvas->getClipDeviceBounds(&fClip)) { |
fClip.setEmpty(); |
} |
- fIndex = index; |
+ |
+ canvas->restoreToCount(saveCount); |
} |
void SkDebugCanvas::deleteDrawCommandAt(int index) { |