From ae08c0032940ff66dde8fed95d601c4f4e034703 Mon Sep 17 00:00:00 2001 From: Benedikt Schroeder Date: Fri, 26 Oct 2018 15:39:20 +0200 Subject: [PATCH 1/2] Uses the system's default font if a font can't be found --- src/Skia/Avalonia.Skia/TypefaceCache.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Skia/Avalonia.Skia/TypefaceCache.cs b/src/Skia/Avalonia.Skia/TypefaceCache.cs index cf862f3400..92d6f514dc 100644 --- a/src/Skia/Avalonia.Skia/TypefaceCache.cs +++ b/src/Skia/Avalonia.Skia/TypefaceCache.cs @@ -12,7 +12,7 @@ namespace Avalonia.Skia /// internal static class TypefaceCache { - public static SKTypeface Default = SKTypeface.FromFamilyName(FontFamily.Default.Name); + public static SKTypeface Default = CreateDefaultTypeface(); static readonly Dictionary> Cache = new Dictionary>(); struct FontKey @@ -49,6 +49,13 @@ namespace Avalonia.Skia // Equals and GetHashCode ommitted } + private static SKTypeface CreateDefaultTypeface() + { + var defaultTypeface = SKTypeface.FromFamilyName(FontFamily.Default.Name) ?? SKTypeface.FromFamilyName(null); + + return defaultTypeface; + } + private static SKTypeface GetTypeface(string name, FontKey key) { var familyKey = name; @@ -62,7 +69,7 @@ namespace Avalonia.Skia { typeface = SKTypeface.FromFamilyName(familyKey, key.Weight, SKFontStyleWidth.Normal, key.Slant); - if (typeface.FamilyName != name) + if (typeface?.FamilyName != name) { typeface = Default; } From bb2b7863cad0707a4624fdc1c240b1347ad48348 Mon Sep 17 00:00:00 2001 From: Benedikt Schroeder Date: Fri, 26 Oct 2018 16:16:56 +0200 Subject: [PATCH 2/2] Add support for font alias in case FontConfig is used in the backend. --- src/Skia/Avalonia.Skia/TypefaceCache.cs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Skia/Avalonia.Skia/TypefaceCache.cs b/src/Skia/Avalonia.Skia/TypefaceCache.cs index 92d6f514dc..94b9e89962 100644 --- a/src/Skia/Avalonia.Skia/TypefaceCache.cs +++ b/src/Skia/Avalonia.Skia/TypefaceCache.cs @@ -67,12 +67,8 @@ namespace Avalonia.Skia if (!entry.TryGetValue(key, out var typeface)) { - typeface = SKTypeface.FromFamilyName(familyKey, key.Weight, SKFontStyleWidth.Normal, key.Slant); - - if (typeface?.FamilyName != name) - { - typeface = Default; - } + typeface = SKTypeface.FromFamilyName(familyKey, key.Weight, SKFontStyleWidth.Normal, key.Slant) + ?? Default; entry[key] = typeface; }