|
|
|
@ -3,7 +3,6 @@ using System.Collections; |
|
|
|
using System.Collections.Concurrent; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Diagnostics.CodeAnalysis; |
|
|
|
using System.Globalization; |
|
|
|
using Avalonia.Platform; |
|
|
|
|
|
|
|
namespace Avalonia.Media.Fonts |
|
|
|
@ -43,11 +42,13 @@ namespace Avalonia.Media.Fonts |
|
|
|
|
|
|
|
if (fontManager.TryCreateGlyphTypeface(stream, out var glyphTypeface)) |
|
|
|
{ |
|
|
|
if (!_glyphTypefaceCache.TryGetValue(glyphTypeface.FamilyName, out var glyphTypefaces)) |
|
|
|
var familyName = glyphTypeface.FamilyName.ToUpperInvariant(); |
|
|
|
|
|
|
|
if (!_glyphTypefaceCache.TryGetValue(familyName, out var glyphTypefaces)) |
|
|
|
{ |
|
|
|
glyphTypefaces = new ConcurrentDictionary<FontCollectionKey, IGlyphTypeface>(); |
|
|
|
|
|
|
|
if (_glyphTypefaceCache.TryAdd(glyphTypeface.FamilyName, glyphTypefaces)) |
|
|
|
if (_glyphTypefaceCache.TryAdd(familyName, glyphTypefaces)) |
|
|
|
{ |
|
|
|
_fontFamilies.Add(new FontFamily(_key, glyphTypeface.FamilyName)); |
|
|
|
} |
|
|
|
@ -86,6 +87,8 @@ namespace Avalonia.Media.Fonts |
|
|
|
public bool TryGetGlyphTypeface(string familyName, FontStyle style, FontWeight weight, |
|
|
|
FontStretch stretch, [NotNullWhen(true)] out IGlyphTypeface? glyphTypeface) |
|
|
|
{ |
|
|
|
familyName = familyName.ToUpperInvariant(); |
|
|
|
|
|
|
|
var key = new FontCollectionKey(style, weight, stretch); |
|
|
|
|
|
|
|
if (_glyphTypefaceCache.TryGetValue(familyName, out var glyphTypefaces)) |
|
|
|
@ -101,9 +104,11 @@ namespace Avalonia.Media.Fonts |
|
|
|
{ |
|
|
|
var fontFamily = _fontFamilies[i]; |
|
|
|
|
|
|
|
if (fontFamily.Name.ToLower(CultureInfo.InvariantCulture).StartsWith(familyName.ToLower(CultureInfo.InvariantCulture))) |
|
|
|
if (fontFamily.Name.ToUpperInvariant().StartsWith(familyName.ToUpperInvariant())) |
|
|
|
{ |
|
|
|
if (_glyphTypefaceCache.TryGetValue(fontFamily.Name, out glyphTypefaces) && |
|
|
|
familyName = fontFamily.Name.ToUpperInvariant(); |
|
|
|
|
|
|
|
if (_glyphTypefaceCache.TryGetValue(familyName, out glyphTypefaces) && |
|
|
|
TryGetNearestMatch(glyphTypefaces, key, out glyphTypeface)) |
|
|
|
{ |
|
|
|
return true; |
|
|
|
|