From 9da5a5a198e5dc9148f7f30a6089377590eee55b Mon Sep 17 00:00:00 2001 From: msarett Date: Fri, 19 Aug 2016 08:38:36 -0700 Subject: 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 --- tests/QuickRejectTest.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'tests/QuickRejectTest.cpp') 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 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)); +} -- cgit v1.2.3