diff --git a/Subsurface/Source/GUI/GUITextBlock.cs b/Subsurface/Source/GUI/GUITextBlock.cs index 54a41ac31..3a51e6279 100644 --- a/Subsurface/Source/GUI/GUITextBlock.cs +++ b/Subsurface/Source/GUI/GUITextBlock.cs @@ -187,21 +187,21 @@ namespace Barotrauma public void SetTextPos() { - if (text==null) return; + if (text == null) return; wrappedText = text; Vector2 size = MeasureText(text); - - if (Wrap && rect.Width>0) + + if (Wrap && rect.Width > 0) { - wrappedText = ToolBox.WrapText(text, rect.Width - padding.X - padding.Z, Font); + wrappedText = ToolBox.WrapText(text, rect.Width - padding.X - padding.Z, Font, textScale); Vector2 newSize = MeasureText(wrappedText); size = newSize; } - + if (LimitText && text.Length>1 && size.Y > rect.Height) { string[] lines = text.Split('\n'); diff --git a/Subsurface/Source/Utils/ToolBox.cs b/Subsurface/Source/Utils/ToolBox.cs index 1ac5eae40..2e60c0b6a 100644 --- a/Subsurface/Source/Utils/ToolBox.cs +++ b/Subsurface/Source/Utils/ToolBox.cs @@ -465,7 +465,7 @@ namespace Barotrauma return d[n, m]; } - public static string WrapText(string text, float lineLength, ScalableFont font) //TODO: could integrate this into the ScalableFont class directly + public static string WrapText(string text, float lineLength, ScalableFont font, float textScale = 1.0f) //TODO: could integrate this into the ScalableFont class directly { if (font.MeasureString(text).X < lineLength) return text; @@ -475,26 +475,35 @@ namespace Barotrauma StringBuilder wrappedText = new StringBuilder(); float linePos = 0f; - float spaceWidth = font.MeasureString(" ").X; + float spaceWidth = font.MeasureString(" ").X * textScale; for (int i = 0; i < words.Length; ++i) { if (string.IsNullOrWhiteSpace(words[i]) && words[i] != "\n") continue; - Vector2 size = font.MeasureString(words[i]); + Vector2 size = font.MeasureString(words[i]) * textScale; if (size.X > lineLength) { - while (words[i].Length > 0 && - (size = font.MeasureString((words[i][0]).ToString())).X + linePos < lineLength) + if (linePos == 0.0f) { - wrappedText.Append(words[i][0]); - words[i] = words[i].Remove(0, 1); + wrappedText.AppendLine(words[i]); + } + else + { + do + { + if (words[i].Length == 0) break; - linePos += size.X; + wrappedText.Append(words[i][0]); + words[i] = words[i].Remove(0, 1); + + linePos += size.X; + } while (words[i].Length > 0 && (size = font.MeasureString((words[i][0]).ToString()) * textScale).X + linePos < lineLength); + + wrappedText.Append("\n"); + linePos = 0.0f; + i--; } - wrappedText.Append("\n"); - linePos = 0.0f; - i--; continue; }