From 463d188fef1ba15d100e79f3d8b9ad6f5b6f10e7 Mon Sep 17 00:00:00 2001 From: Gerald Versluis Date: Tue, 24 Sep 2019 01:04:24 +0200 Subject: [PATCH] [Mac] Fix NRE on setting non-existing FontFamily (#7636) fixes #7582 * Update FontExtensions.cs * Added issue to gallery --- .../Issue7582.cs | 24 ++++++++++++++++++++++ .../Xamarin.Forms.Controls.Issues.Shared.projitems | 1 + .../Extensions/FontExtensions.cs | 13 +++++++----- 3 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue7582.cs diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue7582.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue7582.cs new file mode 100644 index 0000000..6e87f72 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue7582.cs @@ -0,0 +1,24 @@ +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Github, 7582, "Null Reference Exception thrown when set FontFamily for label in Xamarin Forms macOS", PlatformAffected.macOS)] + public class Issue7582 : TestContentPage + { + protected override void Init() + { + var label = new Label + { + Text = "This is a label with a non-existent FontFamily, If you're seeing this label the test succeeded.", + FontFamily = "THISISNOTAFONT", + FontAttributes = FontAttributes.Bold, + VerticalOptions = LayoutOptions.Center, + HorizontalOptions = LayoutOptions.Center + }; + + Content = label; + } + } +} \ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index bceaabe..61ffec7 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -1023,6 +1023,7 @@ + diff --git a/Xamarin.Forms.Platform.MacOS/Extensions/FontExtensions.cs b/Xamarin.Forms.Platform.MacOS/Extensions/FontExtensions.cs index 318677b..7701110 100644 --- a/Xamarin.Forms.Platform.MacOS/Extensions/FontExtensions.cs +++ b/Xamarin.Forms.Platform.MacOS/Extensions/FontExtensions.cs @@ -38,7 +38,10 @@ namespace Xamarin.Forms.Platform.MacOS //if we didn't found a Font or Descriptor for the FontFamily use the default one if (font == null) + { font = defaultFont; + descriptor = defaultFont.FontDescriptor; + } if (descriptor == null) descriptor = defaultFont.FontDescriptor; @@ -47,16 +50,16 @@ namespace Xamarin.Forms.Platform.MacOS { var traits = (NSFontSymbolicTraits)0; if (bold) - traits = traits | NSFontSymbolicTraits.BoldTrait; + traits |= NSFontSymbolicTraits.BoldTrait; if (italic) - traits = traits | NSFontSymbolicTraits.ItalicTrait; + traits |= NSFontSymbolicTraits.ItalicTrait; - var fontDescriptoWithTraits = descriptor.FontDescriptorWithSymbolicTraits(traits); + var fontDescriptorWithTraits = descriptor.FontDescriptorWithSymbolicTraits(traits); - font = NSFont.FromDescription(fontDescriptoWithTraits, size); + font = NSFont.FromDescription(fontDescriptorWithTraits, size); } return font.ScreenFontWithRenderingMode(NSFontRenderingMode.AntialiasedIntegerAdvancements); } } -} +} \ No newline at end of file -- 2.7.4