Browse Source

Merge pull request #7872 from Gillibald/fixes/typefaceResolution

Relax Typface resolution
pull/7317/merge
Jumar Macato 4 years ago
committed by GitHub
parent
commit
28b3e0c45c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      src/Skia/Avalonia.Skia/FontManagerImpl.cs
  2. 23
      src/Skia/Avalonia.Skia/SKTypefaceCollection.cs
  3. 21
      tests/Avalonia.Skia.UnitTests/Media/SKTypefaceCollectionCacheTests.cs

4
src/Skia/Avalonia.Skia/FontManagerImpl.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;
}

23
src/Skia/Avalonia.Skia/SKTypefaceCollection.cs

@ -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)

21
tests/Avalonia.Skia.UnitTests/Media/SKTypefaceCollectionCacheTests.cs

@ -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);
}
}
}

Loading…
Cancel
Save