From a4e0000a772d934b8b2cdbbaa69f90f1ac88cf17 Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Wed, 19 Jul 2023 08:15:02 -0700 Subject: [PATCH] Apply the offset to the child bounds of an ImageFilterLayer with no filter (flutter/engine#43783) Fixes https://github.com/flutter/flutter/issues/130318 --- .../src/flutter/flow/layers/image_filter_layer.cc | 1 + .../flow/layers/image_filter_layer_unittests.cc | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/engine/src/flutter/flow/layers/image_filter_layer.cc b/engine/src/flutter/flow/layers/image_filter_layer.cc index ceb8ce0828..834df45ce8 100644 --- a/engine/src/flutter/flow/layers/image_filter_layer.cc +++ b/engine/src/flutter/flow/layers/image_filter_layer.cc @@ -64,6 +64,7 @@ void ImageFilterLayer::Preroll(PrerollContext* context) { PrerollChildren(context, &child_bounds); if (!filter_) { + child_bounds.offset(offset_); set_paint_bounds(child_bounds); return; } diff --git a/engine/src/flutter/flow/layers/image_filter_layer_unittests.cc b/engine/src/flutter/flow/layers/image_filter_layer_unittests.cc index 7b32e08571..ee8f08c849 100644 --- a/engine/src/flutter/flow/layers/image_filter_layer_unittests.cc +++ b/engine/src/flutter/flow/layers/image_filter_layer_unittests.cc @@ -711,6 +711,19 @@ TEST_F(ImageFilterLayerDiffTest, ImageFilterLayerInflatestChildSize) { EXPECT_EQ(damage.frame_damage, SkIRect::MakeLTRB(40, 40, 170, 170)); } +TEST_F(ImageFilterLayerTest, EmptyFilterWithOffset) { + const SkRect child_bounds = SkRect::MakeLTRB(10.0f, 11.0f, 19.0f, 20.0f); + const SkPath child_path = SkPath().addRect(child_bounds); + const DlPaint child_paint = DlPaint(DlColor::kYellow()); + auto mock_layer = std::make_shared(child_path, child_paint); + const SkPoint offset = SkPoint::Make(5.0f, 6.0f); + auto layer = std::make_shared(nullptr, offset); + layer->Add(mock_layer); + + layer->Preroll(preroll_context()); + EXPECT_EQ(layer->paint_bounds(), child_bounds.makeOffset(offset)); +} + } // namespace testing } // namespace flutter