Index: tests/CanvasTest.cpp |
diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp |
index 70c2c04ffabf511239239fe8fe3cf91ab78582af..c85fc1d4083e7af82034c9a8bead7070d22bf73e 100644 |
--- a/tests/CanvasTest.cpp |
+++ b/tests/CanvasTest.cpp |
@@ -779,6 +779,45 @@ DEF_TEST(Canvas_ClipEmptyPath, reporter) { |
canvas.restore(); |
} |
+#define SHADOW_TEST_CANVAS_CONST 10 |
+ |
+class SkShadowTestCanvas : public SkPaintFilterCanvas { |
+public: |
+ |
+ SkShadowTestCanvas(int x, int y, skiatest::Reporter* reporter) |
+ : INHERITED(x,y) |
+ , fReporter(reporter) {} |
+ |
+ bool onFilter(SkTCopyOnFirstWrite<SkPaint>* paint, Type type) const { |
+ REPORTER_ASSERT(this->fReporter, this->getZ() == SHADOW_TEST_CANVAS_CONST); |
+ |
+ return true; |
+ } |
+ |
+ void testUpdateDepth(skiatest::Reporter *reporter) { |
+ // set some depths (with picture enabled), then check them as they get set |
+ |
+ REPORTER_ASSERT(reporter, this->getZ() == 0); |
+ this->translateZ(-10); |
+ REPORTER_ASSERT(reporter, this->getZ() == -10); |
+ |
+ this->save(); |
+ this->translateZ(20); |
+ REPORTER_ASSERT(reporter, this->getZ() == 10); |
+ |
+ this->restore(); |
+ REPORTER_ASSERT(reporter, this->getZ() == -10); |
+ |
+ this->translateZ(13.14f); |
+ REPORTER_ASSERT(reporter, SkScalarNearlyEqual(this->getZ(), 3.14f)); |
+ } |
+ |
+private: |
+ skiatest::Reporter* fReporter; |
+ |
+ typedef SkPaintFilterCanvas INHERITED; |
+}; |
+ |
namespace { |
class MockFilterCanvas : public SkPaintFilterCanvas { |
@@ -812,4 +851,18 @@ DEF_TEST(PaintFilterCanvas_ConsistentState, reporter) { |
REPORTER_ASSERT(reporter, canvas.getTotalMatrix() == filterCanvas.getTotalMatrix()); |
REPORTER_ASSERT(reporter, canvas.getClipBounds(&clip1) == filterCanvas.getClipBounds(&clip2)); |
REPORTER_ASSERT(reporter, clip1 == clip2); |
+ |
+ SkShadowTestCanvas* tCanvas = new SkShadowTestCanvas(100,100, reporter); |
+ tCanvas->testUpdateDepth(reporter); |
+ delete(tCanvas); |
+ |
+ SkPictureRecorder recorder; |
+ SkShadowTestCanvas *tSCanvas = new SkShadowTestCanvas(100, 100, reporter); |
+ SkCanvas *tPCanvas = recorder.beginRecording(SkRect::MakeIWH(100, 100)); |
+ |
+ tPCanvas->translateZ(SHADOW_TEST_CANVAS_CONST); |
+ sk_sp<SkPicture> pic = recorder.finishRecordingAsPicture(); |
+ tSCanvas->drawPicture(pic); |
+ |
+ delete(tSCanvas); |
} |