diff options
author | Lluis Sanchez <lluis@xamarin.com> | 2013-12-11 16:09:11 +0400 |
---|---|---|
committer | Lluis Sanchez <lluis@xamarin.com> | 2013-12-11 16:11:53 +0400 |
commit | a8e5cbb0351faf69b823eab97a697db2ec264e72 (patch) | |
tree | 145560f91117c1a56dcf3ed9b9575eff6db0a864 /Xwt.WPF | |
parent | c7b80f72086331c73d78e74abe258e42f02a0e96 (diff) |
[WPF] Fixed pattern rendering issues
Diffstat (limited to 'Xwt.WPF')
-rw-r--r-- | Xwt.WPF/Xwt.WPFBackend/ImageHandler.cs | 2 | ||||
-rw-r--r-- | Xwt.WPF/Xwt.WPFBackend/ImagePatternBackendHandler.cs | 32 |
2 files changed, 18 insertions, 16 deletions
diff --git a/Xwt.WPF/Xwt.WPFBackend/ImageHandler.cs b/Xwt.WPF/Xwt.WPFBackend/ImageHandler.cs index 77e19601..40bb64b1 100644 --- a/Xwt.WPF/Xwt.WPFBackend/ImageHandler.cs +++ b/Xwt.WPF/Xwt.WPFBackend/ImageHandler.cs @@ -408,7 +408,7 @@ namespace Xwt.WPFBackend public ImageSource GetBestFrame (ApplicationContext actx, double scaleFactor, double width, double height, bool forceExactSize) { var f = FindFrame (width, height, scaleFactor); - if (f == null || (forceExactSize && (f.Width != (int)width || f.Height != (int)height))) + if (f == null || (forceExactSize && (Math.Abs (f.Width - width * scaleFactor) > 0.01 || Math.Abs (f.Height - height * scaleFactor) > 0.01))) return RenderFrame (actx, scaleFactor, width, height); else return f; diff --git a/Xwt.WPF/Xwt.WPFBackend/ImagePatternBackendHandler.cs b/Xwt.WPF/Xwt.WPFBackend/ImagePatternBackendHandler.cs index 8449b193..091e5ff8 100644 --- a/Xwt.WPF/Xwt.WPFBackend/ImagePatternBackendHandler.cs +++ b/Xwt.WPF/Xwt.WPFBackend/ImagePatternBackendHandler.cs @@ -58,21 +58,23 @@ namespace Xwt.WPFBackend public ImageBrush GetBrush (double scaleFactor) { - if (brush == null || scaleFactor != this.scaleFactor) { - this.scaleFactor = scaleFactor; - var ib = (WpfImage)image.Backend; - var bmp = ib.GetBestFrame (actx, scaleFactor, image.Size.Width, image.Size.Height, true); - brush = new ImageBrush (bmp) { - TileMode = TileMode.Tile, - ViewportUnits = BrushMappingMode.Absolute, - AlignmentY = System.Windows.Media.AlignmentY.Top, - AlignmentX = System.Windows.Media.AlignmentX.Left, - Stretch = System.Windows.Media.Stretch.None, - Viewport = new System.Windows.Rect (0, 0, image.Size.Width * scaleFactor, image.Size.Height * scaleFactor), - Opacity = image.Alpha - }; - brush.RelativeTransform = new ScaleTransform (1d/scaleFactor, 1d/scaleFactor); - } + if (brush == null || scaleFactor != this.scaleFactor) + { + this.scaleFactor = scaleFactor; + var ib = (WpfImage)image.Backend; + var bmp = ib.GetBestFrame(actx, scaleFactor, image.Size.Width, image.Size.Height, false); + brush = new ImageBrush(bmp) + { + TileMode = TileMode.Tile, + ViewportUnits = BrushMappingMode.Absolute, + AlignmentY = System.Windows.Media.AlignmentY.Top, + AlignmentX = System.Windows.Media.AlignmentX.Left, + Stretch = System.Windows.Media.Stretch.None, + Viewport = new System.Windows.Rect(0, 0, image.Size.Width, image.Size.Height), + Opacity = image.Alpha + }; + brush.RelativeTransform = new ScaleTransform(image.Size.Width / bmp.Width, image.Size.Height / bmp.Height); + } return brush; } } |