-
Notifications
You must be signed in to change notification settings - Fork 10
/
KerningHelper.cs
36 lines (32 loc) · 1.26 KB
/
KerningHelper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using RoyT.TrueType.Tables.Kern;
namespace RoyT.TrueType.Helpers
{
public static class KerningHelper
{
/// <summary>
/// Returns the horizontal kerning between the left and right character scaled by the scale parameter
/// or 0 if no kerning information exists for this pair of characters
/// </summary>
public static float GetHorizontalKerning(char left, char right, TrueTypeFont font)
{
if (font.KernTable.SubtableCount > 0)
{
var leftCode = GlyphHelper.GetGlyphIndex(left, font);
var rightCode = GlyphHelper.GetGlyphIndex(right, font);
foreach (var subTable in font.KernTable.Subtables)
{
if (subTable.Format0 != null && subTable.Direction == Direction.Horizontal
&& subTable.Values == Values.Kerning)
{
var pair = new KerningPair((ushort)leftCode, (ushort)rightCode);
if (subTable.Format0.Map.TryGetValue(pair, out var value))
{
return value;
}
}
}
}
return 0.0f;
}
}
}