public string FitText(string text, float maxWidth, FitTextMode fitMode = FitTextMode.ByChar)
{
Vector2 textSize = Vector2.Zero;
float curOffset = 0.0f;
GlyphData glyphData;
Rect uvRect;
float glyphXOff;
float glyphXAdv;
int lastValidLength = 0;
for (int i = 0; i < text.Length; i++)
{
this.ProcessTextAdv(text, i, out glyphData, out uvRect, out glyphXAdv, out glyphXOff);
textSize.X = Math.Max(textSize.X, curOffset + glyphXAdv);
textSize.Y = Math.Max(textSize.Y, glyphData.height);
if (textSize.X > maxWidth) return lastValidLength > 0 ? text.Substring(0, lastValidLength) : "";
if (fitMode == FitTextMode.ByChar)
lastValidLength = i;
else if (text[i] == ' ')
lastValidLength = fitMode == FitTextMode.ByWordLeadingSpace ? i : i + 1;
curOffset += glyphXAdv;
}
return text;
}