From b87f798e5a629284cc008b4986bb2ddba7ed9cb1 Mon Sep 17 00:00:00 2001 From: Fredrik Söderquist Date: Thu, 26 Oct 2017 13:54:16 +0200 Subject: Consistently round fOffset in SkOffsetImageFilter Since SkScalarRoundToInt rounds differently depending on the sign of the value, care must be taken to perform rounding before any potential change to the sign - like in SkOffsetImageFilter::onFilterNodeBounds. Bug: chromium:778204 Change-Id: I3debff7565f45022c7b8566662927149850b1bea Reviewed-on: https://skia-review.googlesource.com/64020 Reviewed-by: Stephen White Commit-Queue: Robert Phillips --- tests/ImageFilterTest.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'tests/ImageFilterTest.cpp') diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp index c39cc2ee83..59f0f2853b 100644 --- a/tests/ImageFilterTest.cpp +++ b/tests/ImageFilterTest.cpp @@ -1998,6 +1998,21 @@ DEF_TEST(XfermodeImageFilterBounds, reporter) { REPORTER_ASSERT(reporter, bounds.isEmpty()); } +DEF_TEST(OffsetImageFilterBounds, reporter) { + SkIRect src = SkIRect::MakeXYWH(0, 0, 100, 100); + sk_sp offset(SkOffsetImageFilter::Make(-50.5f, -50.5f, nullptr)); + + SkIRect expectedForward = SkIRect::MakeXYWH(-50, -50, 100, 100); + SkIRect boundsForward = offset->filterBounds(src, SkMatrix::I(), + SkImageFilter::kForward_MapDirection); + REPORTER_ASSERT(reporter, boundsForward == expectedForward); + + SkIRect expectedReverse = SkIRect::MakeXYWH(50, 50, 100, 100); + SkIRect boundsReverse = offset->filterBounds(src, SkMatrix::I(), + SkImageFilter::kReverse_MapDirection); + REPORTER_ASSERT(reporter, boundsReverse == expectedReverse); +} + static void test_arithmetic_bounds(skiatest::Reporter* reporter, float k1, float k2, float k3, float k4, sk_sp background, sk_sp foreground, -- cgit v1.2.3