diff --git a/src/Skia/Avalonia.Skia/FontManagerImpl.cs b/src/Skia/Avalonia.Skia/FontManagerImpl.cs
index 178ee8c544..6b560ac739 100644
--- a/src/Skia/Avalonia.Skia/FontManagerImpl.cs
+++ b/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);
}
}
}
diff --git a/src/Skia/Avalonia.Skia/GlyphTypefaceImpl.cs b/src/Skia/Avalonia.Skia/GlyphTypefaceImpl.cs
index ceccc481f9..9601fece25 100644
--- a/src/Skia/Avalonia.Skia/GlyphTypefaceImpl.cs
+++ b/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
///
public bool IsFixedPitch { get; }
+
+ public bool IsFakeBold { get; }
+
+ public bool IsFakeItalic { get; }
///
public ushort GetGlyph(uint codepoint)
diff --git a/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs b/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs
index be76066078..6f78514f22 100644
--- a/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs
+++ b/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;