From 596a74b3948ff77b2e1f2b5382b65453c5256473 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Thu, 21 Jul 2016 00:03:22 -0400 Subject: [PATCH] Adjusted button and entry to handle font upadte on property changes --- src/iOS/Controls/CustomButtonRenderer.cs | 51 +++++++++++++++-------- src/iOS/Controls/ExtendedEntryRenderer.cs | 37 ++++++++++++++-- 2 files changed, 67 insertions(+), 21 deletions(-) diff --git a/src/iOS/Controls/CustomButtonRenderer.cs b/src/iOS/Controls/CustomButtonRenderer.cs index c3529d8fd..92b6112b9 100644 --- a/src/iOS/Controls/CustomButtonRenderer.cs +++ b/src/iOS/Controls/CustomButtonRenderer.cs @@ -3,6 +3,7 @@ using Bit.iOS.Controls; using UIKit; using Xamarin.Forms; using Xamarin.Forms.Platform.iOS; +using System.ComponentModel; [assembly: ExportRenderer(typeof(Button), typeof(CustomButtonRenderer))] namespace Bit.iOS.Controls @@ -16,25 +17,39 @@ namespace Bit.iOS.Controls var view = e.NewElement as Button; if(Control != null && view != null) { - var descriptor = UIFontDescriptor.PreferredBody; - var pointSize = descriptor.PointSize; - - var size = view.FontSize; - if(size == Device.GetNamedSize(NamedSize.Large, typeof(Button))) - { - pointSize *= 1.3f; - } - else if(size == Device.GetNamedSize(NamedSize.Small, typeof(Button))) - { - pointSize *= .8f; - } - else if(size == Device.GetNamedSize(NamedSize.Micro, typeof(Button))) - { - pointSize *= .6f; - } - - Control.Font = UIFont.FromDescriptor(descriptor, pointSize); + UpdateFont(); } } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + + if(e.PropertyName == Button.FontProperty.PropertyName) + { + UpdateFont(); + } + } + + private void UpdateFont() + { + var pointSize = UIFontDescriptor.PreferredBody.PointSize; + + var size = Element.FontSize; + if(size == Device.GetNamedSize(NamedSize.Large, typeof(Button))) + { + pointSize *= 1.3f; + } + else if(size == Device.GetNamedSize(NamedSize.Small, typeof(Button))) + { + pointSize *= .8f; + } + else if(size == Device.GetNamedSize(NamedSize.Micro, typeof(Button))) + { + pointSize *= .6f; + } + + Control.Font = UIFont.FromDescriptor(Element.Font.ToUIFont().FontDescriptor, pointSize); + } } } diff --git a/src/iOS/Controls/ExtendedEntryRenderer.cs b/src/iOS/Controls/ExtendedEntryRenderer.cs index ae2547bb2..806f6240f 100644 --- a/src/iOS/Controls/ExtendedEntryRenderer.cs +++ b/src/iOS/Controls/ExtendedEntryRenderer.cs @@ -21,12 +21,10 @@ namespace Bit.iOS.Controls var view = e.NewElement as ExtendedEntry; if(view != null) { - var descriptor = UIFontDescriptor.PreferredBody; - Control.Font = UIFont.FromDescriptor( descriptor, descriptor.PointSize ); - SetBorder(view); SetMaxLength(view); UpdateKeyboard(); + UpdateFont(); if(view.AllowClear) { @@ -92,6 +90,39 @@ namespace Bit.iOS.Controls { UpdateKeyboard(); } + else if(e.PropertyName == Entry.FontAttributesProperty.PropertyName) + { + UpdateFont(); + } + else if(e.PropertyName == Entry.FontFamilyProperty.PropertyName) + { + UpdateFont(); + } + else if(e.PropertyName == Entry.FontSizeProperty.PropertyName) + { + UpdateFont(); + } + } + + private void UpdateFont() + { + var pointSize = UIFontDescriptor.PreferredBody.PointSize; + + var size = Element.FontSize; + if(size == Device.GetNamedSize(NamedSize.Large, typeof(ExtendedEntry))) + { + pointSize *= 1.3f; + } + else if(size == Device.GetNamedSize(NamedSize.Small, typeof(ExtendedEntry))) + { + pointSize *= .8f; + } + else if(size == Device.GetNamedSize(NamedSize.Micro, typeof(ExtendedEntry))) + { + pointSize *= .6f; + } + + Control.Font = UIFont.FromName(Element.FontFamily, pointSize); } private void SetBorder(ExtendedEntry view)