1
0
Fork 0
mirror of https://github.com/Ellpeck/MLEM.git synced 2024-05-29 11:33:37 +02:00
MLEM/MLEM/Extensions/SpriteFontExtensions.cs

50 lines
2 KiB
C#
Raw Normal View History

using System;
2019-08-06 14:20:11 +02:00
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
namespace MLEM.Extensions {
public static class SpriteFontExtensions {
public static string SplitString(this SpriteFont font, string text, float width, float scale) {
return SplitString(s => font.MeasureString(s).X, text, width, scale);
}
2019-09-05 18:15:51 +02:00
public static string TruncateString(this SpriteFont font, string text, float width, float scale, bool fromBack = false) {
return TruncateString(s => font.MeasureString(s).X, text, width, scale, fromBack);
}
public static string TruncateString(Func<StringBuilder, float> widthFunc, string text, float width, float scale, bool fromBack = false) {
var total = new StringBuilder();
for (var i = 0; i < text.Length; i++) {
if (fromBack) {
total.Insert(0, text[text.Length - 1 - i]);
} else {
total.Append(text[i]);
}
if (widthFunc(total) * scale >= width)
return total.ToString(fromBack ? 1 : 0, total.Length - 1);
}
return total.ToString();
}
public static string SplitString(Func<StringBuilder, float> widthFunc, string text, float width, float scale) {
var total = new StringBuilder();
2019-08-24 00:07:54 +02:00
foreach (var line in text.Split('\n')) {
var curr = new StringBuilder();
2019-08-24 00:07:54 +02:00
foreach (var word in line.Split(' ')) {
curr.Append(word).Append(' ');
if (widthFunc(curr) * scale >= width) {
var len = curr.Length - word.Length - 1;
total.Append(curr.ToString(0, len - 1)).Append('\n');
curr.Remove(0, len);
2019-08-24 00:07:54 +02:00
}
2019-08-06 14:20:11 +02:00
}
total.Append(curr.ToString(0, curr.Length - 1)).Append('\n');
2019-08-06 14:20:11 +02:00
}
return total.ToString(0, total.Length - 1);
2019-08-06 14:20:11 +02:00
}
}
}