diff options
Diffstat (limited to 'tests/QuickRejectTest.cpp')
-rw-r--r-- | tests/QuickRejectTest.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/QuickRejectTest.cpp b/tests/QuickRejectTest.cpp index b39484bd89..8f6556bcd6 100644 --- a/tests/QuickRejectTest.cpp +++ b/tests/QuickRejectTest.cpp @@ -7,6 +7,7 @@ #include "SkCanvas.h" #include "SkDrawLooper.h" +#include "SkLightingImageFilter.h" #include "SkTypes.h" #include "Test.h" @@ -145,3 +146,26 @@ DEF_TEST(QuickReject, reporter) { test_layers(reporter); test_quick_reject(reporter); } + +// Regression test to make sure that we keep fIsScaleTranslate up to date on the canvas. +// It is possible to set a new matrix on the canvas without calling setMatrix(). This tests +// that code path. +DEF_TEST(QuickReject_MatrixState, reporter) { + SkCanvas canvas(100, 100); + + SkMatrix matrix; + matrix.setRotate(45.0f); + canvas.setMatrix(matrix); + + SkPaint paint; + sk_sp<SkImageFilter> filter = SkLightingImageFilter::MakeDistantLitDiffuse( + SkPoint3::Make(1.0f, 1.0f, 1.0f), 0xFF0000FF, 2.0f, 0.5f, nullptr); + REPORTER_ASSERT(reporter, filter); + paint.setImageFilter(filter); + SkCanvas::SaveLayerRec rec; + rec.fPaint = &paint; + canvas.saveLayer(rec); + + // quickReject() will assert if the matrix is out of sync. + canvas.quickReject(SkRect::MakeWH(100.0f, 100.0f)); +} |