aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/CanvasTest.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp
index 0d5c862360..5aa3d46628 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);
+}