From df13bef195ecdc9a9409aa3c8531e181f389fbfd Mon Sep 17 00:00:00 2001 From: Jackson Gardner Date: Fri, 23 Feb 2024 14:52:02 -0800 Subject: [PATCH] Correctly offset the cull rect of the opacity layer. This fixes https://github.com/flutter/flutter/issues/140999. --- lib/web_ui/lib/src/engine/layers.dart | 1 + lib/web_ui/test/ui/scene_builder_test.dart | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/web_ui/lib/src/engine/layers.dart b/lib/web_ui/lib/src/engine/layers.dart index e5b52f762779a..7d6940be76be5 100644 --- a/lib/web_ui/lib/src/engine/layers.dart +++ b/lib/web_ui/lib/src/engine/layers.dart @@ -283,6 +283,7 @@ class OpacityOperation implements LayerOperation { if (offset != ui.Offset.zero) { canvas.save(); canvas.translate(offset.dx, offset.dy); + cullRect = cullRect.shift(-offset); } canvas.saveLayer( cullRect, diff --git a/lib/web_ui/test/ui/scene_builder_test.dart b/lib/web_ui/test/ui/scene_builder_test.dart index 7bd8463c5ced0..fee4e87e6b74a 100644 --- a/lib/web_ui/test/ui/scene_builder_test.dart +++ b/lib/web_ui/test/ui/scene_builder_test.dart @@ -124,16 +124,16 @@ Future testMain() async { ); })); - sceneBuilder.pushOpacity(0x7F); + sceneBuilder.pushOpacity(0x7F, offset: const ui.Offset(150, 150)); sceneBuilder.addPicture(ui.Offset.zero, drawPicture((ui.Canvas canvas) { final ui.Paint paint = ui.Paint()..color = const ui.Color(0xFFFF0000); canvas.drawCircle( - const ui.Offset(125, 150), + const ui.Offset(-25, 0), 50, paint ); canvas.drawCircle( - const ui.Offset(175, 150), + const ui.Offset(25, 0), 50, paint );