/// <summary> /// Returns a text that is cropped to fit a maximum width using this Font. /// </summary> /// <param name="text">The original text.</param> /// <param name="maxWidth">The maximum width it may occupy.</param> /// <param name="fitMode">The mode by which the text fitting algorithm operates.</param> /// <returns></returns> public string FitText(string text, float maxWidth, FitTextMode fitMode = FitTextMode.ByChar) { if (this.texture == null) { return(text); } Vector2 textSize = Vector2.Zero; float curOffset = 0.0f; GlyphData glyphData; Rect uvRect; float glyphXOff; float glyphYOff; 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, out glyphYOff); 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); }
/// <summary> /// Returns a text that is cropped to fit a maximum width using this Font. /// </summary> /// <param name="text">The original text.</param> /// <param name="maxWidth">The maximum width it may occupy.</param> /// <param name="fitMode">The mode by which the text fitting algorithm operates.</param> /// <returns></returns> 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; }