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)) {