From c69686142cdb78a13ff32def9b8d3f929ebdb6cb Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 4 Sep 2015 19:03:41 +0200 Subject: [PATCH] Added VisualBrush flips. --- .../Media/VisualBrushImpl.cs | 4 +- .../Media/VisualBrushTests.cs | 117 ++++++++++++++++++ .../VisualBrush_FlipX.expected.png | Bin 0 -> 2152 bytes .../VisualBrush_FlipXY.expected.png | Bin 0 -> 2176 bytes .../VisualBrush_FlipY.expected.png | Bin 0 -> 1653 bytes 5 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_FlipX.expected.png create mode 100644 tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_FlipXY.expected.png create mode 100644 tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_FlipY.expected.png diff --git a/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs b/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs index 69bcf97737..8638162ff5 100644 --- a/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs +++ b/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs @@ -56,8 +56,8 @@ namespace Perspex.Direct2D1.Media renderer.Render(visual, null, transform, drawRect); var result = new BitmapBrush(brt, brt.Bitmap); - result.ExtendModeX = ExtendMode.Wrap; - result.ExtendModeY = ExtendMode.Wrap; + result.ExtendModeX = (brush.TileMode & TileMode.FlipX) != 0 ? ExtendMode.Mirror : ExtendMode.Wrap; + result.ExtendModeY = (brush.TileMode & TileMode.FlipY) != 0 ? ExtendMode.Mirror : ExtendMode.Wrap; if (brush.TileMode != TileMode.None) { diff --git a/tests/Perspex.RenderTests/Media/VisualBrushTests.cs b/tests/Perspex.RenderTests/Media/VisualBrushTests.cs index 6a9bc51c3c..7b32a223ce 100644 --- a/tests/Perspex.RenderTests/Media/VisualBrushTests.cs +++ b/tests/Perspex.RenderTests/Media/VisualBrushTests.cs @@ -475,5 +475,122 @@ namespace Perspex.Direct2D1.RenderTests.Media this.RenderToFile(target); this.CompareImages(); } + + [Fact] + public void VisualBrush_FlipX() + { + Decorator target = new Decorator + { + Padding = new Thickness(8), + Width = 200, + Height = 200, + Child = new Rectangle + { + Fill = new VisualBrush + { + Stretch = Stretch.None, + TileMode = TileMode.FlipX, + DestinationRect = new RelativeRect(0, 0, 0.5, 0.5, OriginUnit.Percent), + Visual = new Border + { + Width = 92, + Height = 92, + Background = Brushes.Red, + BorderBrush = Brushes.Black, + BorderThickness = 2, + Child = new TextBlock + { + Text = "Perspex", + FontSize = 12, + FontFamily = "Arial", + HorizontalAlignment = HorizontalAlignment.Center, + VerticalAlignment = VerticalAlignment.Center, + } + } + } + } + }; + + this.RenderToFile(target); + this.CompareImages(); + } + + [Fact] + public void VisualBrush_FlipY() + { + Decorator target = new Decorator + { + Padding = new Thickness(8), + Width = 200, + Height = 200, + Child = new Rectangle + { + Fill = new VisualBrush + { + Stretch = Stretch.None, + TileMode = TileMode.FlipY, + DestinationRect = new RelativeRect(0, 0, 0.5, 0.5, OriginUnit.Percent), + Visual = new Border + { + Width = 92, + Height = 92, + Background = Brushes.Red, + BorderBrush = Brushes.Black, + BorderThickness = 2, + Child = new TextBlock + { + Text = "Perspex", + FontSize = 12, + FontFamily = "Arial", + HorizontalAlignment = HorizontalAlignment.Center, + VerticalAlignment = VerticalAlignment.Center, + } + } + } + } + }; + + this.RenderToFile(target); + this.CompareImages(); + } + + [Fact] + public void VisualBrush_FlipXY() + { + Decorator target = new Decorator + { + Padding = new Thickness(8), + Width = 200, + Height = 200, + Child = new Rectangle + { + Fill = new VisualBrush + { + Stretch = Stretch.None, + TileMode = TileMode.FlipXY, + DestinationRect = new RelativeRect(0, 0, 0.5, 0.5, OriginUnit.Percent), + Visual = new Border + { + Width = 92, + Height = 92, + Background = Brushes.Red, + BorderBrush = Brushes.Black, + BorderThickness = 2, + Child = new TextBlock + { + Text = "Perspex", + FontSize = 12, + FontFamily = "Arial", + HorizontalAlignment = HorizontalAlignment.Center, + VerticalAlignment = VerticalAlignment.Center, + } + } + } + } + }; + + this.RenderToFile(target); + this.CompareImages(); + } } } diff --git a/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_FlipX.expected.png b/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_FlipX.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..da7003b4193d8dddf07ea6a7e6eaa6600c0fac97 GIT binary patch literal 2152 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yF%}28J29*~C-V}>VM%xNb!1@J z*w6hZk(GggL&(#`F{C2y?cI%i(y1bC4_jw@2zzM-?C5HlrsXl^4pVASo6*kZ042w% zMvbc#ytKSBibM2l_Tt2*ZiRkrxO%;-sYo9vZcz;>y?>8=`z52{btZXh^JRKqu0-6R2K?x2^ z4m5Z)GEQWookYQ7#)tJE^j;@UwbNVk^VZIS%VveFKNolX=f3xK&8zQPwK5Ue*J|c5 z&k>H^aI!z*e#qag_xJqTo%L3>wR}$g>Kn(uecCZS^nu~4(^}s?&slkVfz^~Zzccsm zJp9+2OQ(2dZNj?R`Nwz3f0ihi|M$zL-&|F9&o7MNmV0gZ%R;B0Is5Fa`Kx1Bygu&P zwej`cM=$KQ)m!J-uh?b3?fLto|Lppn*A?D)_qfXDo4sw$`HvNI9%pU5CwJT|xk%=> zU*w)|I^X7Qnju`A+;>-dTjkq#qI+NNyu8_NUG>%ejr->xo^dxgOV0fG;~n$T`;V7h zzqOA)vZr>%{~U9H=6Q>%{zTR?U0xC=vPyhHw3MxQ)7!dxYn~R$T>k$2P*5>XT=VZe zarSkmW_|u|A3xdBDE!^|djXsOZ#J*p@Bc0GwBfHEJInswcw>Kl_UHGjR*%oL|!%AA7Z=mRq}7;YeLBeYCHa}S~dT3cIfWf9cx>6N7!zkr~Sh5 zd-J_Bak8)f|LHg?wL$E-ft&p48EXt9K3DP;_~jg2_Ww-v>Q(nr?`6uEikDP{UOoG_ zPgeVtY>v6w4qGulyYBk9uZvdMYsU*cJ91}6a{c}&YtQucFYZcJ-K|aGy|y8(IH$`n z^0Dsi5{GvoAN4MC--uVZ{^97y8==kRN9|5lw*Ri$zw>v}kH>Yz?Hhk@eHUuGsw(Cy zv$Y;iaZ=uyi93^S##ddApZ8L7FZ13x;kP?Y6Lhbg`B!xM)}~|8+g>&_l@ zbEbB2+Pg0cemA}ov|U{OX8H6lTQ0u7S$!?(Z0YqP?_K5piFORM%OTiv;f`9i T=j8yl78pET{an^LB{Ts5Q26?0 literal 0 HcmV?d00001 diff --git a/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_FlipXY.expected.png b/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_FlipXY.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfcdb2dd3cafac0231e49782abfdfe0a9ac0eea GIT binary patch literal 2176 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 literal 0 HcmV?d00001