Index: tests/CanvasTest.cpp |
diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp |
index 0d5c86236075e6609f6f0a2705022566eb706f7f..5aa3d4662863efb96a4fd0d00d6e8e3b8b851ef5 100644 |
--- a/tests/CanvasTest.cpp |
+++ b/tests/CanvasTest.cpp |
@@ -52,6 +52,7 @@ |
#include "SkMatrix.h" |
#include "SkNWayCanvas.h" |
#include "SkPaint.h" |
+#include "SkPaintFilterCanvas.h" |
#include "SkPath.h" |
#include "SkPicture.h" |
#include "SkPictureRecord.h" |
@@ -782,3 +783,38 @@ DEF_TEST(Canvas_ClipEmptyPath, reporter) { |
canvas.clipPath(path); // should not assert here |
canvas.restore(); |
} |
+ |
+namespace { |
+ |
+class MockFilterCanvas : public SkPaintFilterCanvas { |
+public: |
+ MockFilterCanvas(SkCanvas* canvas) : INHERITED(canvas) { } |
+ |
+protected: |
+ void onFilterPaint(SkPaint *paint, Type type) const override { } |
+ |
+private: |
+ typedef SkPaintFilterCanvas INHERITED; |
+}; |
+ |
+} // anonymous namespace |
+ |
+// SkPaintFilterCanvas should inherit the initial target canvas state. |
+DEF_TEST(PaintFilterCanvas_ConsistentState, reporter) { |
+ SkCanvas canvas(100, 100); |
+ canvas.clipRect(SkRect::MakeXYWH(12.7f, 12.7f, 75, 75)); |
+ canvas.scale(0.5f, 0.75f); |
+ |
+ SkRect clip1, clip2; |
+ |
+ MockFilterCanvas filterCanvas(&canvas); |
+ REPORTER_ASSERT(reporter, canvas.getTotalMatrix() == filterCanvas.getTotalMatrix()); |
+ REPORTER_ASSERT(reporter, canvas.getClipBounds(&clip1) == filterCanvas.getClipBounds(&clip2)); |
+ REPORTER_ASSERT(reporter, clip1 == clip2); |
+ |
+ filterCanvas.clipRect(SkRect::MakeXYWH(30.5f, 30.7f, 100, 100)); |
+ filterCanvas.scale(0.75f, 0.5f); |
+ REPORTER_ASSERT(reporter, canvas.getTotalMatrix() == filterCanvas.getTotalMatrix()); |
+ REPORTER_ASSERT(reporter, canvas.getClipBounds(&clip1) == filterCanvas.getClipBounds(&clip2)); |
+ REPORTER_ASSERT(reporter, clip1 == clip2); |
+} |