From ab1cd6e8fba25cdee3dd72a538889df9eecb41ee Mon Sep 17 00:00:00 2001 From: timunie Date: Sun, 8 Mar 2026 12:12:09 +0100 Subject: [PATCH] address review --- src/Avalonia.Base/Media/DrawingGroup.cs | 15 ++++++++++++--- .../Drawing/RenderDataDrawingContext.cs | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Base/Media/DrawingGroup.cs b/src/Avalonia.Base/Media/DrawingGroup.cs index e725528b0c..5d053699a4 100644 --- a/src/Avalonia.Base/Media/DrawingGroup.cs +++ b/src/Avalonia.Base/Media/DrawingGroup.cs @@ -89,12 +89,21 @@ namespace Avalonia.Media internal override void DrawCore(DrawingContext context) { - var bounds = GetBounds(); - var effectBounds = EffectBounds ?? bounds.Inflate(Effect?.GetEffectOutputPadding() ?? default); + // Compute effect bounds in local coordinate space (pre-transform) + // GetBounds() already includes transform, so we need to inverse-transform + // to get the local bounds, or compute bounds without applying transform + var localBounds = new Rect(); + foreach (var drawing in Children) + { + localBounds = localBounds.Union(drawing.GetBounds()); + } + var effectPadding = Effect?.GetEffectOutputPadding() ?? default; + var effectBounds = EffectBounds ?? localBounds.Inflate(effectPadding); + using (context.PushTransform(Transform?.Value ?? Matrix.Identity)) using (context.PushOpacity(Opacity)) using (ClipGeometry != null ? context.PushGeometryClip(ClipGeometry) : default) - using (OpacityMask != null ? context.PushOpacityMask(OpacityMask, bounds) : default) + using (OpacityMask != null ? context.PushOpacityMask(OpacityMask, localBounds) : default) using (RenderOptions != null ? context.PushRenderOptions(RenderOptions.Value) : default) using (TextOptions != null ? context.PushTextOptions(TextOptions.Value) : default) using (Effect != null ? context.PushEffect(Effect, effectBounds) : default) diff --git a/src/Avalonia.Base/Rendering/Composition/Drawing/RenderDataDrawingContext.cs b/src/Avalonia.Base/Rendering/Composition/Drawing/RenderDataDrawingContext.cs index ea42fe7710..7ba2dedf3d 100644 --- a/src/Avalonia.Base/Rendering/Composition/Drawing/RenderDataDrawingContext.cs +++ b/src/Avalonia.Base/Rendering/Composition/Drawing/RenderDataDrawingContext.cs @@ -272,7 +272,7 @@ internal class RenderDataDrawingContext : DrawingContext /// protected override void PushEffectCore(IEffect effect, Rect bounds) => Push(new RenderDataEffectNode() { - Effect = effect, + Effect = effect.ToImmutable(), BoundsRect = bounds });