Index: src/core/SkRecordDraw.cpp |
diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp |
index 4847273f52a826f4eb2510abb75b4e7860cc82d2..90b85d1e969e63277b0eef6679576049c0e15d11 100644 |
--- a/src/core/SkRecordDraw.cpp |
+++ b/src/core/SkRecordDraw.cpp |
@@ -221,6 +221,7 @@ private: |
int controlOps; // Number of control ops in this Save block, including the Save. |
Bounds bounds; // Bounds of everything in the block. |
const SkPaint* paint; // Unowned. If set, adjusts the bounds of all ops in this block. |
+ SkMatrix ctm; |
}; |
// Only Restore, SetMatrix, and Concat change the CTM. |
@@ -301,6 +302,7 @@ private: |
sb.bounds = |
PaintMayAffectTransparentBlack(paint) ? fCurrentClipBounds : Bounds::MakeEmpty(); |
sb.paint = paint; |
+ sb.ctm = this->fCTM; |
fSaveStack.push(sb); |
this->pushControl(); |
@@ -563,9 +565,15 @@ private: |
bool adjustForSaveLayerPaints(SkRect* rect, int savesToIgnore = 0) const { |
for (int i = fSaveStack.count() - 1 - savesToIgnore; i >= 0; i--) { |
+ SkMatrix inverse; |
+ if (!fSaveStack[i].ctm.invert(&inverse)) { |
+ return false; |
+ } |
+ inverse.mapRect(rect); |
reed1
2015/12/07 20:24:11
Is this change a fix in its own right, or is it co
Stephen White
2015/12/07 20:29:40
IIRC the problem/bug was being papered over by the
Stephen White
2015/12/07 20:51:15
To follow up: this breaks layout tests css3/filter
|
if (!AdjustForPaint(fSaveStack[i].paint, rect)) { |
return false; |
} |
+ fSaveStack[i].ctm.mapRect(rect); |
} |
return true; |
} |