Browse Source
Merge pull request #7872 from Gillibald/fixes/typefaceResolution
Relax Typface resolution
pull/7317/merge
Jumar Macato
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
39 additions and
9 deletions
-
src/Skia/Avalonia.Skia/FontManagerImpl.cs
-
src/Skia/Avalonia.Skia/SKTypefaceCollection.cs
-
tests/Avalonia.Skia.UnitTests/Media/SKTypefaceCollectionCacheTests.cs
|
|
|
@ -122,9 +122,7 @@ namespace Avalonia.Skia |
|
|
|
|
|
|
|
skTypeface = _skFontManager.MatchFamily(familyName, fontStyle); |
|
|
|
|
|
|
|
if (skTypeface is null |
|
|
|
|| (!skTypeface.FamilyName.Equals(familyName, StringComparison.Ordinal) |
|
|
|
&& defaultName.Equals(skTypeface.FamilyName, StringComparison.Ordinal))) |
|
|
|
if (skTypeface is null || defaultName.Equals(skTypeface.FamilyName, StringComparison.Ordinal)) |
|
|
|
{ |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
@ -59,15 +59,30 @@ namespace Avalonia.Skia |
|
|
|
return typeface; |
|
|
|
} |
|
|
|
|
|
|
|
//Nothing was found so we try some regular cases.
|
|
|
|
if (TryFindStretchFallback(key, out typeface)) |
|
|
|
{ |
|
|
|
return typeface; |
|
|
|
} |
|
|
|
|
|
|
|
//Nothing was found so we try some regular typeface.
|
|
|
|
if (_typefaces.TryGetValue(new Typeface(key.FontFamily), out typeface)) |
|
|
|
{ |
|
|
|
return typeface; |
|
|
|
} |
|
|
|
|
|
|
|
return _typefaces.TryGetValue(new Typeface(key.FontFamily, FontStyle.Italic), out typeface) ? |
|
|
|
typeface : |
|
|
|
null; |
|
|
|
SKTypeface skTypeface = null; |
|
|
|
|
|
|
|
foreach(var pair in _typefaces) |
|
|
|
{ |
|
|
|
skTypeface = pair.Value; |
|
|
|
|
|
|
|
if (skTypeface.FamilyName.Contains(key.FontFamily.Name)) |
|
|
|
{ |
|
|
|
return skTypeface; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return skTypeface; |
|
|
|
} |
|
|
|
|
|
|
|
private bool TryFindStretchFallback(Typeface key, out SKTypeface typeface) |
|
|
|
|
|
|
|
@ -28,7 +28,7 @@ namespace Avalonia.Skia.UnitTests.Media |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_Get_Null_For_Invalid_FamilyName() |
|
|
|
public void Should_Get_Typeface_For_Invalid_FamilyName() |
|
|
|
{ |
|
|
|
using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface)) |
|
|
|
{ |
|
|
|
@ -39,7 +39,24 @@ namespace Avalonia.Skia.UnitTests.Media |
|
|
|
|
|
|
|
var typeface = notoMonoCollection.Get(new Typeface("ABC")); |
|
|
|
|
|
|
|
Assert.Null(typeface); |
|
|
|
Assert.NotNull(typeface); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_Get_Typeface_For_Partial_FamilyName() |
|
|
|
{ |
|
|
|
using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface)) |
|
|
|
{ |
|
|
|
var fontFamily = new FontFamily("resm:Avalonia.Skia.UnitTests.Assets?assembly=Avalonia.Skia.UnitTests#T"); |
|
|
|
|
|
|
|
var fontCollection = SKTypefaceCollectionCache.GetOrAddTypefaceCollection(fontFamily); |
|
|
|
|
|
|
|
var typeface = fontCollection.Get(new Typeface(fontFamily)); |
|
|
|
|
|
|
|
Assert.NotNull(typeface); |
|
|
|
|
|
|
|
Assert.Equal("Twitter Color Emoji", typeface.FamilyName); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|