diff --git a/engine/src/flutter/flow/layers/image_filter_layer.cc b/engine/src/flutter/flow/layers/image_filter_layer.cc index ceb8ce08281..834df45ce85 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 7b32e08571f..ee8f08c8491 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