Text scale in GUITextBlocks and ItemLabels can be changed, text wrapping fix (words that are too wide for one line shouldn't cause overflows anymore)
This commit is contained in:
@@ -10,6 +10,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
protected Alignment textAlignment;
|
protected Alignment textAlignment;
|
||||||
|
|
||||||
|
private float textScale;
|
||||||
|
|
||||||
protected Vector2 textPos;
|
protected Vector2 textPos;
|
||||||
protected Vector2 origin;
|
protected Vector2 origin;
|
||||||
|
|
||||||
@@ -88,6 +90,19 @@ namespace Barotrauma
|
|||||||
get { return textPos; }
|
get { return textPos; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float TextScale
|
||||||
|
{
|
||||||
|
get { return textScale; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != textScale)
|
||||||
|
{
|
||||||
|
textScale = value;
|
||||||
|
SetTextPos();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Vector2 Origin
|
public Vector2 Origin
|
||||||
{
|
{
|
||||||
get { return origin; }
|
get { return origin; }
|
||||||
@@ -162,6 +177,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
SetTextPos();
|
SetTextPos();
|
||||||
|
|
||||||
|
TextScale = 1.0f;
|
||||||
|
|
||||||
if (rect.Height == 0 && !string.IsNullOrEmpty(Text))
|
if (rect.Height == 0 && !string.IsNullOrEmpty(Text))
|
||||||
{
|
{
|
||||||
this.rect.Height = (int)Font.MeasureString(wrappedText).Y;
|
this.rect.Height = (int)Font.MeasureString(wrappedText).Y;
|
||||||
@@ -267,7 +284,7 @@ namespace Barotrauma
|
|||||||
Wrap ? wrappedText : text,
|
Wrap ? wrappedText : text,
|
||||||
new Vector2(rect.X, rect.Y) + textPos + offset,
|
new Vector2(rect.X, rect.Y) + textPos + offset,
|
||||||
textColor * (textColor.A / 255.0f),
|
textColor * (textColor.A / 255.0f),
|
||||||
0.0f, origin, 1.0f,
|
0.0f, origin, TextScale,
|
||||||
SpriteEffects.None, textDepth);
|
SpriteEffects.None, textDepth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,16 @@ namespace Barotrauma.Items.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Editable, HasDefaultValue(1.0f, true)]
|
||||||
|
public float TextScale
|
||||||
|
{
|
||||||
|
get { return textBlock == null ? 1.0f : textBlock.TextScale; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (textBlock != null) textBlock.TextScale = MathHelper.Clamp(value, 0.1f, 10.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private GUITextBlock TextBlock
|
private GUITextBlock TextBlock
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -49,6 +59,7 @@ namespace Barotrauma.Items.Components
|
|||||||
textBlock.Font = GUI.SmallFont;
|
textBlock.Font = GUI.SmallFont;
|
||||||
textBlock.Padding = new Vector4(5.0f, 5.0f, 5.0f, 5.0f);
|
textBlock.Padding = new Vector4(5.0f, 5.0f, 5.0f, 5.0f);
|
||||||
textBlock.TextDepth = item.Sprite.Depth - 0.0001f;
|
textBlock.TextDepth = item.Sprite.Depth - 0.0001f;
|
||||||
|
textBlock.TextScale = TextScale;
|
||||||
}
|
}
|
||||||
return textBlock;
|
return textBlock;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -471,37 +471,36 @@ namespace Barotrauma
|
|||||||
|
|
||||||
text = text.Replace("\n", " \n ");
|
text = text.Replace("\n", " \n ");
|
||||||
|
|
||||||
string[] words = text.Split(' ');//, '\n');
|
string[] words = text.Split(' ');
|
||||||
|
|
||||||
StringBuilder wrappedText = new StringBuilder();
|
StringBuilder wrappedText = new StringBuilder();
|
||||||
float linePos = 0f;
|
float linePos = 0f;
|
||||||
float spaceWidth = font.MeasureString(" ").X;
|
float spaceWidth = font.MeasureString(" ").X;
|
||||||
for (int i = 0; i < words.Length; ++i)
|
for (int i = 0; i < words.Length; ++i)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(words[i]) && words[i]!="\n") continue;
|
if (string.IsNullOrWhiteSpace(words[i]) && words[i] != "\n") continue;
|
||||||
|
|
||||||
Vector2 size;
|
Vector2 size = font.MeasureString(words[i]);
|
||||||
string tempWord = words[i];
|
if (size.X > lineLength)
|
||||||
string prevWord = words[i];
|
|
||||||
while ((size = font.MeasureString(tempWord)).X > lineLength)
|
|
||||||
{
|
{
|
||||||
tempWord = tempWord.Remove(tempWord.Length - 1, 1);
|
while (words[i].Length > 0 &&
|
||||||
}
|
(size = font.MeasureString((words[i][0]).ToString())).X + linePos < lineLength)
|
||||||
|
{
|
||||||
|
wrappedText.Append(words[i][0]);
|
||||||
|
words[i] = words[i].Remove(0, 1);
|
||||||
|
|
||||||
words[i] = tempWord;
|
linePos += size.X;
|
||||||
if (prevWord.Length> tempWord.Length)
|
}
|
||||||
{
|
|
||||||
wrappedText.Append(words[i]);
|
wrappedText.Append("\n");
|
||||||
wrappedText.Append(" \n");
|
linePos = 0.0f;
|
||||||
wrappedText.Append(prevWord.Remove(0, tempWord.Length));
|
i--;
|
||||||
linePos = lineLength*2.0f;
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (linePos + size.X < lineLength)
|
if (linePos + size.X < lineLength)
|
||||||
{
|
{
|
||||||
wrappedText.Append(words[i]);
|
wrappedText.Append(words[i]);
|
||||||
if (words[i] == "\n")
|
if (words[i] == "\n")
|
||||||
{
|
{
|
||||||
linePos = 0.0f;
|
linePos = 0.0f;
|
||||||
@@ -514,13 +513,10 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//if (i>0)wrappedText.Remove(wrappedText.Length - 1, 1);
|
wrappedText.Append("\n");
|
||||||
|
wrappedText.Append(words[i]);
|
||||||
wrappedText.Append("\n");
|
|
||||||
wrappedText.Append(words[i]);
|
|
||||||
|
|
||||||
linePos = size.X + spaceWidth;
|
|
||||||
|
|
||||||
|
linePos = size.X + spaceWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i < words.Length - 1) wrappedText.Append(" ");
|
if (i < words.Length - 1) wrappedText.Append(" ");
|
||||||
|
|||||||
Reference in New Issue
Block a user