|
|
|
@ -26,6 +26,7 @@ namespace Avalonia.Media |
|
|
|
|
|
|
|
private readonly ConcurrentDictionary<Uri, IFontCollection> _fontCollections = new ConcurrentDictionary<Uri, IFontCollection>(); |
|
|
|
private readonly IReadOnlyList<FontFallback>? _fontFallbacks; |
|
|
|
private readonly IReadOnlyDictionary<string, FontFamily>? _fontFamilyMappings; |
|
|
|
|
|
|
|
public FontManager(IFontManagerImpl platformImpl) |
|
|
|
{ |
|
|
|
@ -35,6 +36,7 @@ namespace Avalonia.Media |
|
|
|
|
|
|
|
var options = AvaloniaLocator.Current.GetService<FontManagerOptions>(); |
|
|
|
_fontFallbacks = options?.FontFallbacks; |
|
|
|
_fontFamilyMappings = options?.FontFamilyMappings; |
|
|
|
|
|
|
|
var defaultFontFamilyName = GetDefaultFontFamilyName(options); |
|
|
|
DefaultFontFamily = new FontFamily(defaultFontFamilyName); |
|
|
|
@ -91,8 +93,8 @@ namespace Avalonia.Media |
|
|
|
{ |
|
|
|
glyphTypeface = null; |
|
|
|
|
|
|
|
var fontFamily = typeface.FontFamily; |
|
|
|
|
|
|
|
var fontFamily = GetMappedFontFamily(typeface.FontFamily); |
|
|
|
|
|
|
|
if (typeface.FontFamily.Name == FontFamily.DefaultFontFamilyName) |
|
|
|
{ |
|
|
|
return TryGetGlyphTypeface(new Typeface(DefaultFontFamily, typeface.Style, typeface.Weight, typeface.Stretch), out glyphTypeface); |
|
|
|
@ -108,6 +110,20 @@ namespace Avalonia.Media |
|
|
|
|
|
|
|
var familyName = fontFamily.FamilyNames[i]; |
|
|
|
|
|
|
|
if(_fontFamilyMappings != null && _fontFamilyMappings.TryGetValue(familyName, out var mappedFontFamily)) |
|
|
|
{ |
|
|
|
if(mappedFontFamily.Key != null) |
|
|
|
{ |
|
|
|
key = mappedFontFamily.Key; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
key = new FontFamilyKey(SystemFontsKey); |
|
|
|
} |
|
|
|
|
|
|
|
familyName = mappedFontFamily.FamilyNames.PrimaryFamilyName; |
|
|
|
} |
|
|
|
|
|
|
|
if (TryGetGlyphTypefaceByKeyAndName(typeface, key, familyName, out glyphTypeface) && |
|
|
|
glyphTypeface.FamilyName.Contains(familyName)) |
|
|
|
{ |
|
|
|
@ -144,6 +160,16 @@ namespace Avalonia.Media |
|
|
|
|
|
|
|
//Nothing was found so use the default
|
|
|
|
return TryGetGlyphTypeface(new Typeface(FontFamily.DefaultFontFamilyName, typeface.Style, typeface.Weight, typeface.Stretch), out glyphTypeface); |
|
|
|
|
|
|
|
FontFamily GetMappedFontFamily(FontFamily fontFamily) |
|
|
|
{ |
|
|
|
if (_fontFamilyMappings == null ||!_fontFamilyMappings.TryGetValue(fontFamily.FamilyNames.PrimaryFamilyName, out var mappedFontFamily)) |
|
|
|
{ |
|
|
|
return fontFamily; |
|
|
|
} |
|
|
|
|
|
|
|
return mappedFontFamily; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private bool TryGetGlyphTypefaceByKeyAndName(Typeface typeface, FontFamilyKey key, string familyName, [NotNullWhen(true)] out IGlyphTypeface? glyphTypeface) |
|
|
|
|