diff --git a/core/templates/lru.h b/core/templates/lru.h
index 48ba318b1213..1611693bf4ce 100644
--- a/core/templates/lru.h
+++ b/core/templates/lru.h
@@ -102,6 +102,7 @@ class LRUCache {
}
_FORCE_INLINE_ size_t get_capacity() const { return capacity; }
+ _FORCE_INLINE_ size_t get_size() const { return _map.size(); }
void set_capacity(size_t p_capacity) {
if (capacity > 0) {
diff --git a/doc/classes/Button.xml b/doc/classes/Button.xml
index 4ece57fa8141..cb20a3a34645 100644
--- a/doc/classes/Button.xml
+++ b/doc/classes/Button.xml
@@ -40,29 +40,6 @@
https://godotengine.org/asset-library/asset/515
https://godotengine.org/asset-library/asset/677
-
-
-
-
- Removes all OpenType features.
-
-
-
-
-
-
- Returns OpenType feature [code]tag[/code].
-
-
-
-
-
-
-
- Sets OpenType feature [code]tag[/code]. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
-
-
-
Text alignment policy for the button's text, use one of the [enum @GlobalScope.HorizontalAlignment] constants.
@@ -142,8 +119,8 @@
The size of the text outline.
-
- [Font] of the [Button]'s text.
+
+ [FontConfig] of the [Button]'s text.
Font size of the [Button]'s text.
diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml
index 98a498d71920..4c3d05b29f63 100644
--- a/doc/classes/CanvasItem.xml
+++ b/doc/classes/CanvasItem.xml
@@ -48,17 +48,26 @@
-
-
+
+
+
+
+
+
+
+ Draws a string first character using a custom font.
+
+
+
+
+
-
-
+
+
-
-
- Draws a string character using a custom font. Returns the advance, depending on the character width and kerning with an optional next character.
+ Draws a string first character outline using a custom font.
@@ -127,7 +136,7 @@
- Draws a textured rectangle region of the multi-channel signed distance field texture at a given position, optionally modulated by a color. See [member FontData.multichannel_signed_distance_field] for more information and caveats about MSDF font rendering.
+ Draws a textured rectangle region of the multi-channel signed distance field texture at a given position, optionally modulated by a color. See [member Font.multichannel_signed_distance_field] for more information and caveats about MSDF font rendering.
If [code]outline[/code] is positive, each alpha channel value of pixel in region is set to maximum value of true distance in the [code]outline[/code] radius.
Value of the [code]pixel_range[/code] should the same that was used during distance field texture generation.
@@ -152,21 +161,39 @@
-
+
-
-
+
+
-
-
-
+
+
+
Breaks [code]text[/code] to the lines and draws it using the specified [code]font[/code] at the [code]position[/code] (top-left corner). The text will have its color multiplied by [code]modulate[/code]. If [code]clip_w[/code] is greater than or equal to 0, the text will be clipped if it exceeds the specified width.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Breaks [code]text[/code] to the lines and draws text outline using the specified [code]font[/code] at the [code]position[/code] (top-left corner). The text will have its color multiplied by [code]modulate[/code]. If [code]clip_w[/code] is greater than or equal to 0, the text will be clipped if it exceeds the specified width.
+
+
@@ -245,16 +272,16 @@
-
+
-
+
-
-
-
+
+
+
Draws [code]text[/code] using the specified [code]font[/code] at the [code]position[/code] (bottom-left corner using the baseline of the font). The text will have its color multiplied by [code]modulate[/code]. If [code]clip_w[/code] is greater than or equal to 0, the text will be clipped if it exceeds the specified width.
[b]Example using the default project font:[/b]
@@ -276,7 +303,24 @@
DrawString(defaultFont, new Vector2(64, 64), "Hello world", HORIZONTAL_ALIGNMENT_LEFT, -1, defaultFontSize);
[/csharp]
[/codeblocks]
- See also [method Font.draw_string].
+ See also [method FontConfig.draw_string].
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Draws [code]text[/code] outline using the specified [code]font[/code] at the [code]position[/code] (bottom-left corner using the baseline of the font). The text will have its color multiplied by [code]modulate[/code]. If [code]clip_w[/code] is greater than or equal to 0, the text will be clipped if it exceeds the specified width.
diff --git a/doc/classes/CheckBox.xml b/doc/classes/CheckBox.xml
index 6483faf7632b..70e3164ed7e3 100644
--- a/doc/classes/CheckBox.xml
+++ b/doc/classes/CheckBox.xml
@@ -44,8 +44,8 @@
The size of the text outline.
-
- The [Font] to use for the [CheckBox] text.
+
+ The [FontConfig] to use for the [CheckBox] text.
Font size of the [CheckBox]'s text.
diff --git a/doc/classes/CheckButton.xml b/doc/classes/CheckButton.xml
index 51b0411f4e54..717c272ee54f 100644
--- a/doc/classes/CheckButton.xml
+++ b/doc/classes/CheckButton.xml
@@ -44,8 +44,8 @@
The size of the text outline.
-
- The [Font] to use for the [CheckButton] text.
+
+ The [FontConfig] to use for the [CheckButton] text.
Font size of the [CheckButton]'s text.
diff --git a/doc/classes/CodeEdit.xml b/doc/classes/CodeEdit.xml
index 7ca27a35feb1..2e6d8b402e97 100644
--- a/doc/classes/CodeEdit.xml
+++ b/doc/classes/CodeEdit.xml
@@ -649,8 +649,8 @@
The size of the text outline.
-
- Sets the default [Font].
+
+ Sets the default [FontConfig].
Sets default font size.
diff --git a/doc/classes/ColorPickerButton.xml b/doc/classes/ColorPickerButton.xml
index 53d35c1a3d27..33ebdf2be193 100644
--- a/doc/classes/ColorPickerButton.xml
+++ b/doc/classes/ColorPickerButton.xml
@@ -80,8 +80,8 @@
The size of the text outline.
-
- [Font] of the [ColorPickerButton]'s text.
+
+ [FontConfig] of the [ColorPickerButton]'s text.
Font size of the [ColorPickerButton]'s text.
diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml
index 2828896eacd9..99795600d2f6 100644
--- a/doc/classes/Control.xml
+++ b/doc/classes/Control.xml
@@ -250,9 +250,9 @@
-
+
- Creates a local override for a theme [Font] with the specified [code]name[/code]. Local overrides always take precedence when fetching theme items for the control. An override can be removed with [method remove_theme_font_override].
+ Creates a local override for a theme [FontConfig] with the specified [code]name[/code]. Local overrides always take precedence when fetching theme items for the control. An override can be removed with [method remove_theme_font_override].
See also [method get_theme_font].
@@ -474,7 +474,7 @@
-
+
Returns the default font from the first matching [Theme] in the tree if that [Theme] has a valid [member Theme.default_font] value.
See [method get_theme_color] for details.
@@ -488,11 +488,11 @@
-
+
- Returns a [Font] from the first matching [Theme] in the tree if that [Theme] has a font item with the specified [code]name[/code] and [code]theme_type[/code].
+ Returns a [FontConfig] from the first matching [Theme] in the tree if that [Theme] has a font item with the specified [code]name[/code] and [code]theme_type[/code].
See [method get_theme_color] for details.
@@ -607,7 +607,7 @@
- Returns [code]true[/code] if there is a local override for a theme [Font] with the specified [code]name[/code] in this [Control] node.
+ Returns [code]true[/code] if there is a local override for a theme [FontConfig] with the specified [code]name[/code] in this [Control] node.
See [method add_theme_font_override].
@@ -699,7 +699,7 @@
- Removes a local override for a theme [Font] with the specified [code]name[/code] previously added by [method add_theme_font_override] or via the Inspector dock.
+ Removes a local override for a theme [FontConfig] with the specified [code]name[/code] previously added by [method add_theme_font_override] or via the Inspector dock.
diff --git a/doc/classes/EditorFontPicker.xml b/doc/classes/EditorFontPicker.xml
new file mode 100644
index 000000000000..b7c139549e90
--- /dev/null
+++ b/doc/classes/EditorFontPicker.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/doc/classes/Font.xml b/doc/classes/Font.xml
index dae42ddf3461..bca3b298d934 100644
--- a/doc/classes/Font.xml
+++ b/doc/classes/Font.xml
@@ -1,243 +1,315 @@
- Font class is set of font data sources used to draw text.
+ Font source data and prerendered glyph cache, imported from dynamic or bitmap font.
- Font contains a set of glyphs to represent Unicode characters, as well as the ability to draw it with variable width, ascent, descent and kerning.
+ [Font] contains a set of glyphs to represent Unicode characters imported from a font file, as well as a cache of rasterized glyphs, and a set of fallback [Font]s to use.
+ Use [FontConfig] to access specific OpenType variation of the font, create simulated bold / slanted version, and draw lines of text.
+ For more complex text processing, use [FontConfig] in conjunction with [TextLine] or [TextParagraph].
+ Supported font formats:
+ - Dynamic font importer: TrueType (.ttf), TrueType collection (.ttc), OpenType (.otf), OpenType collection (.otc), WOFF (.woff), WOFF2 (.woff2), Type 1 (.pfb, .pfm).
+ - Bitmap font importer: AngelCode BMFont (.fnt, .font), text and binary (version 3) format variants.
+ - Monospace image font importer: All supported image formats.
[b]Note:[/b] A character is a symbol that represents an item (letter, digit etc.) in an abstract way.
[b]Note:[/b] A glyph is a bitmap or shape used to draw a one or more characters in a context-dependent manner. Glyph indices are bound to the specific font data source.
- [b]Note:[/b] If a non of the font data sources contain glyphs for a character used in a string, the character in question will be replaced with a box displaying its hexadecimal code.
- [codeblocks]
- [gdscript]
- var font = Font.new()
- font.add_data(load("res://BarlowCondensed-Bold.ttf"))
- $"Label".set("custom_fonts/font", font)
- $"Label".set("custom_fonts/font_size", 64)
- [/gdscript]
- [csharp]
- var font = new Font();
- font.AddData(ResourceLoader.Load<FontData>("res://BarlowCondensed-Bold.ttf"));
- GetNode("Label").Set("custom_fonts/font", font);
- GetNode("Label").Set("custom_font_sizes/font_size", 64);
- [/csharp]
- [/codeblocks]
- To control font substitution priority use [FontData] language and script support.
- Use language overrides to use same [Font] stack for multiple languages:
- [codeblocks]
- [gdscript]
- # Use Naskh font for Persian and Nastaʼlīq font for Urdu text.
- var font_data_fa = load("res://NotoNaskhArabicUI_Regular.ttf");
- font_data_fa.set_language_support_override("fa", true);
- font_data_fa.set_language_support_override("ur", false);
-
- var font_data_ur = load("res://NotoNastaliqUrdu_Regular.ttf");
- font_data_ur.set_language_support_override("fa", false);
- font_data_ur.set_language_support_override("ur", true);
- [/gdscript]
- [csharp]
- // Use Naskh font for Persian and Nastaʼlīq font for Urdu text.
- var fontDataFA = ResourceLoader.Load<FontData>("res://NotoNaskhArabicUI_Regular.ttf");
- fontDataFA.SetLanguageSupportOverride("fa", true);
- fontDataFA.SetLanguageSupportOverride("ur", false);
-
- var fontDataUR = ResourceLoader.Load<FontData>("res://NotoNastaliqUrdu_Regular.ttf");
- fontDataUR.SetLanguageSupportOverride("fa", false);
- fontDataUR.SetLanguageSupportOverride("ur", true);
- [/csharp]
- [/codeblocks]
- Use script overrides to specify supported scripts for bitmap font or for less common scripts not directly supported by TrueType format:
- [codeblocks]
- [gdscript]
- # Use specified font for Egyptian hieroglyphs.
- var font_data = load("res://unifont.ttf");
- font_data.set_script_support_override("Egyp", true);
- [/gdscript]
- [csharp]
- // Use specified font for Egyptian hieroglyphs.
- var fontData = ResourceLoader.Load<FontData>("res://unifont.ttf");
- fontData.SetScriptSupportOverride("Egyp", true);
- [/csharp]
- [/codeblocks]
+ [b]Note:[/b] If a none of the font data sources contain glyphs for a character used in a string, the character in question will be replaced with a box displaying its hexadecimal code.
-
+
-
- Add font data source to the set.
+ Removes all font cache entries.
-
+
+
+
- Removes all font data sourcers for the set.
+ Removes all rendered glyphs information from the cache entry.
+ [b]Note:[/b] This function will not remove textures associated with the glyphs, use [method remove_texture] to remove them manually.
-
-
-
-
-
-
-
-
-
-
-
- Draw a single Unicode character [code]char[/code] into a canvas item using the font, at a given position, with [code]modulate[/code] color, and optionally kerning if [code]next[/code] is passed. [code]position[/code] specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis.
- [b]Note:[/b] Do not use this function to draw strings character by character, use [method draw_string] or [TextLine] instead.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Breaks [code]text[/code] to the lines using rules specified by [code]flags[/code] and draws it into a canvas item using the font, at a given position, with [code]modulate[/code] color, optionally clipping the width and aligning horizontally. [code]position[/code] specifies the baseline of the first line, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis.
- See also [method CanvasItem.draw_multiline_string].
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Draw [code]text[/code] into a canvas item using the font, at a given position, with [code]modulate[/code] color, optionally clipping the width and aligning horizontally. [code]position[/code] specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis.
- See also [method CanvasItem.draw_string].
+
+
+
+
+
+ Removes all kerning overrides.
-
-
-
+
+
+
- Returns the average font ascent (number of pixels above the baseline).
- [b]Note:[/b] Real ascent of the string is context-dependent and can be significantly different from the value returned by this function. Use it only as rough estimate (e.g. as the ascent of empty line).
+ Removes all font sizes from the cache entry
-
-
-
-
-
+
+
+
+
- Returns the size of a character, optionally taking kerning into account if the next character is provided.
- [b]Note:[/b] Do not use this function to calculate width of the string character by character, use [method get_string_size] or [TextLine] instead. The height returned is the font height (see also [method get_height]) and has no relation to the glyph height.
+ Removes all textures from font cache entry.
+ [b]Note:[/b] This function will not remove glyphs associated with the texture, use [method remove_glyph] to remove them manually.
-
-
-
+
+
+
+
+
+
- Returns the font data source at index [code]idx[/code]. If the index does not exist, returns [code]null[/code].
+ Returns existing or creates a new font cache entry for the specified variation.
-
+
+
+
+
+
+ Returns the font ascent (number of pixels above the baseline).
+
+
+
- Returns the number of font data sources.
+ Returns number of the font cache entries.
-
+
-
+
- Returns TextServer RID of the font data resources.
+ Returns text server font cache entry resource id.
-
+
+
- Returns the average font descent (number of pixels below the baseline).
- [b]Note:[/b] Real descent of the string is context-dependent and can be significantly different from the value returned by this function. Use it only as rough estimate (e.g. as the descent of empty line).
+ Returns font descent (number of pixels below the baseline).
-
+
-
+
- Returns the total average font height (ascent plus descent) in pixels.
- [b]Note:[/b] Real height of the string is context-dependent and can be significantly different from the value returned by this function. Use it only as rough estimate (e.g. as the height of empty line).
+ Returns embolden strength, if is not equal to zero, emboldens the font outlines. Negative values reduce the outline thickness.
-
+
+
+
+ Returns number of faces in the TrueType / OpenType collection.
+
+
+
+
+
+
+ Recturns an active face index in the TrueType / OpenType collection.
+
+
+
-
-
-
-
+
+
+
+
+ Returns glyph advance (offset of the next glyph).
+ [b]Note:[/b] Advance for glyphs outlines is the same as the base glyph advance and is not saved.
+
+
+
+
+
+
+
- Returns the size of a bounding box of a string broken into the lines, taking kerning and advance into account.
- See also [method draw_multiline_string].
+ Returns the glyph index of a [code]char[/code], optionally modified by the [code]variation_selector[/code].
-
+
+
+
- Returns [Array] of valid [FontData] [RID]s, which can be passed to the [TextServer] methods.
+ Returns list of rendered glyphs in the cache entry.
-
+
+
+
+
+
+
+ Returns glyph offset from the baseline.
+
+
+
+
+
+
+
+
+ Returns glyph size.
+
+
+
-
+
+
+
+
+ Returns index of the cache texture containing the glyph.
+
+
+
+
+
+
+
- Returns the spacing for the given [code]type[/code] (see [enum TextServer.SpacingType]).
+ Returns rectangle in the cache texture containing the glyph.
-
+
-
-
-
-
-
+
+
+
+
+ Returns kerning for the pair of glyphs.
+
+
+
+
+
+
+
+ Returns list of the kerning overrides.
+
+
+
+
+
+
+ Returns [code]true[/code] if support override is enabled for the [code]language[/code].
+
+
+
+
+
+ Returns list of language support overrides.
+
+
+
+
+
+
- Returns the size of a bounding box of a string, taking kerning and advance into account.
- [b]Note:[/b] Real height of the string is context-dependent and can be significantly different from the value returned by [method get_height].
- See also [method draw_string].
+ Returns scaling factor of the color bitmap font.
+
+
+
+
+
+
+ Returns [code]true[/code] if support override is enabled for the [code]script[/code].
+
+
+
+
+
+ Returns list of script support overrides.
+
+
+
+
+
+
+ Returns list of the font sizes in the cache. Each size is [code]Vector2i[/code] with font size and outline size.
Returns a string containing all the characters available in the font.
- If a given character is included in more than one font data source, it appears only once in the returned string.
+
+
+
+
+
+ Returns list of OpenType features supported by font.
+
+
+
+
+
+ Returns list of supported [url=https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg]variation coordinates[/url], each coordinate is returned as [code]tag: Vector3i(min_value,max_value,default_value)[/code].
+ Font variations allow for continuous change of glyph characteristics along some given design axis, such as weight, width or slant.
+
+
+
+
+
+
+
+ Returns number of textures used by font cache entry.
+
+
+
+
+
+
+
+
+ Returns a copy of the font cache texture image.
+
+
+
+
+
+
+
+
+ Returns a copy of the array containing the first free pixel in the each column of texture. Should be the same size as texture width or empty.
+
+
+
+
+
+
+ Returns 2D transform, applied to the font outlines, can be used for slanting, flipping and rotating glyphs.
-
+
+
- Returns average pixel offset of the underline below the baseline.
- [b]Note:[/b] Real underline position of the string is context-dependent and can be significantly different from the value returned by this function. Use it only as rough estimate.
+ Returns pixel offset of the underline below the baseline.
-
+
+
+
+ Returns thickness of the underline in pixels.
+
+
+
+
+
- Returns average thickness of the underline.
- [b]Note:[/b] Real underline thickness of the string is context-dependent and can be significantly different from the value returned by this function. Use it only as rough estimate.
+ Returns variation coordinates for the specified font cache entry. See [method get_supported_variation_list] for more info.
@@ -247,45 +319,336 @@
Returns [code]true[/code] if a Unicode [code]char[/code] is available in the font.
-
+
+
+
+
+ Returns [code]true[/code], if font supports given language ([url=https://en.wikipedia.org/wiki/ISO_639-1]ISO 639[/url] code).
+
+
+
+
+
+
+ Returns [code]true[/code], if font supports given script ([url=https://en.wikipedia.org/wiki/ISO_15924]ISO 15924[/url] code).
+
+
+
+
+
+
+ Loads an AngelCode BMFont (.fnt, .font) bitmap font from file [code]path[/code].
+ [b]Warning:[/b] This method should only be used in the editor or in cases when you need to load external fonts at run-time, such as fonts located at the [code]user://[/code] directory.
+
+
+
+
+
+
+ Loads a TrueType (.ttf), OpenType (.otf), WOFF (.woff), WOFF2 (.woff2) or Type 1 (.pfb, .pfm) dynamic font from file [code]path[/code].
+ [b]Warning:[/b] This method should only be used in the editor or in cases when you need to load external fonts at run-time, such as fonts located at the [code]user://[/code] directory.
+
+
+
+
+
+
+ Removes specified font cache entry.
+
+
+
-
+
+
+
- Removes the font data source at index [code]idx[/code]. If the index does not exist, nothing happens.
+ Removes specified rendered glyph information from the cache entry.
+ [b]Note:[/b] This function will not remove textures associated with the glyphs, use [method remove_texture] to remove them manually.
-
+
-
-
+
+
+
- Sets the font data source at index [code]idx[/code]. If the index does not exist, nothing happens.
+ Removes kerning override for the pair of glyphs.
-
+
-
-
+
- Sets the spacing for [code]type[/code] (see [enum TextServer.SpacingType]) to [code]value[/code] in pixels (not relative to the font size).
+ Remove language support override.
-
+
+
- After editing a font (changing data sources, etc.). Call this function to propagate changes to controls that might use it.
+ Removes script support override.
+
+
+
+
+
+
+
+ Removes specified font size from the cache entry.
+
+
+
+
+
+
+
+
+ Removes specified texture from the cache entry.
+ [b]Note:[/b] This function will not remove glyphs associated with the texture. Remove them manually using [method remove_glyph].
+
+
+
+
+
+
+
+
+ Renders specified glyph to the font cache texture.
+
+
+
+
+
+
+
+
+
+ Renders the range of characters to the font cache texture.
+
+
+
+
+
+
+
+
+ Sets the font ascent (number of pixels above the baseline).
+
+
+
+
+
+
+
+
+ Sets the font descent (number of pixels below the baseline).
+
+
+
+
+
+
+
+ Sets embolden strength, if is not equal to zero, emboldens the font outlines. Negative values reduce the outline thickness.
+
+
+
+
+
+
+
+ Sets an active face index in the TrueType / OpenType collection.
+
+
+
+
+
+
+
+
+
+ Sets glyph advance (offset of the next glyph).
+ [b]Note:[/b] Advance for glyphs outlines is the same as the base glyph advance and is not saved.
+
+
+
+
+
+
+
+
+
+ Sets glyph offset from the baseline.
+
+
+
+
+
+
+
+
+
+ Sets glyph size.
+
+
+
+
+
+
+
+
+
+ Sets index of the cache texture containing the glyph.
+
+
+
+
+
+
+
+
+
+ Sets rectangle in the cache texture containing the glyph.
+
+
+
+
+
+
+
+
+
+ Sets kerning for the pair of glyphs.
+
+
+
+
+
+
+
+ Adds override for [method is_language_supported].
+
+
+
+
+
+
+
+
+ Sets scaling factor of the color bitmap font.
+
+
+
+
+
+
+
+ Adds override for [method is_script_supported].
+
+
+
+
+
+
+
+
+
+ Sets font cache texture image.
+
+
+
+
+
+
+
+
+
+ Sets array containing the first free pixel in the each column of texture. Should be the same size as texture width or empty (for the fonts without dynamic glyph generation support).
+
+
+
+
+
+
+
+ Sets 2D transform, applied to the font outlines, can be used for slanting, flipping and rotating glyphs.
+
+
+
+
+
+
+
+
+ Sets pixel offset of the underline below the baseline.
+
+
+
+
+
+
+
+
+ Sets thickness of the underline in pixels.
+
+
+
+
+
+
+
+ Sets variation coordinates for the specified font cache entry. See [method get_supported_variation_list] for more info.
-
- Extra spacing at the bottom of the line in pixels.
+
+ If set to [code]true[/code], font 8-bit anitialiased glyph rendering is supported and enabled.
+
+
+ Contents of the dynamic font source file.
+
+
+ Array of fallback [Font]s.
+
+
+ Font size, used only for the bitmap fonts.
+
+
+ Font family name.
+
+
+ Font style flags, see [enum TextServer.FontStyle].
+
+
+ If set to [code]true[/code], auto-hinting is supported and preferred over font built-in hinting. Used by dynamic fonts only.
+
+
+ If set to [code]true[/code], generate mipmaps for the font textures.
+
+
+ Font hinting mode. Used by dynamic fonts only.
+
+
+ The width of the range around the shape between the minimum and maximum representable signed distance.
+
+
+ Source font size used to generate MSDF textures.
+
+
+ If set to [code]true[/code], glyphs of all sizes are rendered using single multichannel signed distance field generated from the dynamic font vector data.
+
+
+ Font OpenType feature set override.
+
+
+ Font oversampling factor, if set to [code]0.0[/code] global oversampling factor is used instead. Used by dynamic fonts only.
-
- Extra spacing at the top of the line in pixels.
+
+ Font style name.
-
- Default font [url=https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg]variation coordinates[/url].
+
+ Font glyph sub-pixel positioning mode. Subpixel positioning provides shaper text and better kerning for smaller font sizes, at the cost of memory usage and font rasterization speed. Use [constant TextServer.SUBPIXEL_POSITIONING_AUTO] to automatically enable it based on the font size.
diff --git a/doc/classes/FontConfig.xml b/doc/classes/FontConfig.xml
new file mode 100644
index 000000000000..034a2b1e89d8
--- /dev/null
+++ b/doc/classes/FontConfig.xml
@@ -0,0 +1,301 @@
+
+
+
+ Font configuration resource used to draw text.
+
+
+ Font configuration contains font properties that can be set without reloading [Font], like OpenType variations/features and simulated bold / slant and extra spacing, as well as methods to draw lines of text.
+ [FontConfig] can be used to easily access multiple variants of the [Font] without duplicating cached font data.
+ [codeblocks]
+ [gdscript]
+ var fc = FontConfig.new()
+ fc.set_font(load("res://BarlowCondensed-Bold.ttf"))
+ $"Label".set("custom_fonts/font", fc)
+ $"Label".set("custom_fonts/font_size", 64)
+ [/gdscript]
+ [csharp]
+ var fc = new FontConfig();
+ fc.SetFont(ResourceLoader.Load<Font>("res://BarlowCondensed-Bold.ttf"));
+ GetNode("Label").Set("custom_fonts/font", fc);
+ GetNode("Label").Set("custom_font_sizes/font_size", 64);
+ [/csharp]
+ [/codeblocks]
+ To use simulated bold font variant:
+ [codeblocks]
+ [gdscript]
+ var fc = FontConfig.new()
+ fc.set_font(load("res://BarlowCondensed-Regular.ttf"))
+ fc.set_variation_embolden(1.2);
+ $"Label".set("custom_fonts/font", fc)
+ $"Label".set("custom_fonts/font_size", 64)
+ [/gdscript]
+ [csharp]
+ var fc = new FontConfig();
+ fc.SetFont(ResourceLoader.Load<Font>("res://BarlowCondensed-Regular.ttf"));
+ fc.SetVariationEmbolden(1.2);
+ GetNode("Label").Set("custom_fonts/font", fc);
+ GetNode("Label").Set("custom_font_sizes/font_size", 64);
+ [/csharp]
+ [/codeblocks]
+
+
+
+
+
+
+
+
+
+
+
+
+ Draw a single Unicode character [code]char[/code] into a canvas item using the font, at a given position, with [code]modulate[/code] color. [code]position[/code] specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis.
+ [b]Note:[/b] Do not use this function to draw strings character by character, use [method draw_string] or [TextLine] instead.
+
+
+
+
+
+
+
+
+
+
+
+ Draw a single Unicode character [code]char[/code] outline into a canvas item using the font, at a given position, with [code]modulate[/code] color and [code]size[/code] outline size. [code]position[/code] specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis.
+ [b]Note:[/b] Do not use this function to draw strings character by character, use [method draw_string] or [TextLine] instead.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Breaks [code]text[/code] to the lines using rules specified by [code]flags[/code] and draws it into a canvas item using the font, at a given position, with [code]modulate[/code] color, optionally clipping the width and aligning horizontally. [code]position[/code] specifies the baseline of the first line, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis.
+ See also [method CanvasItem.draw_multiline_string].
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Breaks [code]text[/code] to the lines using rules specified by [code]flags[/code] and draws text outline into a canvas item using the font, at a given position, with [code]modulate[/code] color and [code]size[/code] outline size, optionally clipping the width and aligning horizontally. [code]position[/code] specifies the baseline of the first line, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis.
+ See also [method CanvasItem.draw_multiline_string_outline].
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Draw [code]text[/code] into a canvas item using the font, at a given position, with [code]modulate[/code] color, optionally clipping the width and aligning horizontally. [code]position[/code] specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis.
+ See also [method CanvasItem.draw_string].
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Draw [code]text[/code] outline into a canvas item using the font, at a given position, with [code]modulate[/code] color and [code]size[/code] outline size, optionally clipping the width and aligning horizontally. [code]position[/code] specifies the baseline, not the top. To draw from the top, [i]ascent[/i] must be added to the Y axis.
+ See also [method CanvasItem.draw_string_outline].
+
+
+
+
+
+
+ Returns the average font ascent (number of pixels above the baseline).
+ [b]Note:[/b] Real ascent of the string is context-dependent and can be significantly different from the value returned by this function. Use it only as rough estimate (e.g. as the ascent of empty line).
+
+
+
+
+
+
+
+ Returns the size of a character, optionally taking kerning into account if the next character is provided.
+ [b]Note:[/b] Do not use this function to calculate width of the string character by character, use [method get_string_size] or [TextLine] instead. The height returned is the font height (see also [method get_height]) and has no relation to the glyph height.
+
+
+
+
+
+
+ Returns the average font descent (number of pixels below the baseline).
+ [b]Note:[/b] Real descent of the string is context-dependent and can be significantly different from the value returned by this function. Use it only as rough estimate (e.g. as the descent of empty line).
+
+
+
+
+
+
+ Returns the total average font height (ascent plus descent) in pixels.
+ [b]Note:[/b] Real height of the string is context-dependent and can be significantly different from the value returned by this function. Use it only as rough estimate (e.g. as the height of empty line).
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Returns the size of a bounding box of a string broken into the lines, taking kerning and advance into account.
+ See also [method draw_multiline_string].
+
+
+
+
+
+ Returns [Array] of valid [Font] [RID]s, which can be passed to the [TextServer] methods.
+
+
+
+
+
+
+ Returns the spacing for the given [code]type[/code] (see [enum TextServer.SpacingType]).
+
+
+
+
+
+
+
+
+
+
+
+
+ Returns the size of a bounding box of a string, taking kerning and advance into account.
+ [b]Note:[/b] Real height of the string is context-dependent and can be significantly different from the value returned by [method get_height].
+ See also [method draw_string].
+
+
+
+
+
+ Returns a string containing all the characters available in the font.
+ If a given character is included in more than one font data source, it appears only once in the returned string.
+
+
+
+
+
+
+ Returns average pixel offset of the underline below the baseline.
+ [b]Note:[/b] Real underline position of the string is context-dependent and can be significantly different from the value returned by this function. Use it only as rough estimate.
+
+
+
+
+
+
+ Returns average thickness of the underline.
+ [b]Note:[/b] Real underline thickness of the string is context-dependent and can be significantly different from the value returned by this function. Use it only as rough estimate.
+
+
+
+
+
+
+ Returns [code]true[/code] if a Unicode [code]char[/code] is available in the font.
+
+
+
+
+
+
+
+ Sets LRU cache capacity for [code]draw_*[/code] methods.
+
+
+
+
+
+
+
+ Sets the spacing for [code]type[/code] (see [enum TextServer.SpacingType]) to [code]value[/code] in pixels (not relative to the font size).
+
+
+
+
+
+ Font, imported from a TrueType, OpenType, WOFF, WOFF2, Type 1, AngelCode BMFont font file or image.
+
+
+ A set of OpenType feature tags. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
+
+
+ Extra spacing at the bottom of the line in pixels.
+
+
+ Extra spacing between graphical glyphs.
+
+
+ Extra width of the space glyphs.
+
+
+ Extra spacing at the top of the line in pixels.
+
+
+ If set to [code]true[/code], different set of variations can be set for each fallback font.
+
+
+ If is not equal to zero, emboldens the font outlines. Negative values reduce the outline thickness.
+ [b]Note:[/b] Emboldened fonts might have self-intersecting outlines, which will prevent MSDF fonts and [TextMesh] from working correctly.
+
+
+ Active face index in the TrueType / OpenType collection file.
+
+
+ Font OpenType variation coordinates. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg]OpenType variation tags[/url].
+
+
+ 2D transform, applied to the font outlines, can be used for slanting, flipping and rotating glyphs.
+ For example, to simulate italic typeface by slanting, apply the following transform [code]Transform2D(1.0, slant, 0.0, 1.0, 0.0, 0.0)[/code].
+
+
+
diff --git a/doc/classes/FontData.xml b/doc/classes/FontData.xml
deleted file mode 100644
index d32e7b3a9475..000000000000
--- a/doc/classes/FontData.xml
+++ /dev/null
@@ -1,627 +0,0 @@
-
-
-
- Font source data and prerendered glyph cache, imported from dynamic or bitmap font.
- Supported font formats:
- - Dynamic font importer: TrueType (.ttf), TrueType collection (.ttc), OpenType (.otf), OpenType collection (.otc), WOFF (.woff), WOFF2 (.woff2), Type 1 (.pfb, .pfm).
- - Bitmap font importer: AngelCode BMFont (.fnt, .font), text and binary (version 3) format variants.
- - Monospace image font importer: All supported image formats.
-
-
-
-
-
-
-
-
-
- Removes all font cache entries.
-
-
-
-
-
-
-
- Removes all rendered glyphs information from the cache entry.
- [b]Note:[/b] This function will not remove textures associated with the glyphs, use [method remove_texture] to remove them manually.
-
-
-
-
-
-
-
- Removes all kerning overrides.
-
-
-
-
-
-
- Removes all font sizes from the cache entry
-
-
-
-
-
-
-
- Removes all textures from font cache entry.
- [b]Note:[/b] This function will not remove glyphs associated with the texture, use [method remove_glyph] to remove them manually.
-
-
-
-
-
-
- Returns existing or creates a new font cache entry for the specified variation coordinates.
-
-
-
-
-
-
-
- Returns the font ascent (number of pixels above the baseline).
-
-
-
-
-
- Returns number of the font cache entries.
-
-
-
-
-
-
- Returns text server font cache entry resource id.
-
-
-
-
-
-
-
- Returns font descent (number of pixels below the baseline).
-
-
-
-
-
- Returns number of faces in the TrueType / OpenType collection.
-
-
-
-
-
-
-
-
- Returns glyph advance (offset of the next glyph).
- [b]Note:[/b] Advance for glyphs outlines is the same as the base glyph advance and is not saved.
-
-
-
-
-
-
-
-
- Returns the glyph index of a [code]char[/code], optionally modified by the [code]variation_selector[/code].
-
-
-
-
-
-
-
- Returns list of rendered glyphs in the cache entry.
-
-
-
-
-
-
-
-
- Returns glyph offset from the baseline.
-
-
-
-
-
-
-
-
- Returns glyph size.
-
-
-
-
-
-
-
-
- Returns index of the cache texture containing the glyph.
-
-
-
-
-
-
-
-
- Returns rectangle in the cache texture containing the glyph.
-
-
-
-
-
-
-
-
- Returns kerning for the pair of glyphs.
-
-
-
-
-
-
-
- Returns list of the kerning overrides.
-
-
-
-
-
-
- Returns [code]true[/code] if support override is enabled for the [code]language[/code].
-
-
-
-
-
- Returns list of language support overrides.
-
-
-
-
-
-
-
- Returns scaling factor of the color bitmap font.
-
-
-
-
-
-
- Returns [code]true[/code] if support override is enabled for the [code]script[/code].
-
-
-
-
-
- Returns list of script support overrides.
-
-
-
-
-
-
- Returns list of the font sizes in the cache. Each size is [code]Vector2i[/code] with font size and outline size.
-
-
-
-
-
-
-
-
- Returns extra spacing added between glyphs in pixels.
-
-
-
-
-
- Returns a string containing all the characters available in the font.
-
-
-
-
-
- Returns list of OpenType features supported by font.
-
-
-
-
-
- Returns list of supported [url=https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg]variation coordinates[/url], each coordinate is returned as [code]tag: Vector3i(min_value,max_value,default_value)[/code].
- Font variations allow for continuous change of glyph characteristics along some given design axis, such as weight, width or slant.
-
-
-
-
-
-
-
- Returns number of textures used by font cache entry.
-
-
-
-
-
-
-
-
- Returns a copy of the font cache texture image.
-
-
-
-
-
-
-
-
- Returns a copy of the array containing the first free pixel in the each column of texture. Should be the same size as texture width or empty.
-
-
-
-
-
-
-
- Returns pixel offset of the underline below the baseline.
-
-
-
-
-
-
-
- Returns thickness of the underline in pixels.
-
-
-
-
-
-
- Returns variation coordinates for the specified font cache entry. See [method get_supported_variation_list] for more info.
-
-
-
-
-
-
- Returns [code]true[/code] if a Unicode [code]char[/code] is available in the font.
-
-
-
-
-
-
- Returns [code]true[/code], if font supports given language ([url=https://en.wikipedia.org/wiki/ISO_639-1]ISO 639[/url] code).
-
-
-
-
-
-
- Returns [code]true[/code], if font supports given script ([url=https://en.wikipedia.org/wiki/ISO_15924]ISO 15924[/url] code).
-
-
-
-
-
-
- Loads an AngelCode BMFont (.fnt, .font) bitmap font from file [code]path[/code].
- [b]Warning:[/b] This method should only be used in the editor or in cases when you need to load external fonts at run-time, such as fonts located at the [code]user://[/code] directory.
-
-
-
-
-
-
- Loads a TrueType (.ttf), TrueType collection (.ttc), OpenType (.otf), OpenType collection (.otc), WOFF (.woff), WOFF2 (.woff2) or Type 1 (.pfb, .pfm) dynamic font from file [code]path[/code].
- [b]Note:[/b] Use [member face_index] to select specific face from the collection file.
- [b]Warning:[/b] This method should only be used in the editor or in cases when you need to load external fonts at run-time, such as fonts located at the [code]user://[/code] directory.
-
-
-
-
-
-
- Removes specified font cache entry.
-
-
-
-
-
-
-
-
- Removes specified rendered glyph information from the cache entry.
- [b]Note:[/b] This function will not remove textures associated with the glyphs, use [method remove_texture] to remove them manually.
-
-
-
-
-
-
-
-
- Removes kerning override for the pair of glyphs.
-
-
-
-
-
-
- Remove language support override.
-
-
-
-
-
-
- Removes script support override.
-
-
-
-
-
-
-
- Removes specified font size from the cache entry.
-
-
-
-
-
-
-
-
- Removes specified texture from font cache entry.
- [b]Note:[/b] This function will not remove glyphs associated with the texture, remove them manually, using [method remove_glyph].
-
-
-
-
-
-
-
-
- Renders specified glyph the the font cache texture.
-
-
-
-
-
-
-
-
-
- Renders the range of characters to the font cache texture.
-
-
-
-
-
-
-
-
- Sets the font ascent (number of pixels above the baseline).
-
-
-
-
-
-
-
-
- Sets the font descent (number of pixels below the baseline).
-
-
-
-
-
-
-
-
-
- Sets glyph advance (offset of the next glyph).
- [b]Note:[/b] Advance for glyphs outlines is the same as the base glyph advance and is not saved.
-
-
-
-
-
-
-
-
-
- Sets glyph offset from the baseline.
-
-
-
-
-
-
-
-
-
- Sets glyph size.
-
-
-
-
-
-
-
-
-
- Sets index of the cache texture containing the glyph.
-
-
-
-
-
-
-
-
-
- Sets rectangle in the cache texture containing the glyph.
-
-
-
-
-
-
-
-
-
- Sets kerning for the pair of glyphs.
-
-
-
-
-
-
-
- Adds override for [method is_language_supported].
-
-
-
-
-
-
-
-
- Sets scaling factor of the color bitmap font.
-
-
-
-
-
-
-
- Adds override for [method is_script_supported].
-
-
-
-
-
-
-
-
-
- Sets extra spacing added between glyphs in pixels.
-
-
-
-
-
-
-
-
-
- Sets font cache texture image.
-
-
-
-
-
-
-
-
-
- Sets array containing the first free pixel in the each column of texture. Should be the same size as texture width or empty (for the fonts without dynamic glyph generation support).
-
-
-
-
-
-
-
-
- Sets pixel offset of the underline below the baseline.
-
-
-
-
-
-
-
-
- Sets thickness of the underline in pixels.
-
-
-
-
-
-
-
- Sets variation coordinates for the specified font cache entry. See [method get_supported_variation_list] for more info.
-
-
-
-
-
- If set to [code]true[/code], font 8-bit anitialiased glyph rendering is supported and enabled.
-
-
- Contents of the dynamic font source file.
-
-
- If is not equal to zero, emboldens the font outlines. Negative values reduce the outline thickness.
-
-
- Active face index in the TrueType / OpenType collection file.
-
-
- Font size, used only for the bitmap fonts.
-
-
- Font family name.
-
-
- Font style flags, see [enum TextServer.FontStyle].
-
-
- If set to [code]true[/code], auto-hinting is supported and preferred over font built-in hinting. Used by dynamic fonts only.
-
-
- If set to [code]true[/code], generate mipmaps for the font textures.
-
-
- Font hinting mode. Used by dynamic fonts only.
-
-
- The width of the range around the shape between the minimum and maximum representable signed distance.
-
-
- Source font size used to generate MSDF textures.
-
-
- If set to [code]true[/code], glyphs of all sizes are rendered using single multichannel signed distance field generated from the dynamic font vector data.
-
-
- Font OpenType feature set override.
-
-
- Font oversampling factor, if set to [code]0.0[/code] global oversampling factor is used instead. Used by dynamic fonts only.
-
-
- Font style name.
-
-
- Font glyph sub-pixel positioning mode. Subpixel positioning provides shaper text and better kerning for smaller font sizes, at the cost of memory usage and font rasterization speed. Use [constant TextServer.SUBPIXEL_POSITIONING_AUTO] to automatically enable it based on the font size.
-
-
- 2D transform, applied to the font outlines, can be used for slanting, flipping and rotating glyphs.
- For example, to simulate italic typeface by slanting, apply the following transform [code]Transform2D(1.0, slant, 0.0, 1.0, 0.0, 0.0)[/code].
-
-
-
diff --git a/doc/classes/GraphNode.xml b/doc/classes/GraphNode.xml
index f261da8413e1..fc7e4c5ef3b6 100644
--- a/doc/classes/GraphNode.xml
+++ b/doc/classes/GraphNode.xml
@@ -17,12 +17,6 @@
Disables all input and output slots of the GraphNode.
-
-
-
- Removes all OpenType features.
-
-
@@ -98,13 +92,6 @@
Returns the type of the output connection [code]idx[/code].
-
-
-
-
- Returns OpenType feature [code]tag[/code].
-
-
@@ -154,14 +141,6 @@
Returns [code]true[/code] if right (output) side of the slot [code]idx[/code] is enabled.
-
-
-
-
-
- Sets OpenType feature [code]tag[/code]. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
-
-
@@ -345,7 +324,7 @@
Vertical offset of the title text.
-
+
Font used for the title text.
diff --git a/doc/classes/ItemList.xml b/doc/classes/ItemList.xml
index 83e7eba5e57d..4c50ecaba621 100644
--- a/doc/classes/ItemList.xml
+++ b/doc/classes/ItemList.xml
@@ -37,13 +37,6 @@
Removes all items from the list.
-
-
-
-
- Removes all OpenType features from the item's text.
-
-
@@ -121,14 +114,6 @@
Returns the metadata value of the specified index.
-
-
-
-
-
- Returns OpenType feature [code]tag[/code] of the item's text.
-
-
@@ -301,15 +286,6 @@
Sets a value (of any type) to be stored with the item associated with the specified index.
-
-
-
-
-
-
- Sets OpenType feature [code]tag[/code] for the item's text. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
-
-
@@ -486,8 +462,8 @@
The vertical spacing between items.
-
- [Font] of the item's text.
+
+ [FontConfig] of the item's text.
Font size of the item's text.
diff --git a/doc/classes/Label.xml b/doc/classes/Label.xml
index d5744bbc42b2..b9355837b218 100644
--- a/doc/classes/Label.xml
+++ b/doc/classes/Label.xml
@@ -11,12 +11,6 @@
https://godotengine.org/asset-library/asset/515
-
-
-
- Removes all OpenType features.
-
-
@@ -32,13 +26,6 @@
If there're no lines returns font size in pixels.
-
-
-
-
- Returns OpenType feature [code]tag[/code].
-
-
@@ -51,14 +38,6 @@
Returns the number of lines shown. Useful if the [Label]'s height cannot currently display all lines.
-
-
-
-
-
- Returns OpenType feature [code]tag[/code]. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
-
-
@@ -163,7 +142,7 @@
Default text [Color] of the [Label].
- The tint of [Font]'s outline.
+ The tint of text outline.
[Color] of the text's shadow effect.
@@ -183,8 +162,8 @@
The size of the shadow outline.
-
- [Font] used for the [Label]'s text.
+
+ [FontConfig] used for the [Label]'s text.
Font size of the [Label]'s text.
diff --git a/doc/classes/Label3D.xml b/doc/classes/Label3D.xml
index c4d02e61013a..76df4ed64baf 100644
--- a/doc/classes/Label3D.xml
+++ b/doc/classes/Label3D.xml
@@ -9,12 +9,6 @@
-
-
-
- Removes all OpenType features.
-
-
@@ -28,13 +22,6 @@
Returns the value of the specified flag.
-
-
-
-
- Returns OpenType feature [code]tag[/code].
-
-
@@ -43,14 +30,6 @@
If [code]true[/code], the specified flag will be enabled. See [enum Label3D.DrawFlags] for a list of flags.
-
-
-
-
-
- Returns OpenType feature [code]tag[/code]. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
-
-
@@ -71,8 +50,8 @@
If [code]true[/code], the label is rendered at the same size regardless of distance.
-
- [Font] used for the [Label3D]'s text.
+
+ Font configuration used to display text.
Font size of the [Label3D]'s text.
@@ -96,7 +75,7 @@
The text drawing offset (in pixels).
- The tint of [Font]'s outline.
+ The tint of text outline.
Sets the render priority for the text outline. Higher priority objects will be sorted in front of lower priority objects.
diff --git a/doc/classes/LineEdit.xml b/doc/classes/LineEdit.xml
index 55e012ee0c4c..66514da1efd5 100644
--- a/doc/classes/LineEdit.xml
+++ b/doc/classes/LineEdit.xml
@@ -37,12 +37,6 @@
Erases the [LineEdit]'s [member text].
-
-
-
- Removes all OpenType features.
-
-
@@ -70,13 +64,6 @@
[b]Warning:[/b] This is a required internal node, removing and freeing it may cause a crash. If you wish to hide it or any of its children, use their [member Window.visible] property.
-
-
-
-
- Returns OpenType feature [code]tag[/code].
-
-
@@ -149,14 +136,6 @@
Selects the whole [String].
-
-
-
-
-
- Returns OpenType feature [code]tag[/code]. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
-
-
@@ -415,7 +394,7 @@
The size of the text outline.
-
+
Font used for the text.
diff --git a/doc/classes/LinkButton.xml b/doc/classes/LinkButton.xml
index ba80504caf1b..7ce58d550bf3 100644
--- a/doc/classes/LinkButton.xml
+++ b/doc/classes/LinkButton.xml
@@ -9,29 +9,6 @@
-
-
-
-
- Removes all OpenType features.
-
-
-
-
-
-
- Returns OpenType feature [code]tag[/code].
-
-
-
-
-
-
-
- Returns OpenType feature [code]tag[/code]. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
-
-
-
Language code used for line-breaking and text shaping algorithms, if left empty current locale is used instead.
@@ -85,8 +62,8 @@
The vertical space between the baseline of text and the underline.
-
- [Font] of the [LinkButton]'s text.
+
+ [FontConfig] of the [LinkButton]'s text.
Font size of the [LinkButton]'s text.
diff --git a/doc/classes/MenuButton.xml b/doc/classes/MenuButton.xml
index bec567b3efc3..dbf07591687e 100644
--- a/doc/classes/MenuButton.xml
+++ b/doc/classes/MenuButton.xml
@@ -70,8 +70,8 @@
The size of the text outline.
-
- [Font] of the [MenuButton]'s text.
+
+ [FontConfig] of the [MenuButton]'s text.
Font size of the [MenuButton]'s text.
diff --git a/doc/classes/OptionButton.xml b/doc/classes/OptionButton.xml
index a7b1f0ea33b0..1735188abbd5 100644
--- a/doc/classes/OptionButton.xml
+++ b/doc/classes/OptionButton.xml
@@ -244,8 +244,8 @@
The size of the text outline.
-
- [Font] of the [OptionButton]'s text.
+
+ [FontConfig] of the [OptionButton]'s text.
Font size of the [OptionButton]'s text.
diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml
index eb2b6810719c..f4950def12ab 100644
--- a/doc/classes/PopupMenu.xml
+++ b/doc/classes/PopupMenu.xml
@@ -181,13 +181,6 @@
Removes all items from the [PopupMenu].
-
-
-
-
- Removes all OpenType features form the item's text.
-
-
@@ -243,14 +236,6 @@
Returns the metadata of the specified item, which might be of any type. You can set it with [method set_item_metadata], which provides a simple way of assigning context data to items.
-
-
-
-
-
- Returns OpenType feature [code]tag[/code] of the item's text.
-
-
@@ -451,15 +436,6 @@
Sets the state of a multistate item. See [method add_multistate_item] for details.
-
-
-
-
-
-
- Sets OpenType feature [code]tag[/code] for the item's text. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
-
-
@@ -602,11 +578,11 @@
The vertical space between each menu item.
-
- [Font] used for the menu items.
+
+ [FontConfig] used for the menu items.
-
- [Font] used for the labeled separator.
+
+ [FontConfig] used for the labeled separator.
Font size of the labeled separator.
diff --git a/doc/classes/ProgressBar.xml b/doc/classes/ProgressBar.xml
index 8a781c51fb53..cfa5021922c6 100644
--- a/doc/classes/ProgressBar.xml
+++ b/doc/classes/ProgressBar.xml
@@ -43,7 +43,7 @@
The size of the text outline.
-
+
Font used to draw the fill percentage if [member percent_visible] is [code]true[/code].
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index 25f0a997bad1..171c8e03804a 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -587,7 +587,7 @@
Path to a custom [Font] resource to use as default for all GUI elements of the project.
- If set to [code]true[/code], default font uses 8-bit anitialiased glyph rendering. See [member FontData.antialiased].
+ If set to [code]true[/code], default font uses 8-bit anitialiased glyph rendering. See [member Font.antialiased].
If set to [code]true[/code], the default font will have mipmaps generated. This prevents text from looking grainy when a [Control] is scaled down, or when a [Label3D] is viewed from a long distance (if [member Label3D.texture_filter] is set to a mode that displays mipmaps).
@@ -595,7 +595,7 @@
[b]Note:[/b] This setting does not affect custom [Font]s used within the project.
- Default font hinting mode. See [member FontData.hinting].
+ Default font hinting mode. See [member Font.hinting].
If set to [code]true[/code], the default font will use multichannel signed distance field (MSDF) for crisp rendering at any size. Since this approach does not rely on rasterizing the font every time its size changes, this allows for resizing the font in real-time without any performance penalty. Text will also not look grainy for [Control]s that are scaled down (or for [Label3D]s viewed from a long distance).
@@ -603,7 +603,7 @@
[b]Note:[/b] This setting does not affect custom [Font]s used within the project.
- Default font glyph sub-pixel positioning mode. See [member FontData.subpixel_positioning].
+ Default font glyph sub-pixel positioning mode. See [member Font.subpixel_positioning].
diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml
index c5cc343fac03..1c11d5075481 100644
--- a/doc/classes/RichTextLabel.xml
+++ b/doc/classes/RichTextLabel.xml
@@ -252,7 +252,7 @@
-
+
@@ -271,23 +271,15 @@
-
+
Adds a [code][font][/code] tag to the tag stack. Overrides default fonts for its duration.
-
-
-
-
- Adds a [code][ot_feature][/code] tag to the tag stack. Overrides default OpenType font feature for its duration.
-
-
- Adds a [code][font_size][/code] tag to the tag stack. Overrides default font size for its duration.
@@ -700,19 +692,19 @@
The vertical separation of elements in a table.
-
+
The font used for bold text.
-
+
The font used for bold italics text.
-
+
The font used for italics text.
-
+
The font used for monospace text.
-
+
The default text font.
diff --git a/doc/classes/TabBar.xml b/doc/classes/TabBar.xml
index a8ed0d428694..a0ac27d8e470 100644
--- a/doc/classes/TabBar.xml
+++ b/doc/classes/TabBar.xml
@@ -17,13 +17,6 @@
Adds a new tab.
-
-
-
-
- Removes all OpenType features from the tab title.
-
-
@@ -77,14 +70,6 @@
Returns the number of hidden tabs offsetted to the left.
-
-
-
-
-
- Returns OpenType feature [code]tag[/code] of the tab title.
-
-
@@ -175,15 +160,6 @@
Sets language code of tab title used for line-breaking and text shaping algorithms, if left empty current locale is used instead.
-
-
-
-
-
-
- Sets OpenType feature [code]tag[/code] for the tab title. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
-
-
@@ -344,7 +320,7 @@
The size of the tab text outline.
-
+
The font used to draw tab names.
diff --git a/doc/classes/TabContainer.xml b/doc/classes/TabContainer.xml
index 10b5f730ad41..db9518904d15 100644
--- a/doc/classes/TabContainer.xml
+++ b/doc/classes/TabContainer.xml
@@ -219,7 +219,7 @@
The space at the left or right edges of the tab bar, accordingly with the current [member tab_alignment].
The margin is ignored with [code]ALIGNMENT_RIGHT[/code] if the tabs are clipped (see [member clip_tabs]) or a popup has been set (see [method set_popup]). The margin is always ignored with [code]ALIGNMENT_CENTER[/code].
-
+
The font used to draw tab names.
diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml
index 58fdd2d058c8..3f0f15ff4e75 100644
--- a/doc/classes/TextEdit.xml
+++ b/doc/classes/TextEdit.xml
@@ -85,12 +85,6 @@
Performs a full reset of [TextEdit], including undo history.
-
-
-
- Removes all OpenType features.
-
-
@@ -355,13 +349,6 @@
Returns the count to the next visible line from [code]line[/code] to [code]line + visible_amount[/code]. Can also count backwards. For example if a [TextEdit] has 5 lines with lines 2 and 3 hidden, calling this with [code]line = 1, visible_amount = 1[/code] would return 3.
-
-
-
-
- Returns OpenType feature [code]tag[/code].
-
-
@@ -859,14 +846,6 @@
Sets the text for [code]gutter[/code] on [code]line[/code].
-
-
-
-
-
- Sets OpenType feature [code]tag[/code]. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
-
-
@@ -1264,8 +1243,8 @@
The size of the text outline.
-
- Sets the default [Font].
+
+ Sets the default [FontConfig].
Sets default font size.
diff --git a/doc/classes/TextLine.xml b/doc/classes/TextLine.xml
index 5359937db592..71883e0face3 100644
--- a/doc/classes/TextLine.xml
+++ b/doc/classes/TextLine.xml
@@ -22,11 +22,10 @@
-
-
-
-
-
+
+
+
+
Adds text span and font to draw it.
diff --git a/doc/classes/TextMesh.xml b/doc/classes/TextMesh.xml
index 5a1501d2caa0..fc13046d7190 100644
--- a/doc/classes/TextMesh.xml
+++ b/doc/classes/TextMesh.xml
@@ -10,29 +10,6 @@
-
-
-
-
- Removes all OpenType features.
-
-
-
-
-
-
- Returns OpenType feature [code]tag[/code].
-
-
-
-
-
-
-
- Returns OpenType feature [code]tag[/code]. More info: [url=https://docs.microsoft.com/en-us/typography/opentype/spec/featuretags]OpenType feature tags[/url].
-
-
-
Step (in pixels) used to approximate Bézier curves.
@@ -40,8 +17,8 @@
Depths of the mesh, if set to [code]0.0[/code] only front surface, is generated, and UV layout is changed to use full texture for the front face only.
-
- [Font] used for the [TextMesh]'s text.
+
+ Font configuration used to display text.
Font size of the [TextMesh]'s text.
diff --git a/doc/classes/TextParagraph.xml b/doc/classes/TextParagraph.xml
index 964e2c771f73..59a4c3689783 100644
--- a/doc/classes/TextParagraph.xml
+++ b/doc/classes/TextParagraph.xml
@@ -22,11 +22,10 @@
-
-
-
-
-
+
+
+
+
Adds text span and font to draw it.
@@ -217,18 +216,6 @@
Returns the size of the bounding box of the paragraph.
-
-
-
- Returns extra spacing at the bottom of the line. See [member Font.spacing_bottom].
-
-
-
-
-
- Returns extra spacing at the top of the line. See [member Font.spacing_top].
-
-
@@ -256,11 +243,10 @@
-
-
+
+
-
-
+
Sets drop cap, overrides previously set drop cap. Drop cap (dropped capital) is a decorative element at the beginning of a paragraph that is larger than the rest of the text.
diff --git a/doc/classes/TextServer.xml b/doc/classes/TextServer.xml
index 19be38b32367..823642417d97 100644
--- a/doc/classes/TextServer.xml
+++ b/doc/classes/TextServer.xml
@@ -355,15 +355,6 @@
Returns list of the font sizes in the cache. Each size is [code]Vector2i[/code] with font size and outline size.
-
-
-
-
-
-
- Returns extra spacing added between glyphs in pixels.
-
-
@@ -542,7 +533,7 @@
- Removes specified texture from font cache entry.
+ Removes specified texture from the cache entry.
[b]Note:[/b] This function will not remove glyphs associated with the texture, remove them manually, using [method font_remove_glyph].
@@ -792,16 +783,6 @@
Adds override for [method font_is_script_supported].
-
-
-
-
-
-
-
- Sets extra spacing added between glyphs in pixels.
-
-
@@ -1286,6 +1267,14 @@
Returns size of the text.
+
+
+
+
+
+ Returns extra spacing added between glyphs or lines in pixels.
+
+
@@ -1431,6 +1420,15 @@
If set to [code]true[/code] text buffer will display invalid characters as hexadecimal codes, otherwise nothing is displayed.
+
+
+
+
+
+
+ Sets extra spacing added between glyphs or lines in pixels.
+
+
diff --git a/doc/classes/TextServerExtension.xml b/doc/classes/TextServerExtension.xml
index b3be858ca109..2f7b31b6636a 100644
--- a/doc/classes/TextServerExtension.xml
+++ b/doc/classes/TextServerExtension.xml
@@ -345,15 +345,6 @@
Returns list of the font sizes in the cache. Each size is [code]Vector2i[/code] with font size and outline size.
-
-
-
-
-
-
- Returns extra spacing added between glyphs in pixels.
-
-
@@ -531,7 +522,7 @@
- Removes specified texture from font cache entry.
+ Removes specified texture from the cache entry.
@@ -788,16 +779,6 @@
Adds override for [method font_is_script_supported].
-
-
-
-
-
-
-
- Sets extra spacing added between glyphs in pixels.
-
-
@@ -1288,6 +1269,14 @@
Returns size of the text.
+
+
+
+
+
+ Returns extra spacing added between glyphs or lines in pixels.
+
+
@@ -1436,6 +1425,15 @@
If set to [code]true[/code] text buffer will display invalid characters as hexadecimal codes, otherwise nothing is displayed.
+
+
+
+
+
+
+ Sets extra spacing added between glyphs or lines in pixels.
+
+
diff --git a/doc/classes/Theme.xml b/doc/classes/Theme.xml
index 5270da9588bf..7c30bdc41888 100644
--- a/doc/classes/Theme.xml
+++ b/doc/classes/Theme.xml
@@ -50,7 +50,7 @@
- Removes the [Font] property defined by [code]name[/code] and [code]theme_type[/code], if it exists.
+ Removes the [FontConfig] property defined by [code]name[/code] and [code]theme_type[/code], if it exists.
Fails if it doesn't exist. Use [method has_font] to check for existence.
@@ -144,11 +144,11 @@
-
+
- Returns the [Font] property defined by [code]name[/code] and [code]theme_type[/code], if it exists.
+ Returns the [FontConfig] property defined by [code]name[/code] and [code]theme_type[/code], if it exists.
Returns the default theme font if the property doesn't exist and the default theme font is set up (see [member default_font]). Use [method has_font] to check for existence of the property and [method has_default_font] to check for existence of the default theme font.
Returns the engine fallback font value, if neither exist.
@@ -157,7 +157,7 @@
- Returns a list of names for [Font] properties defined with [code]theme_type[/code]. Use [method get_font_type_list] to get a list of possible theme type names.
+ Returns a list of names for [FontConfig] properties defined with [code]theme_type[/code]. Use [method get_font_type_list] to get a list of possible theme type names.
@@ -186,7 +186,7 @@
- Returns a list of all unique theme type names for [Font] properties. Use [method get_type_list] to get a list of all unique theme types.
+ Returns a list of all unique theme type names for [FontConfig] properties. Use [method get_type_list] to get a list of all unique theme types.
@@ -325,7 +325,7 @@
- Returns [code]true[/code] if the [Font] property defined by [code]name[/code] and [code]theme_type[/code] exists, or if the default theme font is set up (see [method has_default_font]).
+ Returns [code]true[/code] if the [FontConfig] property defined by [code]name[/code] and [code]theme_type[/code] exists, or if the default theme font is set up (see [method has_default_font]).
Returns [code]false[/code] if neither exist. Use [method set_font] to define the property.
@@ -334,8 +334,8 @@
- Returns [code]true[/code] if the font size property defined by [code]name[/code] and [code]theme_type[/code] exists, or if the default theme font size is set up (see [method has_default_font_size]).
- Returns [code]false[/code] if neither exist. Use [method set_font_size] to define the property.
+ Returns [code]true[/code] if [member default_font_size] has a valid value.
+ Returns [code]false[/code] if it doesn't. The value must be greater than [code]0[/code] to be considered valid.
@@ -416,7 +416,7 @@
- Renames the [Font] property defined by [code]old_name[/code] and [code]theme_type[/code] to [code]name[/code], if it exists.
+ Renames the [FontConfig] property defined by [code]old_name[/code] and [code]theme_type[/code] to [code]name[/code], if it exists.
Fails if it doesn't exist, or if a similar property with the new name already exists. Use [method has_font] to check for existence, and [method clear_font] to remove the existing property.
@@ -426,8 +426,8 @@
- Renames the font size property defined by [code]old_name[/code] and [code]theme_type[/code] to [code]name[/code], if it exists.
- Fails if it doesn't exist, or if a similar property with the new name already exists. Use [method has_font_size] to check for existence, and [method clear_font_size] to remove the existing property.
+ Returns [code]true[/code] if the font size property defined by [code]name[/code] and [code]theme_type[/code] exists, or if the default theme font size is set up (see [method has_default_font_size]).
+ Returns [code]false[/code] if neither exist. Use [method set_font_size] to define the property.
@@ -484,9 +484,9 @@
-
+
- Creates or changes the value of the [Font] property defined by [code]name[/code] and [code]theme_type[/code]. Use [method clear_font] to remove the property.
+ Creates or changes the value of the [FontConfig] property defined by [code]name[/code] and [code]theme_type[/code]. Use [method clear_font] to remove the property.
@@ -495,7 +495,8 @@
- Creates or changes the value of the font size property defined by [code]name[/code] and [code]theme_type[/code]. Use [method clear_font_size] to remove the property.
+ Renames the font size property defined by [code]old_name[/code] and [code]theme_type[/code] to [code]name[/code], if it exists.
+ Fails if it doesn't exist, or if a similar property with the new name already exists. Use [method has_font_size] to check for existence, and [method clear_font_size] to remove the existing property.
@@ -545,7 +546,7 @@
The default base scale factor of this theme resource. Used by some controls to scale their visual properties based on the global scale factor. If this value is set to [code]0.0[/code], the global scale factor is used.
Use [method has_default_base_scale] to check if this value is valid.
-
+
The default font of this theme resource. Used as the default value when trying to fetch a font resource that doesn't exist in this theme or is in invalid state. If the default font is also missing or invalid, the engine fallback value is used.
Use [method has_default_font] to check if this value is valid.
@@ -562,7 +563,7 @@
Theme's constant item type.
- Theme's [Font] item type.
+ Theme's [FontConfig] item type.
Theme's font size item type.
diff --git a/doc/classes/Tree.xml b/doc/classes/Tree.xml
index 6ae85ad242db..2b62f4678b88 100644
--- a/doc/classes/Tree.xml
+++ b/doc/classes/Tree.xml
@@ -41,13 +41,6 @@
Clears the tree. This removes all items.
-
-
-
-
- Removes all OpenType features from the item's text.
-
-
@@ -113,14 +106,6 @@
Returns column title language code.
-
-
-
-
-
- Returns OpenType feature [code]tag[/code] of the column title.
-
-
@@ -307,15 +292,6 @@
Sets language code of column title used for line-breaking and text shaping algorithms, if left empty current locale is used instead.
-
-
-
-
-
-
- Sets OpenType feature [code]tag[/code] for the column title.
-
-
@@ -547,11 +523,11 @@
The vertical padding inside each item, i.e. the distance between the item's content and top/bottom border.
-
- [Font] of the item's text.
+
+ [FontConfig] of the item's text.
-
- [Font] of the title button's text.
+
+ [FontConfig] of the title button's text.
Font size of the item's text.
diff --git a/doc/classes/TreeItem.xml b/doc/classes/TreeItem.xml
index 0a680b9627af..c761c310fd68 100644
--- a/doc/classes/TreeItem.xml
+++ b/doc/classes/TreeItem.xml
@@ -42,13 +42,6 @@
Resets the color for the given column to default.
-
-
-
-
- Removes all OpenType features.
-
-
@@ -153,7 +146,7 @@
-
+
Returns custom font used to draw text in the column [code]column[/code].
@@ -241,14 +234,6 @@
If [code]wrap[/code] is enabled, the method will wrap around to the first visible element in the tree when called on the last visible element, otherwise it returns [code]null[/code].
-
-
-
-
-
- Returns OpenType feature [code]tag[/code] of the item's text.
-
-
@@ -494,7 +479,7 @@
-
+
Sets custom font used to draw text in the column [code]column[/code].
@@ -580,15 +565,6 @@
Sets the metadata value for the given column, which can be retrieved later using [method get_metadata]. This can be used, for example, to store a reference to the original data.
-
-
-
-
-
-
- Sets OpenType feature [code]tag[/code] for the item's text.
-
-
diff --git a/doc/classes/Window.xml b/doc/classes/Window.xml
index 5ce870a8996a..d3be782da8f3 100644
--- a/doc/classes/Window.xml
+++ b/doc/classes/Window.xml
@@ -65,7 +65,7 @@
-
+
@@ -75,11 +75,11 @@
-
+
- Returns the [Font] at [code]name[/code] if the theme has [code]theme_type[/code].
+ Returns the [FontConfig] at [code]name[/code] if the theme has [code]theme_type[/code].
@@ -135,7 +135,7 @@
- Returns [code]true[/code] if [Font] with [code]name[/code] is in [code]theme_type[/code].
+ Returns [code]true[/code] if [FontConfig] with [code]name[/code] is in [code]theme_type[/code].
Returns [code]false[/code] if the theme does not have [code]theme_type[/code].
@@ -480,7 +480,7 @@
The size of the title outline.
-
+
The size of the title font.
diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp
index f0650ee44696..69dfbabdb3f2 100644
--- a/editor/animation_bezier_editor.cpp
+++ b/editor/animation_bezier_editor.cpp
@@ -247,7 +247,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) {
draw_rect(Rect2(Point2(), get_size()), accent, false, Math::round(EDSCALE));
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
int hsep = get_theme_constant(SNAME("h_separation"), SNAME("ItemList"));
diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp
index d81d62978003..ce74aea1af83 100644
--- a/editor/animation_track_editor.cpp
+++ b/editor/animation_track_editor.cpp
@@ -1493,7 +1493,7 @@ void AnimationTimelineEdit::_notification(int p_what) {
return;
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
@@ -1577,10 +1577,10 @@ void AnimationTimelineEdit::_notification(int p_what) {
int decimals = 2;
bool step_found = false;
- const float period_width = font->get_char_size('.', 0, font_size).width;
- float max_digit_width = font->get_char_size('0', 0, font_size).width;
+ const float period_width = font->get_char_size('.', font_size).width;
+ float max_digit_width = font->get_char_size('0', font_size).width;
for (int i = 1; i <= 9; i++) {
- const float digit_width = font->get_char_size('0' + i, 0, font_size).width;
+ const float digit_width = font->get_char_size('0' + i, font_size).width;
max_digit_width = MAX(digit_width, max_digit_width);
}
const int max_sc = int(Math::ceil(zoomw / scale));
@@ -1628,7 +1628,7 @@ void AnimationTimelineEdit::_notification(int p_what) {
draw_line(Point2(get_name_limit() + i, 0), Point2(get_name_limit() + i, h), linecolor, Math::round(EDSCALE));
draw_string(font, Point2(get_name_limit() + i + 3 * EDSCALE, (h - font->get_height(font_size)) / 2 + font->get_ascent(font_size)).floor(), itos(frame), HORIZONTAL_ALIGNMENT_LEFT, zoomw - i, font_size, sub ? color_time_dec : color_time_sec);
- prev_frame_ofs = i + font->get_string_size(itos(frame), font_size).x + 5 * EDSCALE;
+ prev_frame_ofs = i + font->get_string_size(itos(frame), HORIZONTAL_ALIGNMENT_LEFT, -1, font_size).x + 5 * EDSCALE;
}
}
}
@@ -1672,7 +1672,7 @@ void AnimationTimelineEdit::set_animation(const Ref &p_animation) {
Size2 AnimationTimelineEdit::get_minimum_size() const {
Size2 ms = add_track->get_minimum_size();
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
ms.height = MAX(ms.height, font->get_height(font_size));
ms.width = get_buttons_width() + add_track->get_minimum_size().width + get_theme_icon(SNAME("Hsize"), SNAME("EditorIcons"))->get_width() + 2;
@@ -1974,7 +1974,7 @@ void AnimationTrackEdit::_notification(int p_what) {
draw_style_box(get_theme_stylebox(SNAME("Focus"), SNAME("EditorStyles")), Rect2(Point2(1 * EDSCALE, 0), get_size() - Size2(1 * EDSCALE, 0)));
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
int hsep = get_theme_constant(SNAME("h_separation"), SNAME("ItemList"));
@@ -2333,7 +2333,7 @@ void AnimationTrackEdit::draw_key(int p_index, float p_pixels_sec, int p_x, bool
Vector2 ofs(p_x - icon_to_draw->get_width() / 2, int(get_size().height - icon_to_draw->get_height()) / 2);
if (animation->track_get_type(track) == Animation::TYPE_METHOD) {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
color.a = 0.5;
@@ -2456,7 +2456,7 @@ NodePath AnimationTrackEdit::get_path() const {
Size2 AnimationTrackEdit::get_minimum_size() const {
Ref texture = get_theme_icon(SNAME("Object"), SNAME("EditorIcons"));
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int separation = get_theme_constant(SNAME("v_separation"), SNAME("ItemList"));
@@ -3265,7 +3265,7 @@ AnimationTrackEdit *AnimationTrackEditPlugin::create_animation_track_edit(Object
void AnimationTrackEditGroup::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_DRAW: {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int separation = get_theme_constant(SNAME("h_separation"), SNAME("ItemList"));
Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
@@ -3311,7 +3311,7 @@ void AnimationTrackEditGroup::set_type_and_name(const Ref &p_type, co
}
Size2 AnimationTrackEditGroup::get_minimum_size() const {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int separation = get_theme_constant(SNAME("v_separation"), SNAME("ItemList"));
diff --git a/editor/animation_track_editor_plugins.cpp b/editor/animation_track_editor_plugins.cpp
index cd40b5391982..929d79602fa5 100644
--- a/editor/animation_track_editor_plugins.cpp
+++ b/editor/animation_track_editor_plugins.cpp
@@ -80,13 +80,13 @@ void AnimationTrackEditBool::draw_key(int p_index, float p_pixels_sec, int p_x,
/// COLOR ///
int AnimationTrackEditColor::get_key_height() const {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
return font->get_height(font_size) * 0.8;
}
Rect2 AnimationTrackEditColor::get_key_rect(int p_index, float p_pixels_sec) {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int fh = font->get_height(font_size) * 0.8;
return Rect2(-fh / 2, 0, fh, get_size().height);
@@ -97,7 +97,7 @@ bool AnimationTrackEditColor::is_key_selectable_by_distance() const {
}
void AnimationTrackEditColor::draw_key_link(int p_index, float p_pixels_sec, int p_x, int p_next_x, int p_clip_left, int p_clip_right) {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int fh = (font->get_height(font_size) * 0.8);
@@ -166,7 +166,7 @@ void AnimationTrackEditColor::draw_key_link(int p_index, float p_pixels_sec, int
void AnimationTrackEditColor::draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right) {
Color color = get_animation()->track_get_key_value(get_track(), p_index);
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int fh = font->get_height(font_size) * 0.8;
@@ -205,7 +205,7 @@ int AnimationTrackEditAudio::get_key_height() const {
return AnimationTrackEdit::get_key_height();
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
return int(font->get_height(font_size) * 1.5);
}
@@ -238,7 +238,7 @@ Rect2 AnimationTrackEditAudio::get_key_rect(int p_index, float p_pixels_sec) {
return Rect2(0, 0, len * p_pixels_sec, get_size().height);
} else {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int fh = font->get_height(font_size) * 0.8;
return Rect2(0, 0, fh, get_size().height);
@@ -302,7 +302,7 @@ void AnimationTrackEditAudio::draw_key(int p_index, float p_pixels_sec, int p_x,
return;
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
float fh = int(font->get_height(font_size) * 1.5);
Rect2 rect = Rect2(from_x, (get_size().height - fh) / 2, to_x - from_x, fh);
@@ -333,7 +333,7 @@ void AnimationTrackEditAudio::draw_key(int p_index, float p_pixels_sec, int p_x,
draw_rect(rect, accent, false);
}
} else {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int fh = font->get_height(font_size) * 0.8;
Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh));
@@ -366,7 +366,7 @@ int AnimationTrackEditSpriteFrame::get_key_height() const {
return AnimationTrackEdit::get_key_height();
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
return int(font->get_height(font_size) * 2);
}
@@ -434,7 +434,7 @@ Rect2 AnimationTrackEditSpriteFrame::get_key_rect(int p_index, float p_pixels_se
size = size.floor();
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int height = int(font->get_height(font_size) * 2);
int width = height * size.width / size.height;
@@ -525,7 +525,7 @@ void AnimationTrackEditSpriteFrame::draw_key(int p_index, float p_pixels_sec, in
region.size = texture->get_size();
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int height = int(font->get_height(font_size) * 2);
@@ -569,7 +569,7 @@ int AnimationTrackEditSubAnim::get_key_height() const {
return AnimationTrackEdit::get_key_height();
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
return int(font->get_height(font_size) * 1.5);
}
@@ -598,7 +598,7 @@ Rect2 AnimationTrackEditSubAnim::get_key_rect(int p_index, float p_pixels_sec) {
return Rect2(0, 0, len * p_pixels_sec, get_size().height);
} else {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int fh = font->get_height(font_size) * 0.8;
return Rect2(0, 0, fh, get_size().height);
@@ -653,7 +653,7 @@ void AnimationTrackEditSubAnim::draw_key(int p_index, float p_pixels_sec, int p_
return;
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int fh = font->get_height(font_size) * 1.5;
@@ -706,7 +706,7 @@ void AnimationTrackEditSubAnim::draw_key(int p_index, float p_pixels_sec, int p_
draw_rect(rect, accent, false);
}
} else {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int fh = font->get_height(font_size) * 0.8;
Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh));
@@ -805,7 +805,7 @@ void AnimationTrackEditTypeAudio::_preview_changed(ObjectID p_which) {
}
int AnimationTrackEditTypeAudio::get_key_height() const {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
return int(font->get_height(font_size) * 1.5);
}
@@ -870,7 +870,7 @@ void AnimationTrackEditTypeAudio::draw_key(int p_index, float p_pixels_sec, int
}
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
float fh = int(font->get_height(font_size) * 1.5);
@@ -1143,7 +1143,7 @@ int AnimationTrackEditTypeAnimation::get_key_height() const {
return AnimationTrackEdit::get_key_height();
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
return int(font->get_height(font_size) * 1.5);
}
@@ -1172,7 +1172,7 @@ Rect2 AnimationTrackEditTypeAnimation::get_key_rect(int p_index, float p_pixels_
return Rect2(0, 0, len * p_pixels_sec, get_size().height);
} else {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int fh = font->get_height(font_size) * 0.8;
return Rect2(0, 0, fh, get_size().height);
@@ -1227,7 +1227,7 @@ void AnimationTrackEditTypeAnimation::draw_key(int p_index, float p_pixels_sec,
return;
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int fh = font->get_height(font_size) * 1.5;
@@ -1280,7 +1280,7 @@ void AnimationTrackEditTypeAnimation::draw_key(int p_index, float p_pixels_sec,
draw_rect(rect, accent, false);
}
} else {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
int fh = font->get_height(font_size) * 0.8;
Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh));
diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp
index 7c00cf351cdd..ec7519271ede 100644
--- a/editor/code_editor.cpp
+++ b/editor/code_editor.cpp
@@ -1612,7 +1612,7 @@ void CodeTextEditor::_update_text_editor_theme() {
error->add_theme_font_size_override(SNAME("font_size"), get_theme_font_size(SNAME("status_source_size"), SNAME("EditorFonts")));
error->add_theme_color_override(SNAME("font_color"), get_theme_color(SNAME("error_color"), SNAME("Editor")));
- Ref status_bar_font = get_theme_font(SNAME("status_source"), SNAME("EditorFonts"));
+ Ref status_bar_font = get_theme_font(SNAME("status_source"), SNAME("EditorFonts"));
int status_bar_font_size = get_theme_font_size(SNAME("status_source_size"), SNAME("EditorFonts"));
error->add_theme_font_override("font", status_bar_font);
error->add_theme_font_size_override("font_size", status_bar_font_size);
@@ -1639,25 +1639,25 @@ void CodeTextEditor::_apply_settings_change() {
int ot_mode = EditorSettings::get_singleton()->get("interface/editor/code_font_contextual_ligatures");
switch (ot_mode) {
case 1: { // Disable ligatures.
- text_editor->clear_opentype_features();
- text_editor->set_opentype_feature("calt", 0);
+ text_editor->get_theme_font(SNAME("font"))->set_opentype_features(Dictionary());
} break;
case 2: { // Custom.
- text_editor->clear_opentype_features();
Vector subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_opentype_features")).split(",");
Dictionary ftrs;
for (int i = 0; i < subtag.size(); i++) {
Vector subtag_a = subtag[i].split("=");
if (subtag_a.size() == 2) {
- text_editor->set_opentype_feature(subtag_a[0], subtag_a[1].to_int());
+ ftrs[TS->name_to_tag(subtag_a[0])] = subtag_a[1].to_int();
} else if (subtag_a.size() == 1) {
- text_editor->set_opentype_feature(subtag_a[0], 1);
+ ftrs[TS->name_to_tag(subtag_a[0])] = 1;
}
}
+ text_editor->get_theme_font(SNAME("font"))->set_opentype_features(ftrs);
} break;
default: { // Default.
- text_editor->clear_opentype_features();
- text_editor->set_opentype_feature("calt", 1);
+ Dictionary ftrs;
+ ftrs[TS->name_to_tag("calt")] = 1;
+ text_editor->get_theme_font(SNAME("font"))->set_opentype_features(ftrs);
} break;
}
@@ -1863,25 +1863,25 @@ CodeTextEditor::CodeTextEditor() {
int ot_mode = EditorSettings::get_singleton()->get("interface/editor/code_font_contextual_ligatures");
switch (ot_mode) {
case 1: { // Disable ligatures.
- text_editor->clear_opentype_features();
- text_editor->set_opentype_feature("calt", 0);
+ text_editor->get_theme_font(SNAME("font"))->set_opentype_features(Dictionary());
} break;
case 2: { // Custom.
- text_editor->clear_opentype_features();
Vector subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_opentype_features")).split(",");
Dictionary ftrs;
for (int i = 0; i < subtag.size(); i++) {
Vector subtag_a = subtag[i].split("=");
if (subtag_a.size() == 2) {
- text_editor->set_opentype_feature(subtag_a[0], subtag_a[1].to_int());
+ ftrs[TS->name_to_tag(subtag_a[0])] = subtag_a[1].to_int();
} else if (subtag_a.size() == 1) {
- text_editor->set_opentype_feature(subtag_a[0], 1);
+ ftrs[TS->name_to_tag(subtag_a[0])] = 1;
}
}
+ text_editor->get_theme_font(SNAME("font"))->set_opentype_features(ftrs);
} break;
default: { // Default.
- text_editor->clear_opentype_features();
- text_editor->set_opentype_feature("calt", 1);
+ Dictionary ftrs;
+ ftrs[TS->name_to_tag("calt")] = 1;
+ text_editor->get_theme_font(SNAME("font"))->set_opentype_features(ftrs);
} break;
}
diff --git a/editor/debugger/editor_performance_profiler.cpp b/editor/debugger/editor_performance_profiler.cpp
index ed451ed68ebd..f998ff342841 100644
--- a/editor/debugger/editor_performance_profiler.cpp
+++ b/editor/debugger/editor_performance_profiler.cpp
@@ -111,7 +111,7 @@ void EditorPerformanceProfiler::_monitor_draw() {
info_message->hide();
Ref graph_style_box = get_theme_stylebox(SNAME("normal"), SNAME("TextEdit"));
- Ref graph_font = get_theme_font(SNAME("font"), SNAME("TextEdit"));
+ Ref graph_font = get_theme_font(SNAME("font"), SNAME("TextEdit"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("TextEdit"));
int columns = int(Math::ceil(Math::sqrt(float(active.size()))));
@@ -136,7 +136,7 @@ void EditorPerformanceProfiler::_monitor_draw() {
monitor_draw->draw_string(graph_font, rect.position + Point2(0, graph_font->get_ascent(font_size)), current.item->get_text(0), HORIZONTAL_ALIGNMENT_LEFT, rect.size.x, font_size, draw_color);
draw_color.a = 0.9f;
- float value_position = rect.size.width - graph_font->get_string_size(current.item->get_text(1), font_size).width;
+ float value_position = rect.size.width - graph_font->get_string_size(current.item->get_text(1), HORIZONTAL_ALIGNMENT_LEFT, -1, font_size).width;
if (value_position < 0) {
value_position = 0;
}
@@ -184,7 +184,7 @@ void EditorPerformanceProfiler::_monitor_draw() {
monitor_draw->draw_line(rect.position + Point2(from, 0), rect.position + Point2(from, rect.size.y), line_color, Math::round(EDSCALE));
String label = _create_label(e->get(), current.type);
- Size2 size = graph_font->get_string_size(label, font_size);
+ Size2 size = graph_font->get_string_size(label, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size);
Vector2 text_top_left_position = Vector2(from, h2) - (size + Vector2(MARKER_MARGIN, MARKER_MARGIN));
if (text_top_left_position.x < 0) {
text_top_left_position.x = from + MARKER_MARGIN;
diff --git a/editor/debugger/editor_visual_profiler.cpp b/editor/debugger/editor_visual_profiler.cpp
index 9def646f3feb..8ad2f66e75df 100644
--- a/editor/debugger/editor_visual_profiler.cpp
+++ b/editor/debugger/editor_visual_profiler.cpp
@@ -443,7 +443,7 @@ void EditorVisualProfiler::_graph_tex_draw() {
return;
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
const Color color = get_theme_color(SNAME("font_color"), SNAME("Editor"));
@@ -469,7 +469,7 @@ void EditorVisualProfiler::_graph_tex_draw() {
graph->draw_line(Vector2(0, frame_y), Vector2(half_width, frame_y), color * Color(1, 1, 1, 0.5));
const String limit_str = String::num(graph_limit, 2) + " ms";
- graph->draw_string(font, Vector2(half_width - font->get_string_size(limit_str, font_size).x - 2, frame_y - 2), limit_str, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, color * Color(1, 1, 1, 0.75));
+ graph->draw_string(font, Vector2(half_width - font->get_string_size(limit_str, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size).x - 2, frame_y - 2), limit_str, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, color * Color(1, 1, 1, 0.75));
}
if (graph_height_gpu > 0) {
@@ -480,11 +480,11 @@ void EditorVisualProfiler::_graph_tex_draw() {
graph->draw_line(Vector2(half_width, frame_y), Vector2(graph->get_size().x, frame_y), color * Color(1, 1, 1, 0.5));
const String limit_str = String::num(graph_limit, 2) + " ms";
- graph->draw_string(font, Vector2(half_width * 2 - font->get_string_size(limit_str, font_size).x - 2, frame_y - 2), limit_str, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, color * Color(1, 1, 1, 0.75));
+ graph->draw_string(font, Vector2(half_width * 2 - font->get_string_size(limit_str, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size).x - 2, frame_y - 2), limit_str, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, color * Color(1, 1, 1, 0.75));
}
- graph->draw_string(font, Vector2(font->get_string_size("X", font_size).x, font->get_ascent(font_size) + 2), "CPU:", HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, color * Color(1, 1, 1));
- graph->draw_string(font, Vector2(font->get_string_size("X", font_size).x + graph->get_size().width / 2, font->get_ascent(font_size) + 2), "GPU:", HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, color * Color(1, 1, 1));
+ graph->draw_string(font, Vector2(font->get_string_size("X", HORIZONTAL_ALIGNMENT_LEFT, -1, font_size).x, font->get_ascent(font_size) + 2), "CPU:", HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, color * Color(1, 1, 1));
+ graph->draw_string(font, Vector2(font->get_string_size("X", HORIZONTAL_ALIGNMENT_LEFT, -1, font_size).x + graph->get_size().width / 2, font->get_ascent(font_size) + 2), "GPU:", HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, color * Color(1, 1, 1));
}
void EditorVisualProfiler::_graph_tex_mouse_exit() {
diff --git a/editor/doc_tools.cpp b/editor/doc_tools.cpp
index e6cd1e0b4821..eec154be8cf5 100644
--- a/editor/doc_tools.cpp
+++ b/editor/doc_tools.cpp
@@ -608,7 +608,7 @@ void DocTools::generate(bool p_basic_types) {
for (const StringName &E : l) {
DocData::ThemeItemDoc tid;
tid.name = E;
- tid.type = "Font";
+ tid.type = "FontConfig";
tid.data_type = "font";
c.theme_properties.push_back(tid);
}
diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp
index 6fafb2d91a85..c511a2ec84ef 100644
--- a/editor/editor_about.cpp
+++ b/editor/editor_about.cpp
@@ -39,7 +39,7 @@
static const String META_TEXT_TO_COPY = "text_to_copy";
void EditorAbout::_theme_changed() {
- const Ref font = get_theme_font(SNAME("source"), SNAME("EditorFonts"));
+ const Ref font = get_theme_font(SNAME("source"), SNAME("EditorFonts"));
const int font_size = get_theme_font_size(SNAME("source_size"), SNAME("EditorFonts"));
_tpl_text->add_theme_font_override("normal_font", font);
_tpl_text->add_theme_font_size_override("normal_font_size", font_size);
diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp
index 89dc106717c1..084ba5104782 100644
--- a/editor/editor_audio_buses.cpp
+++ b/editor/editor_audio_buses.cpp
@@ -1385,7 +1385,7 @@ void EditorAudioMeterNotches::add_notch(float p_normalized_offset, float p_db_va
}
Size2 EditorAudioMeterNotches::get_minimum_size() const {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
float font_height = font->get_height(font_size);
@@ -1394,7 +1394,7 @@ Size2 EditorAudioMeterNotches::get_minimum_size() const {
for (int i = 0; i < notches.size(); i++) {
if (notches[i].render_db_value) {
- width = MAX(width, font->get_string_size(String::num(Math::abs(notches[i].db_value)) + "dB", font_size).x);
+ width = MAX(width, font->get_string_size(String::num(Math::abs(notches[i].db_value)) + "dB", HORIZONTAL_ALIGNMENT_LEFT, -1, font_size).x);
height += font_height;
}
}
@@ -1421,7 +1421,7 @@ void EditorAudioMeterNotches::_notification(int p_what) {
}
void EditorAudioMeterNotches::_draw_audio_notches() {
- Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
float font_height = font->get_height(font_size);
diff --git a/editor/editor_fonts.cpp b/editor/editor_fonts.cpp
index 51d4d474c55e..d1faf7659e10 100644
--- a/editor/editor_fonts.cpp
+++ b/editor/editor_fonts.cpp
@@ -37,212 +37,8 @@
#include "scene/resources/default_theme/default_theme.h"
#include "scene/resources/font.h"
-#define MAKE_FALLBACKS(m_name) \
- m_name->add_data(FontArabic); \
- m_name->add_data(FontBengali); \
- m_name->add_data(FontDevanagari); \
- m_name->add_data(FontGeorgian); \
- m_name->add_data(FontHebrew); \
- m_name->add_data(FontMalayalam); \
- m_name->add_data(FontOriya); \
- m_name->add_data(FontSinhala); \
- m_name->add_data(FontTamil); \
- m_name->add_data(FontTelugu); \
- m_name->add_data(FontThai); \
- m_name->add_data(FontJapanese); \
- m_name->add_data(FontFallback);
-
-// Note: In some languages, the use of italic/slanted fonts is controversial. Therefore, we are limiting simulated slant to the main font (Latin, Cyrillic, and Greek) and using bold fonts for the rest.
-
-#define MAKE_FALLBACKS_SLANTED(m_name) \
- m_name->add_data(FontArabicBold); \
- m_name->add_data(FontBengaliBold); \
- m_name->add_data(FontDevanagariBold); \
- m_name->add_data(FontGeorgianBold); \
- m_name->add_data(FontHebrewBold); \
- m_name->add_data(FontMalayalamBold); \
- m_name->add_data(FontOriyaBold); \
- m_name->add_data(FontSinhalaBold); \
- m_name->add_data(FontTamilBold); \
- m_name->add_data(FontTeluguBold); \
- m_name->add_data(FontThaiBold); \
- m_name->add_data(FontJapaneseBold); \
- m_name->add_data(FontFallbackBold);
-
-#define MAKE_FALLBACKS_BOLD(m_name) \
- m_name->add_data(FontArabicBold); \
- m_name->add_data(FontBengaliBold); \
- m_name->add_data(FontDevanagariBold); \
- m_name->add_data(FontGeorgianBold); \
- m_name->add_data(FontHebrewBold); \
- m_name->add_data(FontMalayalamBold); \
- m_name->add_data(FontOriyaBold); \
- m_name->add_data(FontSinhalaBold); \
- m_name->add_data(FontTamilBold); \
- m_name->add_data(FontTeluguBold); \
- m_name->add_data(FontThaiBold); \
- m_name->add_data(FontJapaneseBold); \
- m_name->add_data(FontFallbackBold);
-
-#define MAKE_DEFAULT_FONT(m_name, m_variations) \
- Ref m_name; \
- m_name.instantiate(); \
- if (CustomFont.is_valid()) { \
- m_name->add_data(CustomFont); \
- m_name->add_data(DefaultFont); \
- } else { \
- m_name->add_data(DefaultFont); \
- } \
- { \
- Dictionary variations; \
- if (!m_variations.is_empty()) { \
- Vector variation_tags = m_variations.split(","); \
- for (int i = 0; i < variation_tags.size(); i++) { \
- Vector tokens = variation_tags[i].split("="); \
- if (tokens.size() == 2) { \
- variations[tokens[0]] = tokens[1].to_float(); \
- } \
- } \
- } \
- m_name->set_variation_coordinates(variations); \
- } \
- m_name->set_spacing(TextServer::SPACING_TOP, -EDSCALE); \
- m_name->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE); \
- MAKE_FALLBACKS(m_name);
-
-#define MAKE_DEFAULT_FONT_MSDF(m_name, m_variations) \
- Ref m_name; \
- m_name.instantiate(); \
- if (CustomFont.is_valid()) { \
- m_name->add_data(CustomFontMSDF); \
- m_name->add_data(DefaultFontMSDF); \
- } else { \
- m_name->add_data(DefaultFontMSDF); \
- } \
- { \
- Dictionary variations; \
- if (!m_variations.is_empty()) { \
- Vector variation_tags = m_variations.split(","); \
- for (int i = 0; i < variation_tags.size(); i++) { \
- Vector tokens = variation_tags[i].split("="); \
- if (tokens.size() == 2) { \
- variations[tokens[0]] = tokens[1].to_float(); \
- } \
- } \
- } \
- m_name->set_variation_coordinates(variations); \
- } \
- m_name->set_spacing(TextServer::SPACING_TOP, -EDSCALE); \
- m_name->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE); \
- MAKE_FALLBACKS(m_name);
-
-#define MAKE_SLANTED_FONT(m_name, m_variations) \
- Ref m_name; \
- m_name.instantiate(); \
- m_name.instantiate(); \
- if (CustomFontSlanted.is_valid()) { \
- m_name->add_data(CustomFontSlanted); \
- m_name->add_data(DefaultFontSlanted); \
- } else { \
- m_name->add_data(DefaultFontSlanted); \
- } \
- { \
- Dictionary variations; \
- if (!m_variations.is_empty()) { \
- Vector variation_tags = m_variations.split(","); \
- for (int i = 0; i < variation_tags.size(); i++) { \
- Vector tokens = variation_tags[i].split("="); \
- if (tokens.size() == 2) { \
- variations[tokens[0]] = tokens[1].to_float(); \
- } \
- } \
- } \
- m_name->set_variation_coordinates(variations); \
- } \
- m_name->set_spacing(TextServer::SPACING_TOP, -EDSCALE); \
- m_name->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE); \
- MAKE_FALLBACKS_SLANTED(m_name);
-
-#define MAKE_BOLD_FONT(m_name, m_variations) \
- Ref m_name; \
- m_name.instantiate(); \
- if (CustomFontBold.is_valid()) { \
- m_name->add_data(CustomFontBold); \
- m_name->add_data(DefaultFontBold); \
- } else { \
- m_name->add_data(DefaultFontBold); \
- } \
- { \
- Dictionary variations; \
- if (!m_variations.is_empty()) { \
- Vector variation_tags = m_variations.split(","); \
- for (int i = 0; i < variation_tags.size(); i++) { \
- Vector tokens = variation_tags[i].split("="); \
- if (tokens.size() == 2) { \
- variations[tokens[0]] = tokens[1].to_float(); \
- } \
- } \
- } \
- m_name->set_variation_coordinates(variations); \
- } \
- m_name->set_spacing(TextServer::SPACING_TOP, -EDSCALE); \
- m_name->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE); \
- MAKE_FALLBACKS_BOLD(m_name);
-
-#define MAKE_BOLD_FONT_MSDF(m_name, m_variations) \
- Ref m_name; \
- m_name.instantiate(); \
- if (CustomFontBold.is_valid()) { \
- m_name->add_data(CustomFontBoldMSDF); \
- m_name->add_data(DefaultFontBoldMSDF); \
- } else { \
- m_name->add_data(DefaultFontBoldMSDF); \
- } \
- { \
- Dictionary variations; \
- if (!m_variations.is_empty()) { \
- Vector variation_tags = m_variations.split(","); \
- for (int i = 0; i < variation_tags.size(); i++) { \
- Vector tokens = variation_tags[i].split("="); \
- if (tokens.size() == 2) { \
- variations[tokens[0]] = tokens[1].to_float(); \
- } \
- } \
- } \
- m_name->set_variation_coordinates(variations); \
- } \
- m_name->set_spacing(TextServer::SPACING_TOP, -EDSCALE); \
- m_name->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE); \
- MAKE_FALLBACKS_BOLD(m_name);
-
-#define MAKE_SOURCE_FONT(m_name, m_variations) \
- Ref m_name; \
- m_name.instantiate(); \
- if (CustomFontSource.is_valid()) { \
- m_name->add_data(CustomFontSource); \
- m_name->add_data(dfmono); \
- } else { \
- m_name->add_data(dfmono); \
- } \
- { \
- Dictionary variations; \
- if (!m_variations.is_empty()) { \
- Vector variation_tags = m_variations.split(","); \
- for (int i = 0; i < variation_tags.size(); i++) { \
- Vector tokens = variation_tags[i].split("="); \
- if (tokens.size() == 2) { \
- variations[tokens[0]] = tokens[1].to_float(); \
- } \
- } \
- } \
- m_name->set_variation_coordinates(variations); \
- } \
- m_name->set_spacing(TextServer::SPACING_TOP, -EDSCALE); \
- m_name->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE); \
- MAKE_FALLBACKS(m_name);
-
-Ref load_cached_external_font(const String &p_path, TextServer::Hinting p_hinting, bool p_aa, bool p_autohint, TextServer::SubpixelPositioning p_font_subpixel_positioning, bool p_msdf = false) {
- Ref font;
+Ref load_external_font(const String &p_path, TextServer::Hinting p_hinting, bool p_aa, bool p_autohint, TextServer::SubpixelPositioning p_font_subpixel_positioning, bool p_msdf = false) {
+ Ref font;
font.instantiate();
Vector data = FileAccess::get_file_as_array(p_path);
@@ -257,8 +53,8 @@ Ref load_cached_external_font(const String &p_path, TextServer::Hintin
return font;
}
-Ref load_cached_internal_font(const uint8_t *p_data, size_t p_size, TextServer::Hinting p_hinting, bool p_aa, bool p_autohint, TextServer::SubpixelPositioning p_font_subpixel_positioning, bool p_msdf = false) {
- Ref font;
+Ref load_internal_font(const uint8_t *p_data, size_t p_size, TextServer::Hinting p_hinting, bool p_aa, bool p_autohint, TextServer::SubpixelPositioning p_font_subpixel_positioning, bool p_msdf = false) {
+ Ref font;
font.instantiate();
font->set_data_ptr(p_data, p_size);
@@ -274,8 +70,6 @@ Ref load_cached_internal_font(const uint8_t *p_data, size_t p_size, Te
void editor_register_fonts(Ref p_theme) {
Ref dir = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
- /* Custom font */
-
bool font_antialiased = (bool)EditorSettings::get_singleton()->get("interface/editor/font_antialiased");
int font_hinting_setting = (int)EditorSettings::get_singleton()->get("interface/editor/font_hinting");
TextServer::SubpixelPositioning font_subpixel_positioning = (TextServer::SubpixelPositioning)(int)EditorSettings::get_singleton()->get("interface/editor/font_subpixel_positioning");
@@ -304,184 +98,268 @@ void editor_register_fonts(Ref p_theme) {
break;
}
+ // Load built-in fonts.
+
+ Ref default_font = load_internal_font(_font_NotoSans_Regular, _font_NotoSans_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ Ref default_font_msdf = load_internal_font(_font_NotoSans_Regular, _font_NotoSans_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning, true);
+
+ Ref default_font_bold = load_internal_font(_font_NotoSans_Bold, _font_NotoSans_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ Ref default_font_bold_msdf = load_internal_font(_font_NotoSans_Bold, _font_NotoSans_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning, true);
+
+ Ref default_font_mono = load_internal_font(_font_JetBrainsMono_Regular, _font_JetBrainsMono_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ {
+ Dictionary opentype_features_mono;
+ opentype_features_mono["calt"] = 0;
+ default_font_mono->set_opentype_feature_overrides(opentype_features_mono); // Disable contextual alternates (coding ligatures).
+ }
+
+ TypedArray fallback;
+ fallback.push_back(load_internal_font(_font_NotoNaskhArabicUI_Regular, _font_NotoNaskhArabicUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 0
+ fallback.push_back(load_internal_font(_font_NotoSansBengaliUI_Regular, _font_NotoSansBengaliUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 1
+ fallback.push_back(load_internal_font(_font_NotoSansDevanagariUI_Regular, _font_NotoSansDevanagariUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 2
+ fallback.push_back(load_internal_font(_font_NotoSansGeorgian_Regular, _font_NotoSansGeorgian_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 3
+ fallback.push_back(load_internal_font(_font_NotoSansHebrew_Regular, _font_NotoSansHebrew_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 4
+ fallback.push_back(load_internal_font(_font_NotoSansMalayalamUI_Regular, _font_NotoSansMalayalamUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 5
+ fallback.push_back(load_internal_font(_font_NotoSansOriyaUI_Regular, _font_NotoSansOriyaUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 6
+ fallback.push_back(load_internal_font(_font_NotoSansSinhalaUI_Regular, _font_NotoSansSinhalaUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 7
+ fallback.push_back(load_internal_font(_font_NotoSansTamilUI_Regular, _font_NotoSansTamilUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 8
+ fallback.push_back(load_internal_font(_font_NotoSansTeluguUI_Regular, _font_NotoSansTeluguUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 9
+ fallback.push_back(load_internal_font(_font_NotoSansThaiUI_Regular, _font_NotoSansThaiUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 10
+ fallback.push_back(load_internal_font(_font_DroidSansFallback, _font_DroidSansFallback_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 11
+ fallback.push_back(load_internal_font(_font_DroidSansJapanese, _font_DroidSansJapanese_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 12
+ default_font->set_fallbacks(fallback);
+ default_font_msdf->set_fallbacks(fallback);
+ default_font_mono->set_fallbacks(fallback);
+
+ TypedArray fallback_bold;
+ fallback_bold.push_back(load_internal_font(_font_NotoNaskhArabicUI_Bold, _font_NotoNaskhArabicUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 0
+ fallback_bold.push_back(load_internal_font(_font_NotoSansBengaliUI_Bold, _font_NotoSansBengaliUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 1
+ fallback_bold.push_back(load_internal_font(_font_NotoSansDevanagariUI_Bold, _font_NotoSansDevanagariUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 2
+ fallback_bold.push_back(load_internal_font(_font_NotoSansGeorgian_Bold, _font_NotoSansGeorgian_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 3
+ fallback_bold.push_back(load_internal_font(_font_NotoSansHebrew_Bold, _font_NotoSansHebrew_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 4
+ fallback_bold.push_back(load_internal_font(_font_NotoSansMalayalamUI_Bold, _font_NotoSansMalayalamUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 5
+ fallback_bold.push_back(load_internal_font(_font_NotoSansOriyaUI_Bold, _font_NotoSansOriyaUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 6
+ fallback_bold.push_back(load_internal_font(_font_NotoSansSinhalaUI_Bold, _font_NotoSansSinhalaUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 7
+ fallback_bold.push_back(load_internal_font(_font_NotoSansTamilUI_Bold, _font_NotoSansTamilUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 8
+ fallback_bold.push_back(load_internal_font(_font_NotoSansTeluguUI_Bold, _font_NotoSansTeluguUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 9
+ fallback_bold.push_back(load_internal_font(_font_NotoSansThaiUI_Bold, _font_NotoSansThaiUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 10
+ fallback_bold.push_back(load_internal_font(_font_DroidSansFallback, _font_DroidSansFallback_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 11
+ fallback_bold.push_back(load_internal_font(_font_DroidSansJapanese, _font_DroidSansJapanese_size, font_hinting, font_antialiased, true, font_subpixel_positioning)); // 12
+ default_font_bold->set_fallbacks(fallback_bold);
+ default_font_bold_msdf->set_fallbacks(fallback_bold);
+
+ // Init base font configs and load custom fonts.
+ String custom_font_path = EditorSettings::get_singleton()->get("interface/editor/main_font");
+ String custom_font_path_bold = EditorSettings::get_singleton()->get("interface/editor/main_font_bold");
+ String custom_font_path_source = EditorSettings::get_singleton()->get("interface/editor/code_font");
+
const int default_font_size = int(EDITOR_GET("interface/editor/main_font_size")) * EDSCALE;
const float embolden_strength = 0.6;
- String custom_font_path = EditorSettings::get_singleton()->get("interface/editor/main_font");
- Ref CustomFont;
+ Ref default_fc;
+ default_fc.instantiate();
+ default_fc->set_variation_customize_fallbacks(true); // Apply variations to each of the fallback individually, some languages do not use bold and italic..
if (custom_font_path.length() > 0 && dir->file_exists(custom_font_path)) {
- CustomFont = load_cached_external_font(custom_font_path, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ Ref custom_font = load_external_font(custom_font_path, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ {
+ TypedArray fallback_custom;
+ fallback_custom.push_back(default_font);
+ custom_font->set_fallbacks(fallback_custom);
+ }
+ default_fc->set_font(custom_font);
} else {
EditorSettings::get_singleton()->set_manually("interface/editor/main_font", "");
+ default_fc->set_font(default_font);
}
+ default_fc->set_spacing(TextServer::SPACING_TOP, -EDSCALE);
+ default_fc->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE);
- Ref CustomFontMSDF;
+ Ref default_fc_msdf;
+ default_fc_msdf.instantiate();
+ default_fc_msdf->set_variation_customize_fallbacks(true); // Apply variations to each of the fallback individually, some languages do not use bold and italic..
if (custom_font_path.length() > 0 && dir->file_exists(custom_font_path)) {
- CustomFontMSDF = load_cached_external_font(custom_font_path, font_hinting, font_antialiased, true, font_subpixel_positioning, true);
+ Ref custom_font = load_external_font(custom_font_path, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ {
+ TypedArray fallback_custom;
+ fallback_custom.push_back(default_font_msdf);
+ custom_font->set_fallbacks(fallback_custom);
+ }
+ default_fc_msdf->set_font(custom_font);
} else {
EditorSettings::get_singleton()->set_manually("interface/editor/main_font", "");
+ default_fc_msdf->set_font(default_font_msdf);
}
+ default_fc_msdf->set_spacing(TextServer::SPACING_TOP, -EDSCALE);
+ default_fc_msdf->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE);
- Ref CustomFontSlanted;
- if (CustomFont.is_valid()) {
- CustomFontSlanted = CustomFont->duplicate();
- CustomFontSlanted->set_transform(Transform2D(1.0, 0.4, 0.0, 1.0, 0.0, 0.0));
- }
-
- /* Custom Bold font */
-
- String custom_font_path_bold = EditorSettings::get_singleton()->get("interface/editor/main_font_bold");
- Ref CustomFontBold;
+ Ref bold_fc;
+ bold_fc.instantiate();
+ bold_fc->set_variation_customize_fallbacks(true); // Apply variations to each of the fallback individually, some languages do not use bold and italic..
if (custom_font_path_bold.length() > 0 && dir->file_exists(custom_font_path_bold)) {
- CustomFontBold = load_cached_external_font(custom_font_path_bold, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ Ref custom_font = load_external_font(custom_font_path_bold, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ {
+ TypedArray fallback_custom;
+ fallback_custom.push_back(default_font_bold);
+ custom_font->set_fallbacks(fallback_custom);
+ }
+ bold_fc->set_font(custom_font);
+ bold_fc->set("variation_fallback/0/11/variation_embolden", embolden_strength); // DroidSansFallback
+ bold_fc->set("variation_fallback/0/12/variation_embolden", embolden_strength); // DroidSansJapanese
+ } else if (custom_font_path.length() > 0 && dir->file_exists(custom_font_path)) {
+ Ref custom_font = load_external_font(custom_font_path, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ {
+ TypedArray fallback_custom;
+ fallback_custom.push_back(default_font_bold);
+ custom_font->set_fallbacks(fallback_custom);
+ }
+ bold_fc->set_font(custom_font);
+ bold_fc->set_variation_embolden(embolden_strength);
+ bold_fc->set("variation_fallback/0/11/variation_embolden", embolden_strength); // DroidSansFallback
+ bold_fc->set("variation_fallback/0/12/variation_embolden", embolden_strength); // DroidSansJapanese
} else {
EditorSettings::get_singleton()->set_manually("interface/editor/main_font_bold", "");
+ bold_fc->set_font(default_font_bold);
+ bold_fc->set("variation_fallback/11/variation_embolden", embolden_strength); // DroidSansFallback
+ bold_fc->set("variation_fallback/12/variation_embolden", embolden_strength); // DroidSansJapanese
}
+ bold_fc->set_spacing(TextServer::SPACING_TOP, -EDSCALE);
+ bold_fc->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE);
- if (CustomFont.is_valid() && !CustomFontBold.is_valid()) {
- CustomFontBold = CustomFont->duplicate();
- CustomFontBold->set_embolden(embolden_strength);
- }
-
- Ref CustomFontBoldMSDF;
- if (custom_font_path.length() > 0 && dir->file_exists(custom_font_path)) {
- CustomFontBoldMSDF = load_cached_external_font(custom_font_path, font_hinting, font_antialiased, true, font_subpixel_positioning, true);
+ Ref bold_fc_msdf;
+ bold_fc_msdf.instantiate();
+ bold_fc_msdf->set_variation_customize_fallbacks(true); // Apply variations to each of the fallback individually, some languages do not use bold and italic..
+ if (custom_font_path_bold.length() > 0 && dir->file_exists(custom_font_path_bold)) {
+ Ref custom_font = load_external_font(custom_font_path_bold, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ {
+ TypedArray fallback_custom;
+ fallback_custom.push_back(default_font_bold_msdf);
+ custom_font->set_fallbacks(fallback_custom);
+ }
+ bold_fc_msdf->set_font(custom_font);
+ bold_fc_msdf->set("variation_fallback/0/11/variation_embolden", embolden_strength); // DroidSansFallback
+ bold_fc_msdf->set("variation_fallback/0/12/variation_embolden", embolden_strength); // DroidSansJapanese
+ } else if (custom_font_path.length() > 0 && dir->file_exists(custom_font_path)) {
+ Ref custom_font = load_external_font(custom_font_path, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ {
+ TypedArray fallback_custom;
+ fallback_custom.push_back(default_font_bold_msdf);
+ custom_font->set_fallbacks(fallback_custom);
+ }
+ bold_fc_msdf->set_font(custom_font);
+ bold_fc_msdf->set_variation_embolden(embolden_strength);
+ bold_fc_msdf->set("variation_fallback/0/11/variation_embolden", embolden_strength); // DroidSansFallback
+ bold_fc_msdf->set("variation_fallback/0/12/variation_embolden", embolden_strength); // DroidSansJapanese
} else {
EditorSettings::get_singleton()->set_manually("interface/editor/main_font_bold", "");
+ bold_fc_msdf->set_font(default_font_bold_msdf);
+ bold_fc_msdf->set("variation_fallback/11/variation_embolden", embolden_strength); // DroidSansFallback
+ bold_fc_msdf->set("variation_fallback/12/variation_embolden", embolden_strength); // DroidSansJapanese
}
+ bold_fc_msdf->set_spacing(TextServer::SPACING_TOP, -EDSCALE);
+ bold_fc_msdf->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE);
- /* Custom source code font */
-
- String custom_font_path_source = EditorSettings::get_singleton()->get("interface/editor/code_font");
- Ref CustomFontSource;
+ Ref mono_fc;
+ mono_fc.instantiate();
+ mono_fc->set_variation_customize_fallbacks(true); // Apply variations to each of the fallback individually, some languages do not use bold and italic..
if (custom_font_path_source.length() > 0 && dir->file_exists(custom_font_path_source)) {
- CustomFontSource = load_cached_external_font(custom_font_path_source, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ Ref custom_font = load_external_font(custom_font_path_source, font_hinting, font_antialiased, true, font_subpixel_positioning);
+ {
+ TypedArray fallback_custom;
+ fallback_custom.push_back(default_font_mono);
+ custom_font->set_fallbacks(fallback_custom);
+ }
+ mono_fc->set_font(custom_font);
} else {
EditorSettings::get_singleton()->set_manually("interface/editor/code_font", "");
+ mono_fc->set_font(default_font_mono);
}
+ String code_font_custom_variations = EditorSettings::get_singleton()->get("interface/editor/code_font_custom_variations");
+ Dictionary variations_mono;
+ if (!code_font_custom_variations.is_empty()) {
+ Vector variation_tags = code_font_custom_variations.split(",");
+ for (int i = 0; i < variation_tags.size(); i++) {
+ Vector subtag_a = variation_tags[i].split("=");
+ if (subtag_a.size() == 2) {
+ variations_mono[TS->name_to_tag(subtag_a[0])] = subtag_a[1].to_float();
+ } else if (subtag_a.size() == 1) {
+ variations_mono[TS->name_to_tag(subtag_a[0])] = 1;
+ }
+ }
+ mono_fc->set_variation_opentype(variations_mono);
+ }
+ mono_fc->set_spacing(TextServer::SPACING_TOP, -EDSCALE);
+ mono_fc->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE);
+
+ Ref italic_fc = default_fc->duplicate();
+ italic_fc->set_variation_transform(Transform2D(1.0, 0.2, 0.0, 1.0, 0.0, 0.0));
+
+ // Setup theme.
- /* Noto Sans */
-
- Ref DefaultFont = load_cached_internal_font(_font_NotoSans_Regular, _font_NotoSans_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref DefaultFontMSDF = load_cached_internal_font(_font_NotoSans_Regular, _font_NotoSans_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning, true);
- Ref DefaultFontBold = load_cached_internal_font(_font_NotoSans_Bold, _font_NotoSans_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref DefaultFontBoldMSDF = load_cached_internal_font(_font_NotoSans_Bold, _font_NotoSans_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning, true);
- Ref FontArabic = load_cached_internal_font(_font_NotoNaskhArabicUI_Regular, _font_NotoNaskhArabicUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontArabicBold = load_cached_internal_font(_font_NotoNaskhArabicUI_Bold, _font_NotoNaskhArabicUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontBengali = load_cached_internal_font(_font_NotoSansBengaliUI_Regular, _font_NotoSansBengaliUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontBengaliBold = load_cached_internal_font(_font_NotoSansBengaliUI_Bold, _font_NotoSansBengaliUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontDevanagari = load_cached_internal_font(_font_NotoSansDevanagariUI_Regular, _font_NotoSansDevanagariUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontDevanagariBold = load_cached_internal_font(_font_NotoSansDevanagariUI_Bold, _font_NotoSansDevanagariUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontGeorgian = load_cached_internal_font(_font_NotoSansGeorgian_Regular, _font_NotoSansGeorgian_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontGeorgianBold = load_cached_internal_font(_font_NotoSansGeorgian_Bold, _font_NotoSansGeorgian_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontHebrew = load_cached_internal_font(_font_NotoSansHebrew_Regular, _font_NotoSansHebrew_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontHebrewBold = load_cached_internal_font(_font_NotoSansHebrew_Bold, _font_NotoSansHebrew_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontMalayalam = load_cached_internal_font(_font_NotoSansMalayalamUI_Regular, _font_NotoSansMalayalamUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontMalayalamBold = load_cached_internal_font(_font_NotoSansMalayalamUI_Bold, _font_NotoSansMalayalamUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontOriya = load_cached_internal_font(_font_NotoSansOriyaUI_Regular, _font_NotoSansOriyaUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontOriyaBold = load_cached_internal_font(_font_NotoSansOriyaUI_Bold, _font_NotoSansOriyaUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontSinhala = load_cached_internal_font(_font_NotoSansSinhalaUI_Regular, _font_NotoSansSinhalaUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontSinhalaBold = load_cached_internal_font(_font_NotoSansSinhalaUI_Bold, _font_NotoSansSinhalaUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontTamil = load_cached_internal_font(_font_NotoSansTamilUI_Regular, _font_NotoSansTamilUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontTamilBold = load_cached_internal_font(_font_NotoSansTamilUI_Bold, _font_NotoSansTamilUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontTelugu = load_cached_internal_font(_font_NotoSansTeluguUI_Regular, _font_NotoSansTeluguUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontTeluguBold = load_cached_internal_font(_font_NotoSansTeluguUI_Bold, _font_NotoSansTeluguUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontThai = load_cached_internal_font(_font_NotoSansThaiUI_Regular, _font_NotoSansThaiUI_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontThaiBold = load_cached_internal_font(_font_NotoSansThaiUI_Bold, _font_NotoSansThaiUI_Bold_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
-
- Ref DefaultFontSlanted = DefaultFont->duplicate();
- DefaultFontSlanted->set_transform(Transform2D(1.0, 0.3, 0.0, 1.0, 0.0, 0.0));
-
- /* Droid Sans */
-
- Ref FontFallback = load_cached_internal_font(_font_DroidSansFallback, _font_DroidSansFallback_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Ref FontJapanese = load_cached_internal_font(_font_DroidSansJapanese, _font_DroidSansJapanese_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
-
- Ref FontFallbackBold = FontFallback->duplicate();
- FontFallbackBold->set_embolden(embolden_strength);
- Ref FontJapaneseBold = FontJapanese->duplicate();
- FontJapaneseBold->set_embolden(embolden_strength);
-
- /* Hack */
-
- Ref dfmono = load_cached_internal_font(_font_JetBrainsMono_Regular, _font_JetBrainsMono_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
- Dictionary opentype_features;
- opentype_features["calt"] = 0;
- dfmono->set_opentype_feature_overrides(opentype_features); // Disable contextual alternates (coding ligatures).
-
- // Default font
- MAKE_DEFAULT_FONT(df, String());
- p_theme->set_default_font(df); // Default theme font
+ p_theme->set_default_font(default_fc); // Default theme font config.
p_theme->set_default_font_size(default_font_size);
- p_theme->set_font_size("main_size", "EditorFonts", default_font_size);
- p_theme->set_font("main", "EditorFonts", df);
+ // Main font.
- MAKE_DEFAULT_FONT_MSDF(df_msdf, String());
- p_theme->set_font("main_msdf", "EditorFonts", df_msdf);
+ p_theme->set_font("main", "EditorFonts", default_fc);
+ p_theme->set_font("main_msdf", "EditorFonts", default_fc_msdf);
+ p_theme->set_font_size("main_size", "EditorFonts", default_font_size);
- // Bold font
- MAKE_BOLD_FONT(df_bold, String());
- MAKE_SLANTED_FONT(df_italic, String());
+ p_theme->set_font("bold", "EditorFonts", bold_fc);
+ p_theme->set_font("main_bold_msdf", "EditorFonts", bold_fc_msdf);
p_theme->set_font_size("bold_size", "EditorFonts", default_font_size);
- p_theme->set_font("bold", "EditorFonts", df_bold);
- MAKE_BOLD_FONT_MSDF(df_bold_msdf, String());
- p_theme->set_font("main_bold_msdf", "EditorFonts", df_bold_msdf);
+ // Title font.
- // Title font
+ p_theme->set_font("title", "EditorFonts", bold_fc);
p_theme->set_font_size("title_size", "EditorFonts", default_font_size + 1 * EDSCALE);
- p_theme->set_font("title", "EditorFonts", df_bold);
+ p_theme->set_font("main_button_font", "EditorFonts", bold_fc);
p_theme->set_font_size("main_button_font_size", "EditorFonts", default_font_size + 1 * EDSCALE);
- p_theme->set_font("main_button_font", "EditorFonts", df_bold);
- p_theme->set_font("font", "Label", df);
+ p_theme->set_font("font", "Label", default_fc);
p_theme->set_type_variation("HeaderSmall", "Label");
- p_theme->set_font("font", "HeaderSmall", df_bold);
+ p_theme->set_font("font", "HeaderSmall", bold_fc);
p_theme->set_font_size("font_size", "HeaderSmall", default_font_size);
p_theme->set_type_variation("HeaderMedium", "Label");
- p_theme->set_font("font", "HeaderMedium", df_bold);
+ p_theme->set_font("font", "HeaderMedium", bold_fc);
p_theme->set_font_size("font_size", "HeaderMedium", default_font_size + 1 * EDSCALE);
p_theme->set_type_variation("HeaderLarge", "Label");
- p_theme->set_font("font", "HeaderLarge", df_bold);
+ p_theme->set_font("font", "HeaderLarge", bold_fc);
p_theme->set_font_size("font_size", "HeaderLarge", default_font_size + 3 * EDSCALE);
// Documentation fonts
- String code_font_custom_variations = EditorSettings::get_singleton()->get("interface/editor/code_font_custom_variations");
- MAKE_SOURCE_FONT(df_code, code_font_custom_variations);
p_theme->set_font_size("doc_size", "EditorFonts", int(EDITOR_GET("text_editor/help/help_font_size")) * EDSCALE);
- p_theme->set_font("doc", "EditorFonts", df);
- p_theme->set_font("doc_bold", "EditorFonts", df_bold);
- p_theme->set_font("doc_italic", "EditorFonts", df_italic);
+ p_theme->set_font("doc", "EditorFonts", default_fc);
+ p_theme->set_font("doc_bold", "EditorFonts", bold_fc);
+ p_theme->set_font("doc_italic", "EditorFonts", italic_fc);
p_theme->set_font_size("doc_title_size", "EditorFonts", int(EDITOR_GET("text_editor/help/help_title_font_size")) * EDSCALE);
- p_theme->set_font("doc_title", "EditorFonts", df_bold);
+ p_theme->set_font("doc_title", "EditorFonts", bold_fc);
p_theme->set_font_size("doc_source_size", "EditorFonts", int(EDITOR_GET("text_editor/help/help_source_font_size")) * EDSCALE);
- p_theme->set_font("doc_source", "EditorFonts", df_code);
+ p_theme->set_font("doc_source", "EditorFonts", mono_fc);
p_theme->set_font_size("doc_keyboard_size", "EditorFonts", (int(EDITOR_GET("text_editor/help/help_source_font_size")) - 1) * EDSCALE);
- p_theme->set_font("doc_keyboard", "EditorFonts", df_code);
+ p_theme->set_font("doc_keyboard", "EditorFonts", mono_fc);
// Ruler font
p_theme->set_font_size("rulers_size", "EditorFonts", 8 * EDSCALE);
- p_theme->set_font("rulers", "EditorFonts", df);
+ p_theme->set_font("rulers", "EditorFonts", default_fc);
// Rotation widget font
p_theme->set_font_size("rotation_control_size", "EditorFonts", 14 * EDSCALE);
- p_theme->set_font("rotation_control", "EditorFonts", df);
+ p_theme->set_font("rotation_control", "EditorFonts", default_fc);
// Code font
p_theme->set_font_size("source_size", "EditorFonts", int(EDITOR_GET("interface/editor/code_font_size")) * EDSCALE);
- p_theme->set_font("source", "EditorFonts", df_code);
+ p_theme->set_font("source", "EditorFonts", mono_fc);
p_theme->set_font_size("expression_size", "EditorFonts", (int(EDITOR_GET("interface/editor/code_font_size")) - 1) * EDSCALE);
- p_theme->set_font("expression", "EditorFonts", df_code);
+ p_theme->set_font("expression", "EditorFonts", mono_fc);
p_theme->set_font_size("output_source_size", "EditorFonts", int(EDITOR_GET("run/output/font_size")) * EDSCALE);
- p_theme->set_font("output_source", "EditorFonts", df_code);
+ p_theme->set_font("output_source", "EditorFonts", mono_fc);
p_theme->set_font_size("status_source_size", "EditorFonts", default_font_size);
- p_theme->set_font("status_source", "EditorFonts", df_code);
+ p_theme->set_font("status_source", "EditorFonts", mono_fc);
}
diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp
index b4325f09c54c..cb4a0e342645 100644
--- a/editor/editor_help.cpp
+++ b/editor/editor_help.cpp
@@ -179,9 +179,9 @@ void EditorHelp::_class_desc_input(const Ref &p_input) {
void EditorHelp::_class_desc_resized(bool p_force_update_theme) {
// Add extra horizontal margins for better readability.
// The margins increase as the width of the editor help container increases.
- Ref doc_code_font = get_theme_font(SNAME("doc_source"), SNAME("EditorFonts"));
+ Ref doc_code_font = get_theme_font(SNAME("doc_source"), SNAME("EditorFonts"));
int font_size = get_theme_font_size(SNAME("doc_source_size"), SNAME("EditorFonts"));
- real_t char_width = doc_code_font->get_char_size('x', 0, font_size).width;
+ real_t char_width = doc_code_font->get_char_size('x', font_size).width;
const int new_display_margin = MAX(30 * EDSCALE, get_parent_anchorable_rect().size.width - char_width * 120 * EDSCALE) * 0.5;
if (display_margin != new_display_margin || p_force_update_theme) {
display_margin = new_display_margin;
@@ -361,7 +361,7 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) {
}
void EditorHelp::_update_method_list(const Vector p_methods, bool &r_method_descrpitons) {
- Ref doc_code_font = get_theme_font(SNAME("doc_source"), SNAME("EditorFonts"));
+ Ref doc_code_font = get_theme_font(SNAME("doc_source"), SNAME("EditorFonts"));
class_desc->pop();
class_desc->pop();
@@ -427,9 +427,9 @@ void EditorHelp::_update_method_list(const Vector p_methods,
}
void EditorHelp::_update_method_descriptions(const DocData::ClassDoc p_classdoc, const Vector p_methods, const String &p_method_type) {
- Ref doc_font = get_theme_font(SNAME("doc"), SNAME("EditorFonts"));
- Ref doc_bold_font = get_theme_font(SNAME("doc_bold"), SNAME("EditorFonts"));
- Ref doc_code_font = get_theme_font(SNAME("doc_source"), SNAME("EditorFonts"));
+ Ref doc_font = get_theme_font(SNAME("doc"), SNAME("EditorFonts"));
+ Ref doc_bold_font = get_theme_font(SNAME("doc_bold"), SNAME("EditorFonts"));
+ Ref doc_code_font = get_theme_font(SNAME("doc_source"), SNAME("EditorFonts"));
String link_color_text = title_color.to_html(false);
class_desc->pop();
class_desc->pop();
@@ -1502,11 +1502,11 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
DocTools *doc = EditorHelp::get_doc_data();
String base_path;
- Ref doc_font = p_rt->get_theme_font(SNAME("doc"), SNAME("EditorFonts"));
- Ref doc_bold_font = p_rt->get_theme_font(SNAME("doc_bold"), SNAME("EditorFonts"));
- Ref doc_italic_font = p_rt->get_theme_font(SNAME("doc_italic"), SNAME("EditorFonts"));
- Ref doc_code_font = p_rt->get_theme_font(SNAME("doc_source"), SNAME("EditorFonts"));
- Ref doc_kbd_font = p_rt->get_theme_font(SNAME("doc_keyboard"), SNAME("EditorFonts"));
+ Ref doc_font = p_rt->get_theme_font(SNAME("doc"), SNAME("EditorFonts"));
+ Ref doc_bold_font = p_rt->get_theme_font(SNAME("doc_bold"), SNAME("EditorFonts"));
+ Ref doc_italic_font = p_rt->get_theme_font(SNAME("doc_italic"), SNAME("EditorFonts"));
+ Ref doc_code_font = p_rt->get_theme_font(SNAME("doc_source"), SNAME("EditorFonts"));
+ Ref doc_kbd_font = p_rt->get_theme_font(SNAME("doc_keyboard"), SNAME("EditorFonts"));
Color link_color = p_rt->get_theme_color(SNAME("link_color"), SNAME("EditorHelp"));
Color code_color = p_rt->get_theme_color(SNAME("code_color"), SNAME("EditorHelp"));
@@ -1737,7 +1737,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
} else if (tag.begins_with("font=")) {
String fnt = tag.substr(5, tag.length());
- Ref font = ResourceLoader::load(base_path.plus_file(fnt), "Font");
+ Ref font = ResourceLoader::load(base_path.plus_file(fnt), "FontConfig");
if (font.is_valid()) {
p_rt->push_font(font);
} else {
diff --git a/editor/editor_help.h b/editor/editor_help.h
index 766a09f48593..8321c5f206ba 100644
--- a/editor/editor_help.h
+++ b/editor/editor_help.h
@@ -135,10 +135,10 @@ class EditorHelp : public VBoxContainer {
Color qualifier_color;
Color type_color;
- Ref doc_font;
- Ref doc_bold_font;
- Ref doc_title_font;
- Ref doc_code_font;
+ Ref doc_font;
+ Ref doc_bold_font;
+ Ref doc_title_font;
+ Ref doc_code_font;
int scroll_to = -1;
diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp
index 0f31e3e7bb5d..eba4a815fa21 100644
--- a/editor/editor_inspector.cpp
+++ b/editor/editor_inspector.cpp
@@ -60,7 +60,7 @@ static bool _property_path_matches(const String &p_property_path, const String &
Size2 EditorProperty::get_minimum_size() const {
Size2 ms;
- Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree"));
ms.height = font->get_height(font_size) + 4 * EDSCALE;
@@ -130,7 +130,7 @@ void EditorProperty::_notification(int p_what) {
{
int child_room = size.width * (1.0 - split_ratio);
- Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree"));
int height = font->get_height(font_size) + 4 * EDSCALE;
bool no_children = true;
@@ -234,7 +234,7 @@ void EditorProperty::_notification(int p_what) {
} break;
case NOTIFICATION_DRAW: {
- Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree"));
bool rtl = is_layout_rtl();
@@ -322,7 +322,7 @@ void EditorProperty::_notification(int p_what) {
Ref pinned_icon = get_theme_icon(SNAME("Pin"), SNAME("EditorIcons"));
int margin_w = get_theme_constant(SNAME("hseparator"), SNAME("Tree")) * 2;
int total_icon_w = margin_w + pinned_icon->get_width();
- int text_w = font->get_string_size(label, font_size, rtl ? HORIZONTAL_ALIGNMENT_RIGHT : HORIZONTAL_ALIGNMENT_LEFT, text_limit - total_icon_w).x;
+ int text_w = font->get_string_size(label, rtl ? HORIZONTAL_ALIGNMENT_RIGHT : HORIZONTAL_ALIGNMENT_LEFT, text_limit - total_icon_w, font_size).x;
int y = (size.height - pinned_icon->get_height()) / 2;
if (rtl) {
draw_texture(pinned_icon, Vector2(size.width - ofs - text_w - total_icon_w, y), color);
@@ -1073,12 +1073,12 @@ void EditorInspectorCategory::_notification(int p_what) {
draw_style_box(sb, Rect2(Vector2(), get_size()));
- Ref font = get_theme_font(SNAME("bold"), SNAME("EditorFonts"));
+ Ref font = get_theme_font(SNAME("bold"), SNAME("EditorFonts"));
int font_size = get_theme_font_size(SNAME("bold_size"), SNAME("EditorFonts"));
int hs = get_theme_constant(SNAME("h_separation"), SNAME("Tree"));
- int w = font->get_string_size(label, font_size).width;
+ int w = font->get_string_size(label, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size).width;
if (icon.is_valid()) {
w += hs + icon->get_width();
}
@@ -1102,7 +1102,7 @@ Control *EditorInspectorCategory::make_custom_tooltip(const String &p_text) cons
}
Size2 EditorInspectorCategory::get_minimum_size() const {
- Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree"));
Size2 ms;
@@ -1149,7 +1149,7 @@ void EditorInspectorSection::_notification(int p_what) {
return;
}
// Get the section header font.
- Ref font = get_theme_font(SNAME("bold"), SNAME("EditorFonts"));
+ Ref font = get_theme_font(SNAME("bold"), SNAME("EditorFonts"));
int font_size = get_theme_font_size(SNAME("bold_size"), SNAME("EditorFonts"));
// Get the right direction arrow texture, if the section is foldable.
@@ -1200,7 +1200,7 @@ void EditorInspectorSection::_notification(int p_what) {
case NOTIFICATION_DRAW: {
// Get the section header font.
- Ref font = get_theme_font(SNAME("bold"), SNAME("EditorFonts"));
+ Ref font = get_theme_font(SNAME("bold"), SNAME("EditorFonts"));
int font_size = get_theme_font_size(SNAME("bold_size"), SNAME("EditorFonts"));
// Get the right direction arrow texture, if the section is foldable.
@@ -1351,7 +1351,7 @@ Size2 EditorInspectorSection::get_minimum_size() const {
ms.height = MAX(ms.height, minsize.height);
}
- Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree"));
ms.height += font->get_height(font_size) + get_theme_constant(SNAME("v_separation"), SNAME("Tree"));
ms.width += get_theme_constant(SNAME("inspector_margin"), SNAME("Editor"));
@@ -1401,7 +1401,7 @@ void EditorInspectorSection::gui_input(const Ref &p_event) {
Ref mb = p_event;
if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
- Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
+ Ref font = get_theme_font(SNAME("font"), SNAME("Tree"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree"));
if (mb->get_position().y > font->get_height(font_size)) { //clicked outside
return;
@@ -3420,6 +3420,7 @@ void EditorInspector::_property_checked(const String &p_path, bool p_checked) {
if (editor_property_map.has(p_path)) {
for (EditorProperty *E : editor_property_map[p_path]) {
+ E->set_checked(p_checked);
E->update_property();
E->update_revert_and_pin_status();
E->update_cache();
diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp
index dbe44aee1b86..4f7680aa46dd 100644
--- a/editor/editor_log.cpp
+++ b/editor/editor_log.cpp
@@ -62,7 +62,7 @@ void EditorLog::_error_handler(void *p_self, const char *p_func, const char *p_f
}
void EditorLog::_update_theme() {
- Ref normal_font = get_theme_font(SNAME("output_source"), SNAME("EditorFonts"));
+ Ref normal_font = get_theme_font(SNAME("output_source"), SNAME("EditorFonts"));
if (normal_font.is_valid()) {
log->add_theme_font_override("normal_font", normal_font);
}
@@ -70,7 +70,7 @@ void EditorLog::_update_theme() {
log->add_theme_font_size_override("normal_font_size", get_theme_font_size(SNAME("output_source_size"), SNAME("EditorFonts")));
log->add_theme_color_override("selection_color", get_theme_color(SNAME("accent_color"), SNAME("Editor")) * Color(1, 1, 1, 0.4));
- Ref bold_font = get_theme_font(SNAME("bold"), SNAME("EditorFonts"));
+ Ref bold_font = get_theme_font(SNAME("bold"), SNAME("EditorFonts"));
if (bold_font.is_valid()) {
log->add_theme_font_override("bold_font", bold_font);
}
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index e0a5cab16775..e2d2015d0028 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -145,7 +145,7 @@
#include "editor/plugins/debugger_editor_plugin.h"
#include "editor/plugins/editor_debugger_plugin.h"
#include "editor/plugins/editor_preview_plugins.h"
-#include "editor/plugins/font_editor_plugin.h"
+#include "editor/plugins/font_config_plugin.h"
#include "editor/plugins/gdextension_export_plugin.h"
#include "editor/plugins/gpu_particles_2d_editor_plugin.h"
#include "editor/plugins/gpu_particles_3d_editor_plugin.h"
@@ -164,7 +164,6 @@
#include "editor/plugins/navigation_polygon_editor_plugin.h"
#include "editor/plugins/node_3d_editor_plugin.h"
#include "editor/plugins/occluder_instance_3d_editor_plugin.h"
-#include "editor/plugins/ot_features_plugin.h"
#include "editor/plugins/packed_scene_translation_parser_plugin.h"
#include "editor/plugins/path_2d_editor_plugin.h"
#include "editor/plugins/path_3d_editor_plugin.h"
@@ -186,7 +185,6 @@
#include "editor/plugins/sprite_frames_editor_plugin.h"
#include "editor/plugins/style_box_editor_plugin.h"
#include "editor/plugins/sub_viewport_preview_editor_plugin.h"
-#include "editor/plugins/text_control_editor_plugin.h"
#include "editor/plugins/text_editor.h"
#include "editor/plugins/texture_3d_editor_plugin.h"
#include "editor/plugins/texture_editor_plugin.h"
@@ -906,6 +904,31 @@ void EditorNode::_resources_changed(const Vector &p_resources) {
}
}
+const Vector> &EditorNode::get_project_fonts() const {
+ return fonts;
+}
+
+void EditorNode::_find_font_resources(EditorFileSystemDirectory *p_dir) {
+ for (int i = 0; i < p_dir->get_subdir_count(); i++) {
+ _find_font_resources(p_dir->get_subdir(i));
+ }
+
+ for (int i = 0; i < p_dir->get_file_count(); i++) {
+ if (p_dir->get_file_type(i) == "Font") {
+ Ref fd = ResourceLoader::load(p_dir->get_file_path(i));
+ if (fd.is_valid()) {
+ String name = fd->get_font_name();
+ String sty = fd->get_font_style_name();
+ if (sty.is_empty()) {
+ fonts.push_back(Pair(vformat("%s", name), p_dir->get_file_path(i)));
+ } else {
+ fonts.push_back(Pair