diff --git a/Source/Engine/UI/GUI/Common/Label.cs b/Source/Engine/UI/GUI/Common/Label.cs
index 3c7c04fb2..8de54fda3 100644
--- a/Source/Engine/UI/GUI/Common/Label.cs
+++ b/Source/Engine/UI/GUI/Common/Label.cs
@@ -182,6 +182,12 @@ namespace FlaxEngine.GUI
set => _autoFitTextRange = value;
}
+ ///
+ /// Gets or sets whether to fallback when the primary font cannot render a char.
+ ///
+ [EditorOrder(120), DefaultValue(true), Tooltip("Whether to fallback when the font cannot render a char.")]
+ public bool EnableFontFallback { get; set; } = true;
+
///
/// Initializes a new instance of the class.
///
@@ -233,7 +239,23 @@ namespace FlaxEngine.GUI
}
}
- Render2D.DrawText(_font.GetFont(), Material, _text, rect, color, hAlignment, wAlignment, Wrapping, BaseLinesGapScale, scale);
+ if (EnableFontFallback)
+ {
+ Render2D.DrawText(_font.GetFont(), Material, _text, rect, color, hAlignment, wAlignment, Wrapping, BaseLinesGapScale, scale);
+ }
+ else
+ {
+ var layout = new TextLayoutOptions
+ {
+ Bounds = rect,
+ HorizontalAlignment = hAlignment,
+ VerticalAlignment = wAlignment,
+ TextWrapping = Wrapping,
+ Scale = scale,
+ BaseLinesGapScale = BaseLinesGapScale,
+ };
+ Render2D.DrawTextInternal(_font.GetFont(), _text, color, ref layout, Material);
+ }
if (ClipText)
Render2D.PopClip();
@@ -254,7 +276,8 @@ 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 = EnableFontFallback ?
+ font.MeasureText(_text, ref layout) : font.MeasureTextInternal(_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 3c0d55008..53266a1b2 100644
--- a/Source/Engine/UI/GUI/Common/TextBox.cs
+++ b/Source/Engine/UI/GUI/Common/TextBox.cs
@@ -1,6 +1,8 @@
// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
+using System.ComponentModel;
+
namespace FlaxEngine.GUI
{
///
@@ -65,6 +67,12 @@ namespace FlaxEngine.GUI
[EditorDisplay("Text Style"), EditorOrder(2022), Tooltip("The color of the selection (Transparent if not used).")]
public Color SelectionColor { get; set; }
+ ///
+ /// Gets or sets whether to fallback when the primary font cannot render a char.
+ ///
+ [EditorOrder(120), DefaultValue(true), Tooltip("Whether to fallback when the font cannot render a char.")]
+ public bool EnableFontFallback { get; set; } = true;
+
///
/// Initializes a new instance of the class.
///
@@ -104,7 +112,8 @@ namespace FlaxEngine.GUI
return Float2.Zero;
}
- return font.MeasureText(_text, ref _layout);
+ return EnableFontFallback ? font.MeasureText(_text, ref _layout) :
+ font.MeasureTextInternal(_text, ref _layout);
}
///
@@ -117,8 +126,9 @@ namespace FlaxEngine.GUI
return Float2.Zero;
}
- height = font.GetMaxHeight() / DpiScale;
- return font.GetCharPosition(_text, index, ref _layout);
+ height = (EnableFontFallback ? font.GetMaxHeight() : font.Height) / DpiScale;
+ return EnableFontFallback ? font.GetCharPosition(_text, index, ref _layout) :
+ font.GetCharPositionInternal(_text, index, ref _layout);
}
///
@@ -130,7 +140,8 @@ namespace FlaxEngine.GUI
return 0;
}
- return font.HitTestText(_text, location, ref _layout);
+ return EnableFontFallback ? font.HitTestText(_text, location, ref _layout) :
+ font.HitTestTextInternal(_text, location, ref _layout);
}
///
@@ -169,8 +180,12 @@ namespace FlaxEngine.GUI
// 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 = EnableFontFallback ?
+ font.GetCharPosition(_text, SelectionLeft, ref _layout) :
+ font.GetCharPositionInternal(_text, SelectionLeft, ref _layout);
+ var rightEdge = EnableFontFallback ?
+ font.GetCharPosition(_text, SelectionRight, ref _layout) :
+ font.GetCharPositionInternal(_text, SelectionRight, ref _layout);
float fontHeight = font.GetMaxHeight() / DpiScale;
// Draw selection background
@@ -211,11 +226,19 @@ namespace FlaxEngine.GUI
var color = TextColor;
if (!enabled)
color *= 0.6f;
- Render2D.DrawText(font, _text, color, ref _layout, TextMaterial);
+ if (EnableFontFallback)
+ Render2D.DrawText(font, _text, color, ref _layout, TextMaterial);
+ else
+ // Draw without fallback
+ Render2D.DrawTextInternal(font, _text, color, ref _layout, TextMaterial);
}
else if (!string.IsNullOrEmpty(_watermarkText) && !IsFocused)
{
- Render2D.DrawText(font, _watermarkText, WatermarkTextColor, ref _layout, TextMaterial);
+ if (EnableFontFallback)
+ Render2D.DrawText(font, _watermarkText, WatermarkTextColor, ref _layout, TextMaterial);
+ else
+ // Draw without fallback
+ Render2D.DrawTextInternal(font, _watermarkText, WatermarkTextColor, ref _layout, TextMaterial);
}
// Caret