Fixes for saveBehind/drawBehind
- fixes bug in device restore (was passing the wrong matrix)
- use drawbehind for the clear, to avoid rounding differences between canvas and gpu
Change-Id: I9c130e38437d8d34242620750f11a6ae7e62ff97
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/209801
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Derek Sollenberger <djsollen@google.com>
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index a0c956b..fdc7d59 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1141,11 +1141,7 @@
SkPaint paint;
paint.setBlendMode(SkBlendMode::kClear);
- if (localBounds) {
- this->drawRect(*localBounds, paint);
- } else {
- this->drawPaint(paint);
- }
+ this->drawClippedToSaveBehind(paint);
}
void SkCanvas::internalRestore() {
@@ -2146,7 +2142,6 @@
while (iter.next()) {
SkBaseDevice* dev = iter.fDevice;
- SkMatrix ctm = dev->ctm();
dev->save();
// We use clipRegion because it is already defined to operate in dev-space
// (i.e. ignores the ctm). However, it is going to first translate by -origin,
@@ -2154,7 +2149,7 @@
SkRegion rgn(bounds.makeOffset(dev->fOrigin.fX, dev->fOrigin.fY));
dev->clipRegion(rgn, SkClipOp::kIntersect);
dev->drawPaint(looper.paint());
- dev->restore(ctm);
+ dev->restore(fMCRec->fMatrix);
}
LOOPER_END