mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 12:58:33 +01:00
fixed SplitString not respecting long words
This commit is contained in:
parent
31e2b72197
commit
5bf111d05a
2 changed files with 24 additions and 7 deletions
|
@ -209,6 +209,7 @@ namespace Demos {
|
|||
|
||||
root.AddChild(ElementHelper.ImageButton(Anchor.AutoLeft, new Vector2(1, 10), tree, "Button with image")).PositionOffset = new Vector2(0, 1);
|
||||
root.AddChild(new Button(Anchor.AutoLeft, new Vector2(1, 10), "Disabled button") {IsDisabled = true}).PositionOffset = new Vector2(0, 1);
|
||||
//root.AddChild(new Paragraph(Anchor.AutoLeft, 1, "This_is_a_really_long_line_to_see_if_splitting_without_spaces_works_properly._I_also_want_to_see_if_it_works_across_multiple_lines_or_just_on_the_first_one. But after this, I want the text to continue normally before changing_back_to_being_really_long_oh_yes"));
|
||||
|
||||
// Below are some querying examples that help you find certain elements easily
|
||||
|
||||
|
|
|
@ -29,17 +29,33 @@ namespace MLEM.Extensions {
|
|||
return total.ToString();
|
||||
}
|
||||
|
||||
public static string SplitString(Func<StringBuilder, float> widthFunc, string text, float width, float scale) {
|
||||
public static string SplitString(Func<string, float> widthFunc, string text, float width, float scale) {
|
||||
var total = new StringBuilder();
|
||||
foreach (var line in text.Split('\n')) {
|
||||
var curr = new StringBuilder();
|
||||
foreach (var word in line.Split(' ')) {
|
||||
curr.Append(word).Append(' ');
|
||||
if (widthFunc(curr) * scale >= width) {
|
||||
var len = curr.Length - word.Length - 1;
|
||||
if (len > 0) {
|
||||
total.Append(curr.ToString(0, len - 1)).Append('\n');
|
||||
curr.Remove(0, len);
|
||||
if (widthFunc(word) * scale >= width) {
|
||||
if (curr.Length > 0) {
|
||||
total.Append(curr.ToString(0, curr.Length - 1)).Append('\n');
|
||||
curr.Clear();
|
||||
}
|
||||
var wordBuilder = new StringBuilder();
|
||||
for (var i = 0; i < word.Length; i++) {
|
||||
wordBuilder.Append(word[i]);
|
||||
if (widthFunc(wordBuilder.ToString()) * scale >= width) {
|
||||
total.Append(wordBuilder.ToString(0, wordBuilder.Length - 1)).Append('\n');
|
||||
wordBuilder.Remove(0, wordBuilder.Length - 1);
|
||||
}
|
||||
}
|
||||
curr.Append(wordBuilder).Append(' ');
|
||||
} else {
|
||||
curr.Append(word).Append(' ');
|
||||
if (widthFunc(curr.ToString()) * scale >= width) {
|
||||
var len = curr.Length - word.Length - 1;
|
||||
if (len > 0) {
|
||||
total.Append(curr.ToString(0, len - 1)).Append('\n');
|
||||
curr.Remove(0, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue