private float MeasureTextNodeLength(TextNode node, QFontData fontData, QFontRenderOptions options)
{
bool monospaced = fontData.IsMonospacingActive(options);
float monospaceWidth = fontData.GetMonoSpaceWidth(options);
if (node.Type == TextNodeType.Space)
{
if (monospaced)
{
return(monospaceWidth);
}
return((float)Math.Ceiling(fontData.meanGlyphWidth * options.WordSpacing));
}
float length = 0f;
float height = 0f;
if (node.Type == TextNodeType.Word)
{
for (int i = 0; i < node.Text.Length; i++)
{
char c = node.Text[i];
if (fontData.CharSetMapping.ContainsKey(c))
{
var glyph = fontData.CharSetMapping[c];
if (monospaced)
{
length += monospaceWidth;
}
else
{
length += (float)Math.Ceiling(fontData.CharSetMapping[c].rect.Width + fontData.meanGlyphWidth * options.CharacterSpacing + fontData.GetKerningPairCorrection(i, node.Text, node));
}
height = Math.Max(height, glyph.yOffset + glyph.rect.Height);
}
}
}
node.Height = height;
return(length);
}