Browse Source

Make the name table optional (#17306)

release/11.2.0-rc2
Benedikt Stebner 1 year ago
committed by Max Katz
parent
commit
f70cf39634
  1. 4
      src/Avalonia.Base/Media/Fonts/Tables/Name/NameTable.cs
  2. 24
      src/Skia/Avalonia.Skia/GlyphTypefaceImpl.cs

4
src/Avalonia.Base/Media/Fonts/Tables/Name/NameTable.cs

@ -98,11 +98,11 @@ namespace Avalonia.Media.Fonts.Tables.Name
public string GetNameById(ushort culture, ushort nameId)
=> GetNameById(culture, (KnownNameIds)nameId);
public static NameTable Load(IGlyphTypeface glyphTypeface)
public static NameTable? Load(IGlyphTypeface glyphTypeface)
{
if (!glyphTypeface.TryGetTable(Tag, out var table))
{
throw new MissingFontTableException("Could not load table", "name");
return null;
}
using var stream = new MemoryStream(table);

24
src/Skia/Avalonia.Skia/GlyphTypefaceImpl.cs

@ -17,7 +17,7 @@ namespace Avalonia.Skia
{
private bool _isDisposed;
private readonly SKTypeface _typeface;
private readonly NameTable _nameTable;
private readonly NameTable? _nameTable;
private readonly OS2Table? _os2Table;
private readonly HorizontalHeadTable? _hhTable;
private IReadOnlyList<OpenTypeTag>? _supportedFeatures;
@ -100,18 +100,26 @@ namespace Avalonia.Skia
_nameTable = NameTable.Load(this);
TypographicFamilyName = _nameTable.GetNameById((ushort)CultureInfo.InvariantCulture.LCID, KnownNameIds.TypographicFamilyName);
//Rely on Skia if no name table is present
FamilyName = _nameTable?.FontFamilyName((ushort)CultureInfo.InvariantCulture.LCID) ?? typeface.FamilyName;
FamilyName = _nameTable.FontFamilyName((ushort)CultureInfo.InvariantCulture.LCID);
TypographicFamilyName = _nameTable?.GetNameById((ushort)CultureInfo.InvariantCulture.LCID, KnownNameIds.TypographicFamilyName) ?? FamilyName;
var familyNames = new Dictionary<ushort, string>(_nameTable.Languages.Count);
if(_nameTable != null)
{
var familyNames = new Dictionary<ushort, string>(_nameTable.Languages.Count);
foreach (var language in _nameTable.Languages)
{
familyNames.Add(language, _nameTable.FontFamilyName(language));
}
foreach (var language in _nameTable.Languages)
FamilyNames = familyNames;
}
else
{
familyNames.Add(language, _nameTable.FontFamilyName(language));
FamilyNames = new Dictionary<ushort, string> { { (ushort)CultureInfo.InvariantCulture.LCID, FamilyName } };
}
FamilyNames = familyNames;
}
public string TypographicFamilyName { get; }

Loading…
Cancel
Save