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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
16 additions and
2 deletions
-
src/Skia/Avalonia.Skia/FontManagerImpl.cs
-
src/Skia/Avalonia.Skia/GlyphTypefaceImpl.cs
-
src/Skia/Avalonia.Skia/PlatformRenderInterface.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,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) |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
|