diff --git a/tests/Avalonia.RenderTests/Controls/CustomRenderTests.cs b/tests/Avalonia.RenderTests/Controls/CustomRenderTests.cs index 2f311f4800..e4630d8265 100644 --- a/tests/Avalonia.RenderTests/Controls/CustomRenderTests.cs +++ b/tests/Avalonia.RenderTests/Controls/CustomRenderTests.cs @@ -52,6 +52,37 @@ namespace Avalonia.Direct2D1.RenderTests.Controls CompareImages(); } + [Fact] + public async Task GeometryClip() + { + Decorator target = new Decorator + { + Padding = new Thickness(8), + Width = 200, + Height = 200, + Child = new CustomRenderer((control, context) => + { + var clip = new EllipseGeometry(new Rect(control.Bounds.Size)); + + context.FillRectangle( + Brushes.Red, + new Rect(control.Bounds.Size), + 4); + + using (context.PushGeometryClip(clip)) + { + context.FillRectangle( + Brushes.Blue, + new Rect(control.Bounds.Size), + 4); + } + }), + }; + + await RenderToFile(target); + CompareImages(); + } + [Fact] public async Task Opacity() { @@ -81,6 +112,46 @@ namespace Avalonia.Direct2D1.RenderTests.Controls CompareImages(); } + [Fact] + public async Task OpacityMask() + { + Decorator target = new Decorator + { + Padding = new Thickness(8), + Width = 200, + Height = 200, + Child = new CustomRenderer((control, context) => + { + var mask = new LinearGradientBrush + { + StartPoint = new RelativePoint(0, 0, RelativeUnit.Relative), + EndPoint = new RelativePoint(1, 1, RelativeUnit.Relative), + GradientStops = new[] + { + new GradientStop(Color.FromUInt32(0xffffffff), 0), + new GradientStop(Color.FromUInt32(0x00ffffff), 1) + }, + }; + + context.FillRectangle( + Brushes.Red, + new Rect(control.Bounds.Size), + 4); + + using (context.PushOpacityMask(mask, new Rect(control.Bounds.Size))) + { + context.FillRectangle( + Brushes.Blue, + new Rect(control.Bounds.Size).Deflate(20), + 4); + } + }), + }; + + await RenderToFile(target); + CompareImages(); + } + class CustomRenderer : Control { private Action _render; diff --git a/tests/TestFiles/Cairo/Controls/CustomRender/GeometryClip.expected.png b/tests/TestFiles/Cairo/Controls/CustomRender/GeometryClip.expected.png new file mode 100644 index 0000000000..bb39bf62ca Binary files /dev/null and b/tests/TestFiles/Cairo/Controls/CustomRender/GeometryClip.expected.png differ diff --git a/tests/TestFiles/Cairo/Controls/CustomRender/OpacityMask.expected.png b/tests/TestFiles/Cairo/Controls/CustomRender/OpacityMask.expected.png new file mode 100644 index 0000000000..212a4f1eaa Binary files /dev/null and b/tests/TestFiles/Cairo/Controls/CustomRender/OpacityMask.expected.png differ diff --git a/tests/TestFiles/Direct2D1/Controls/CustomRender/GeometryClip.expected.png b/tests/TestFiles/Direct2D1/Controls/CustomRender/GeometryClip.expected.png new file mode 100644 index 0000000000..bb39bf62ca Binary files /dev/null and b/tests/TestFiles/Direct2D1/Controls/CustomRender/GeometryClip.expected.png differ diff --git a/tests/TestFiles/Direct2D1/Controls/CustomRender/OpacityMask.expected.png b/tests/TestFiles/Direct2D1/Controls/CustomRender/OpacityMask.expected.png new file mode 100644 index 0000000000..212a4f1eaa Binary files /dev/null and b/tests/TestFiles/Direct2D1/Controls/CustomRender/OpacityMask.expected.png differ diff --git a/tests/TestFiles/Skia/Controls/CustomRender/GeometryClip.expected.png b/tests/TestFiles/Skia/Controls/CustomRender/GeometryClip.expected.png new file mode 100644 index 0000000000..bb39bf62ca Binary files /dev/null and b/tests/TestFiles/Skia/Controls/CustomRender/GeometryClip.expected.png differ diff --git a/tests/TestFiles/Skia/Controls/CustomRender/OpacityMask.expected.png b/tests/TestFiles/Skia/Controls/CustomRender/OpacityMask.expected.png new file mode 100644 index 0000000000..212a4f1eaa Binary files /dev/null and b/tests/TestFiles/Skia/Controls/CustomRender/OpacityMask.expected.png differ