diff options
author | msarett <msarett@google.com> | 2016-08-19 08:38:36 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-19 08:38:36 -0700 |
commit | 9da5a5a198e5dc9148f7f30a6089377590eee55b (patch) | |
tree | de8ac0d1d8ab4512df973f4e30df0b0e0dd5845a /tests/QuickRejectTest.cpp | |
parent | 9c3887c975ae00a5c5522c2dfb367d13c0601953 (diff) |
Fix bug, always keep fIsScaleTranslate in correct state
BUG:639179
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2263513003
Review-Url: https://codereview.chromium.org/2263513003
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)); +} |