From 5d8d1f4be1bf6badd32aec70c39e4502bbe2856d Mon Sep 17 00:00:00 2001 From: Troy Stanger Date: Wed, 14 Nov 2018 12:41:34 -0600 Subject: [PATCH] Properly resize images when the window size changes --- Ooui.Forms/Renderers/ImageRenderer.cs | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/Ooui.Forms/Renderers/ImageRenderer.cs b/Ooui.Forms/Renderers/ImageRenderer.cs index 7bb8b1a..591dea7 100644 --- a/Ooui.Forms/Renderers/ImageRenderer.cs +++ b/Ooui.Forms/Renderers/ImageRenderer.cs @@ -9,6 +9,8 @@ namespace Ooui.Forms.Renderers public class ImageRenderer : ViewRenderer { bool _isDisposed; + double ClientHeight = -1; + double ClientWidth = -1; protected override void Dispose (bool disposing) { @@ -50,25 +52,38 @@ namespace Ooui.Forms.Renderers else if (e.PropertyName == Xamarin.Forms.Image.IsOpaqueProperty.PropertyName) SetOpacity (); else if (e.PropertyName == Xamarin.Forms.Image.AspectProperty.PropertyName) - SetAspect (); + SetAspect(); + else if (e.PropertyName == VisualElement.WidthProperty.PropertyName) + SetDimensions (); } void OnLoad(object sender, EventArgs eventArgs) { var args = (TargetEventArgs)eventArgs; + ClientHeight = args.ClientHeight; + ClientWidth = args.ClientWidth; + + SetDimensions(); + } + + void SetDimensions() + { var b = Element.Bounds; double scale = 1; + if (ClientWidth < 0 || ClientHeight < 0) + return; + if (Math.Abs(b.Width) > 0) { - scale = b.Width / args.ClientWidth; + scale = b.Width / ClientWidth; Element.WidthRequest = b.Width; - Element.HeightRequest = scale * args.ClientHeight; + Element.HeightRequest = scale * ClientHeight; } else if (Math.Abs(b.Height) > 0) { - scale = b.Height / args.ClientHeight; - Element.WidthRequest = scale * args.ClientWidth; + scale = b.Height / ClientHeight; + Element.WidthRequest = scale * ClientWidth; Element.HeightRequest = b.Height; } else