Browse Source

Implement VisualBrush alignment.

Steven Kirk 10 năm trước cách đây
mục cha
commit
4f200bedb3

+ 3 - 1
src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs

@@ -6,6 +6,7 @@
 
 namespace Perspex.Direct2D1.Media
 {
+    using System;
     using Perspex.Layout;
     using Perspex.Media;
     using SharpDX.Direct2D1;
@@ -30,6 +31,7 @@ namespace Perspex.Direct2D1.Media
             var sourceSize = layoutable.Bounds.Size;
             var destinationRect = brush.DestinationRect.ToPixels(destinationSize);
             var scale = brush.Stretch.CalculateScaling(destinationRect.Size, sourceSize);
+            var translate = new Rect(destinationSize).CenterIn(new Rect(sourceSize * scale)).Position;
 
             using (var brt = new BitmapRenderTarget(
                 target,
@@ -37,7 +39,7 @@ namespace Perspex.Direct2D1.Media
                 destinationRect.Size.ToSharpDX()))
             {
                 var renderer = new Renderer(brt);
-                renderer.Render(visual, null, Matrix.Identity, Matrix.CreateScale(scale));
+                renderer.Render(visual, null, Matrix.CreateTranslation(translate), Matrix.CreateScale(scale));
                 this.PlatformBrush = new BitmapBrush(brt, brt.Bitmap);
             }
         }

+ 1 - 0
tests/Perspex.RenderTests/Media/VisualBrushTests.cs

@@ -70,6 +70,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
                     {
                         AlignmentX = AlignmentX.Center,
                         AlignmentY = AlignmentY.Center,
+                        Stretch = Stretch.None,
                         Visual = new Border
                         {
                             Width = 92,

BIN
tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Align_Center.expected.png