|
|
@@ -12,8 +12,10 @@ namespace Avalonia.Skia
|
|
|
/// </summary>
|
|
|
internal static class TypefaceCache
|
|
|
{
|
|
|
- public static SKTypeface Default = CreateDefaultTypeface();
|
|
|
- static readonly Dictionary<string, Dictionary<FontKey, SKTypeface>> Cache = new Dictionary<string, Dictionary<FontKey, SKTypeface>>();
|
|
|
+ public static readonly string DefaultFamilyName = CreateDefaultFamilyName();
|
|
|
+
|
|
|
+ private static readonly Dictionary<string, Dictionary<FontKey, SKTypeface>> s_cache =
|
|
|
+ new Dictionary<string, Dictionary<FontKey, SKTypeface>>();
|
|
|
|
|
|
struct FontKey
|
|
|
{
|
|
|
@@ -49,26 +51,26 @@ namespace Avalonia.Skia
|
|
|
// Equals and GetHashCode ommitted
|
|
|
}
|
|
|
|
|
|
- private static SKTypeface CreateDefaultTypeface()
|
|
|
+ private static string CreateDefaultFamilyName()
|
|
|
{
|
|
|
- var defaultTypeface = SKTypeface.FromFamilyName(FontFamily.Default.Name) ?? SKTypeface.FromFamilyName(null);
|
|
|
+ var defaultTypeface = SKTypeface.CreateDefault();
|
|
|
|
|
|
- return defaultTypeface;
|
|
|
+ return defaultTypeface.FamilyName;
|
|
|
}
|
|
|
|
|
|
private static SKTypeface GetTypeface(string name, FontKey key)
|
|
|
{
|
|
|
var familyKey = name;
|
|
|
|
|
|
- if (!Cache.TryGetValue(familyKey, out var entry))
|
|
|
+ if (!s_cache.TryGetValue(familyKey, out var entry))
|
|
|
{
|
|
|
- Cache[familyKey] = entry = new Dictionary<FontKey, SKTypeface>();
|
|
|
+ s_cache[familyKey] = entry = new Dictionary<FontKey, SKTypeface>();
|
|
|
}
|
|
|
|
|
|
if (!entry.TryGetValue(key, out var typeface))
|
|
|
{
|
|
|
- typeface = SKTypeface.FromFamilyName(familyKey, key.Weight, SKFontStyleWidth.Normal, key.Slant)
|
|
|
- ?? Default;
|
|
|
+ typeface = SKTypeface.FromFamilyName(familyKey, key.Weight, SKFontStyleWidth.Normal, key.Slant) ??
|
|
|
+ GetTypeface(DefaultFamilyName, key);
|
|
|
|
|
|
entry[key] = typeface;
|
|
|
}
|
|
|
@@ -78,7 +80,7 @@ namespace Avalonia.Skia
|
|
|
|
|
|
public static SKTypeface GetTypeface(string name, FontStyle style, FontWeight weight)
|
|
|
{
|
|
|
- SKFontStyleSlant skStyle = SKFontStyleSlant.Upright;
|
|
|
+ var skStyle = SKFontStyleSlant.Upright;
|
|
|
|
|
|
switch (style)
|
|
|
{
|
|
|
@@ -93,6 +95,5 @@ namespace Avalonia.Skia
|
|
|
|
|
|
return GetTypeface(name, new FontKey((SKFontStyleWeight)weight, skStyle));
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
}
|