Browse Source

Merge pull request #6709 from Gillibald/feature/SyntheticWeightAndStyle

Simulate font weight bold and font style italic when a fallback is used
pull/6755/head
Dan Walmsley 4 years ago
committed by GitHub
parent
commit
52f6451e53
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      src/Skia/Avalonia.Skia/FontManagerImpl.cs
  2. 10
      src/Skia/Avalonia.Skia/GlyphTypefaceImpl.cs
  3. 2
      src/Skia/Avalonia.Skia/PlatformRenderInterface.cs

6
src/Skia/Avalonia.Skia/FontManagerImpl.cs

@ -140,7 +140,11 @@ namespace Avalonia.Skia
$"Could not create glyph typeface for: {typeface.FontFamily.Name}.");
}
return new GlyphTypefaceImpl(skTypeface);
var isFakeBold = (int)typeface.Weight >= 600 && !skTypeface.IsBold;
var isFakeItalic = typeface.Style == FontStyle.Italic && !skTypeface.IsItalic;
return new GlyphTypefaceImpl(skTypeface, isFakeBold, isFakeItalic);
}
}
}

10
src/Skia/Avalonia.Skia/GlyphTypefaceImpl.cs

@ -10,7 +10,7 @@ namespace Avalonia.Skia
{
private bool _isDisposed;
public GlyphTypefaceImpl(SKTypeface typeface)
public GlyphTypefaceImpl(SKTypeface typeface, bool isFakeBold = false, bool isFakeItalic = false)
{
Typeface = typeface ?? throw new ArgumentNullException(nameof(typeface));
@ -52,6 +52,10 @@ namespace Avalonia.Skia
0;
IsFixedPitch = Typeface.IsFixedPitch;
IsFakeBold = isFakeBold;
IsFakeItalic = isFakeItalic;
}
public Face Face { get; }
@ -86,6 +90,10 @@ namespace Avalonia.Skia
/// <inheritdoc cref="IGlyphTypefaceImpl"/>
public bool IsFixedPitch { get; }
public bool IsFakeBold { get; }
public bool IsFakeItalic { get; }
/// <inheritdoc cref="IGlyphTypefaceImpl"/>
public ushort GetGlyph(uint codepoint)

2
src/Skia/Avalonia.Skia/PlatformRenderInterface.cs

@ -217,6 +217,8 @@ namespace Avalonia.Skia
s_font.Size = (float)glyphRun.FontRenderingEmSize;
s_font.Typeface = typeface;
s_font.Embolden = glyphTypeface.IsFakeBold;
s_font.SkewX = glyphTypeface.IsFakeItalic ? -0.2f : 0;
SKTextBlob textBlob;

Loading…
Cancel
Save