Ver código fonte

Added failing custom render tests.

Deferred rendering does not yet support geometry clipping or opacity masks from `Visual.Render`.
Steven Kirk 8 anos atrás
pai
commit
27ec199a3d

+ 71 - 0
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<CustomRenderer, DrawingContext> _render;

BIN
tests/TestFiles/Cairo/Controls/CustomRender/GeometryClip.expected.png


BIN
tests/TestFiles/Cairo/Controls/CustomRender/OpacityMask.expected.png


BIN
tests/TestFiles/Direct2D1/Controls/CustomRender/GeometryClip.expected.png


BIN
tests/TestFiles/Direct2D1/Controls/CustomRender/OpacityMask.expected.png


BIN
tests/TestFiles/Skia/Controls/CustomRender/GeometryClip.expected.png


BIN
tests/TestFiles/Skia/Controls/CustomRender/OpacityMask.expected.png