diff --git a/Source/Engine/UI/GUI/Common/Label.cs b/Source/Engine/UI/GUI/Common/Label.cs
index 61282e7a5..9aae957c0 100644
--- a/Source/Engine/UI/GUI/Common/Label.cs
+++ b/Source/Engine/UI/GUI/Common/Label.cs
@@ -4,6 +4,27 @@ using System.ComponentModel;
namespace FlaxEngine.GUI
{
+ ///
+ /// Options for text case
+ ///
+ public enum TextCaseOptions
+ {
+ ///
+ /// No text case.
+ ///
+ None,
+
+ ///
+ /// Uppercase.
+ ///
+ Uppercase,
+
+ ///
+ /// Lowercase
+ ///
+ Lowercase
+ }
+
///
/// The basic GUI label control.
///
@@ -45,6 +66,24 @@ namespace FlaxEngine.GUI
}
}
+ ///
+ /// The text case.
+ ///
+ [EditorDisplay("Text Style"), EditorOrder(2000), Tooltip("The case of the text.")]
+ public TextCaseOptions CaseOption { get; set; } = TextCaseOptions.None;
+
+ ///
+ /// Whether to bold the text.
+ ///
+ [EditorDisplay("Text Style"), EditorOrder(2001), Tooltip("Bold the text.")]
+ public bool Bold { get; set; } = false;
+
+ ///
+ /// Whether to italicize the text.
+ ///
+ [EditorDisplay("Text Style"), EditorOrder(2002), Tooltip("Italicize the text.")]
+ public bool Italic { get; set; } = false;
+
///
/// Gets or sets the color of the text.
///
@@ -234,18 +273,51 @@ namespace FlaxEngine.GUI
}
}
- Render2D.DrawText(_font.GetFont(), Material, _text, rect, color, hAlignment, wAlignment, Wrapping, BaseLinesGapScale, scale);
+ Font font = GetFont();
+ var text = ConvertedText();
+
+ Render2D.DrawText(font, Material, text, rect, color, hAlignment, wAlignment, Wrapping, BaseLinesGapScale, scale);
if (ClipText)
Render2D.PopClip();
}
+ private Font GetFont()
+ {
+ Font font;
+ if (Bold)
+ font = Italic ? _font.GetBold().GetItalic().GetFont() : _font.GetBold().GetFont();
+ else if (Italic)
+ font = _font.GetItalic().GetFont();
+ else
+ font = _font.GetFont();
+ return font;
+ }
+
+ private LocalizedString ConvertedText()
+ {
+ LocalizedString text = _text;
+ switch (CaseOption)
+ {
+ case TextCaseOptions.None: break;
+ case TextCaseOptions.Uppercase:
+ text = text.ToString().ToUpper();
+ break;
+ case TextCaseOptions.Lowercase:
+ text = text.ToString().ToLower();
+ break;
+ default: break;
+ }
+ return text;
+ }
+
///
protected override void PerformLayoutBeforeChildren()
{
if (_autoWidth || _autoHeight || _autoFitText)
{
- var font = _font.GetFont();
+ Font font = GetFont();
+ var text = ConvertedText();
if (font)
{
// Calculate text size
@@ -255,7 +327,7 @@ namespace FlaxEngine.GUI
layout.Bounds.Size.X = Width - Margin.Width;
else if (_autoWidth && !_autoHeight)
layout.Bounds.Size.Y = Height - Margin.Height;
- _textSize = font.MeasureText(_text, ref layout);
+ _textSize = font.MeasureText(text, ref layout);
_textSize.Y *= BaseLinesGapScale;
// Check if size is controlled via text
diff --git a/Source/Engine/UI/GUI/Common/TextBox.cs b/Source/Engine/UI/GUI/Common/TextBox.cs
index 08136b65a..e5e43d130 100644
--- a/Source/Engine/UI/GUI/Common/TextBox.cs
+++ b/Source/Engine/UI/GUI/Common/TextBox.cs
@@ -24,6 +24,24 @@ namespace FlaxEngine.GUI
get => _watermarkText;
set => _watermarkText = value;
}
+
+ ///
+ /// The text case.
+ ///
+ [EditorDisplay("Text Style"), EditorOrder(2000), Tooltip("The case of the text.")]
+ public TextCaseOptions CaseOption { get; set; } = TextCaseOptions.None;
+
+ ///
+ /// Whether to bold the text.
+ ///
+ [EditorDisplay("Text Style"), EditorOrder(2001), Tooltip("Bold the text.")]
+ public bool Bold { get; set; } = false;
+
+ ///
+ /// Whether to italicize the text.
+ ///
+ [EditorDisplay("Text Style"), EditorOrder(2002), Tooltip("Italicize the text.")]
+ public bool Italic { get; set; } = false;
///
/// The vertical alignment of the text.
@@ -118,19 +136,48 @@ namespace FlaxEngine.GUI
///
public override Float2 GetTextSize()
{
- var font = Font.GetFont();
+ var font = GetFont();
if (font == null)
{
return Float2.Zero;
}
- return font.MeasureText(_text, ref _layout);
+ return font.MeasureText(ConvertedText(), ref _layout);
+ }
+
+ private Font GetFont()
+ {
+ Font font;
+ if (Bold)
+ font = Italic ? Font.GetBold().GetItalic().GetFont() : Font.GetBold().GetFont();
+ else if (Italic)
+ font = Font.GetItalic().GetFont();
+ else
+ font = Font.GetFont();
+ return font;
+ }
+
+ private string ConvertedText()
+ {
+ string text = _text;
+ switch (CaseOption)
+ {
+ case TextCaseOptions.None: break;
+ case TextCaseOptions.Uppercase:
+ text = text.ToUpper();
+ break;
+ case TextCaseOptions.Lowercase:
+ text = text.ToLower();
+ break;
+ default: break;
+ }
+ return text;
}
///
public override Float2 GetCharPosition(int index, out float height)
{
- var font = Font.GetFont();
+ var font = GetFont();
if (font == null)
{
height = Height;
@@ -138,19 +185,19 @@ namespace FlaxEngine.GUI
}
height = font.Height / DpiScale;
- return font.GetCharPosition(_text, index, ref _layout);
+ return font.GetCharPosition(ConvertedText(), index, ref _layout);
}
///
public override int HitTestText(Float2 location)
{
- var font = Font.GetFont();
+ var font = GetFont();
if (font == null)
{
return 0;
}
- return font.HitTestText(_text, location, ref _layout);
+ return font.HitTestText(ConvertedText(), location, ref _layout);
}
///
@@ -167,7 +214,7 @@ namespace FlaxEngine.GUI
// Cache data
var rect = new Rectangle(Float2.Zero, Size);
bool enabled = EnabledInHierarchy;
- var font = Font.GetFont();
+ var font = GetFont();
if (!font)
return;
@@ -186,11 +233,13 @@ namespace FlaxEngine.GUI
if (useViewOffset)
Render2D.PushTransform(Matrix3x3.Translation2D(-_viewOffset));
+ var text = ConvertedText();
+
// Check if sth is selected to draw selection
if (HasSelection)
{
- var leftEdge = font.GetCharPosition(_text, SelectionLeft, ref _layout);
- var rightEdge = font.GetCharPosition(_text, SelectionRight, ref _layout);
+ var leftEdge = font.GetCharPosition(text, SelectionLeft, ref _layout);
+ var rightEdge = font.GetCharPosition(text, SelectionRight, ref _layout);
var fontHeight = font.Height;
var textHeight = fontHeight / DpiScale;
@@ -227,12 +276,12 @@ namespace FlaxEngine.GUI
}
// Text or watermark
- if (_text.Length > 0)
+ if (text.Length > 0)
{
var color = TextColor;
if (!enabled)
color *= 0.6f;
- Render2D.DrawText(font, _text, color, ref _layout, TextMaterial);
+ Render2D.DrawText(font, text, color, ref _layout, TextMaterial);
}
else if (!string.IsNullOrEmpty(_watermarkText))
{