Merge pull request #44747 from bruvzg/missing_outlines

[CTL] Add missing theme properties for outlines, fix underline scaling, and RTL cell padding.
This commit is contained in:
Rémi Verschelde 2021-02-14 13:49:14 +01:00 committed by GitHub
commit cdfd3ffe15
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
35 changed files with 321 additions and 31 deletions

View file

@ -128,7 +128,7 @@
Text [Color] used when the [Button] is being hovered and pressed. Text [Color] used when the [Button] is being hovered and pressed.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
Text outline [Color] of the [Button]. The tint of text outline of the [Button].
</theme_item> </theme_item>
<theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )">
Text [Color] used when the [Button] is being pressed. Text [Color] used when the [Button] is being pressed.
@ -161,7 +161,7 @@
Default [StyleBox] for the [Button]. Default [StyleBox] for the [Button].
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0"> <theme_item name="outline_size" type="int" default="0">
Size of the [Button]'s text outline. The size of the text outline.
</theme_item> </theme_item>
<theme_item name="pressed" type="StyleBox"> <theme_item name="pressed" type="StyleBox">
[StyleBox] used when the [Button] is being pressed. [StyleBox] used when the [Button] is being pressed.

View file

@ -45,6 +45,9 @@
<theme_item name="font_hover_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_hover_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )">
The [CheckBox] text's font color when it's hovered and pressed. The [CheckBox] text's font color when it's hovered and pressed.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the [CheckBox].
</theme_item>
<theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )">
The [CheckBox] text's font color when it's pressed. The [CheckBox] text's font color when it's pressed.
</theme_item> </theme_item>
@ -63,6 +66,9 @@
<theme_item name="normal" type="StyleBox"> <theme_item name="normal" type="StyleBox">
The [StyleBox] to display as a background. The [StyleBox] to display as a background.
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
<theme_item name="pressed" type="StyleBox"> <theme_item name="pressed" type="StyleBox">
The [StyleBox] to display as a background when the [CheckBox] is pressed. The [StyleBox] to display as a background when the [CheckBox] is pressed.
</theme_item> </theme_item>

View file

@ -42,6 +42,9 @@
<theme_item name="font_hover_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_hover_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )">
The [CheckButton] text's font color when it's hovered and pressed. The [CheckButton] text's font color when it's hovered and pressed.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the [CheckButton].
</theme_item>
<theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )">
The [CheckButton] text's font color when it's pressed. The [CheckButton] text's font color when it's pressed.
</theme_item> </theme_item>
@ -84,6 +87,9 @@
<theme_item name="on_mirrored" type="Texture2D"> <theme_item name="on_mirrored" type="Texture2D">
The icon to display when the [CheckButton] is checked (for right-to-left layouts). The icon to display when the [CheckButton] is checked (for right-to-left layouts).
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
<theme_item name="pressed" type="StyleBox"> <theme_item name="pressed" type="StyleBox">
The [StyleBox] to display as a background when the [CheckButton] is pressed. The [StyleBox] to display as a background when the [CheckButton] is pressed.
</theme_item> </theme_item>

View file

@ -179,6 +179,9 @@
</theme_item> </theme_item>
<theme_item name="font_color" type="Color" default="Color( 0.88, 0.88, 0.88, 1 )"> <theme_item name="font_color" type="Color" default="Color( 0.88, 0.88, 0.88, 1 )">
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the [CodeEdit].
</theme_item>
<theme_item name="font_readonly_color" type="Color" default="Color( 0.88, 0.88, 0.88, 0.5 )"> <theme_item name="font_readonly_color" type="Color" default="Color( 0.88, 0.88, 0.88, 0.5 )">
</theme_item> </theme_item>
<theme_item name="font_selected_color" type="Color" default="Color( 0, 0, 0, 1 )"> <theme_item name="font_selected_color" type="Color" default="Color( 0, 0, 0, 1 )">
@ -194,6 +197,9 @@
</theme_item> </theme_item>
<theme_item name="normal" type="StyleBox"> <theme_item name="normal" type="StyleBox">
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
<theme_item name="read_only" type="StyleBox"> <theme_item name="read_only" type="StyleBox">
</theme_item> </theme_item>
<theme_item name="safe_line_number_color" type="Color" default="Color( 0.67, 0.78, 0.67, 0.6 )"> <theme_item name="safe_line_number_color" type="Color" default="Color( 0.67, 0.78, 0.67, 0.6 )">

View file

@ -79,6 +79,9 @@
<theme_item name="font_hover_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_hover_color" type="Color" default="Color( 1, 1, 1, 1 )">
Text [Color] used when the [ColorPickerButton] is being hovered. Text [Color] used when the [ColorPickerButton] is being hovered.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the [ColorPickerButton].
</theme_item>
<theme_item name="font_pressed_color" type="Color" default="Color( 0.8, 0.8, 0.8, 1 )"> <theme_item name="font_pressed_color" type="Color" default="Color( 0.8, 0.8, 0.8, 1 )">
Text [Color] used when the [ColorPickerButton] is being pressed. Text [Color] used when the [ColorPickerButton] is being pressed.
</theme_item> </theme_item>
@ -94,6 +97,9 @@
<theme_item name="normal" type="StyleBox"> <theme_item name="normal" type="StyleBox">
Default [StyleBox] for the [ColorPickerButton]. Default [StyleBox] for the [ColorPickerButton].
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
<theme_item name="pressed" type="StyleBox"> <theme_item name="pressed" type="StyleBox">
[StyleBox] used when the [ColorPickerButton] is being pressed. [StyleBox] used when the [ColorPickerButton] is being pressed.
</theme_item> </theme_item>

View file

@ -615,6 +615,9 @@
<theme_item name="font_color" type="Color" default="Color( 0.63, 0.63, 0.63, 1 )"> <theme_item name="font_color" type="Color" default="Color( 0.63, 0.63, 0.63, 1 )">
Default text [Color] of the item. Default text [Color] of the item.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the item.
</theme_item>
<theme_item name="font_selected_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_selected_color" type="Color" default="Color( 1, 1, 1, 1 )">
Text [Color] used when the item is selected. Text [Color] used when the item is selected.
</theme_item> </theme_item>
@ -633,6 +636,9 @@
<theme_item name="line_separation" type="int" default="2"> <theme_item name="line_separation" type="int" default="2">
The vertical spacing between each line of text. The vertical spacing between each line of text.
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the item text outline.
</theme_item>
<theme_item name="selected" type="StyleBox"> <theme_item name="selected" type="StyleBox">
[StyleBox] for the selected items, used when the [ItemList] is not being focused. [StyleBox] for the selected items, used when the [ItemList] is not being focused.
</theme_item> </theme_item>

View file

@ -380,6 +380,9 @@
<theme_item name="font_color" type="Color" default="Color( 0.88, 0.88, 0.88, 1 )"> <theme_item name="font_color" type="Color" default="Color( 0.88, 0.88, 0.88, 1 )">
Default font color. Default font color.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the [LineEdit].
</theme_item>
<theme_item name="font_selected_color" type="Color" default="Color( 0, 0, 0, 1 )"> <theme_item name="font_selected_color" type="Color" default="Color( 0, 0, 0, 1 )">
Font color for selected text (inside the selection rectangle). Font color for selected text (inside the selection rectangle).
</theme_item> </theme_item>
@ -395,6 +398,9 @@
<theme_item name="normal" type="StyleBox"> <theme_item name="normal" type="StyleBox">
Default background for the [LineEdit]. Default background for the [LineEdit].
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
<theme_item name="read_only" type="StyleBox"> <theme_item name="read_only" type="StyleBox">
Background used when [LineEdit] is in read-only mode ([member editable] is set to [code]false[/code]). Background used when [LineEdit] is in read-only mode ([member editable] is set to [code]false[/code]).
</theme_item> </theme_item>

View file

@ -84,12 +84,18 @@
<theme_item name="font_hover_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )"> <theme_item name="font_hover_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )">
Text [Color] used when the [LinkButton] is being hovered. Text [Color] used when the [LinkButton] is being hovered.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the [LinkButton].
</theme_item>
<theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )">
Text [Color] used when the [LinkButton] is being pressed. Text [Color] used when the [LinkButton] is being pressed.
</theme_item> </theme_item>
<theme_item name="font_size" type="int"> <theme_item name="font_size" type="int">
Font size of the [LinkButton]'s text. Font size of the [LinkButton]'s text.
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
<theme_item name="underline_spacing" type="int" default="2"> <theme_item name="underline_spacing" type="int" default="2">
The vertical space between the baseline of text and the underline. The vertical space between the baseline of text and the underline.
</theme_item> </theme_item>

View file

@ -65,6 +65,9 @@
<theme_item name="font_hover_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )"> <theme_item name="font_hover_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )">
Text [Color] used when the [MenuButton] is being hovered. Text [Color] used when the [MenuButton] is being hovered.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the [MenuButton].
</theme_item>
<theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )">
Text [Color] used when the [MenuButton] is being pressed. Text [Color] used when the [MenuButton] is being pressed.
</theme_item> </theme_item>
@ -80,6 +83,9 @@
<theme_item name="normal" type="StyleBox"> <theme_item name="normal" type="StyleBox">
Default [StyleBox] for the [MenuButton]. Default [StyleBox] for the [MenuButton].
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
<theme_item name="pressed" type="StyleBox"> <theme_item name="pressed" type="StyleBox">
[StyleBox] used when the [MenuButton] is being pressed. [StyleBox] used when the [MenuButton] is being pressed.
</theme_item> </theme_item>

View file

@ -259,6 +259,9 @@
<theme_item name="font_hover_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )"> <theme_item name="font_hover_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )">
Text [Color] used when the [OptionButton] is being hovered. Text [Color] used when the [OptionButton] is being hovered.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the [OptionButton].
</theme_item>
<theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_pressed_color" type="Color" default="Color( 1, 1, 1, 1 )">
Text [Color] used when the [OptionButton] is being pressed. Text [Color] used when the [OptionButton] is being pressed.
</theme_item> </theme_item>
@ -280,6 +283,9 @@
<theme_item name="normal_mirrored" type="StyleBox"> <theme_item name="normal_mirrored" type="StyleBox">
Default [StyleBox] for the [OptionButton] (for right-to-left layouts). Default [StyleBox] for the [OptionButton] (for right-to-left layouts).
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
<theme_item name="pressed" type="StyleBox"> <theme_item name="pressed" type="StyleBox">
[StyleBox] used when the [OptionButton] is being pressed (for left-to-right layouts). [StyleBox] used when the [OptionButton] is being pressed (for left-to-right layouts).
</theme_item> </theme_item>

View file

@ -729,6 +729,9 @@
<theme_item name="font_hover_color" type="Color" default="Color( 0.88, 0.88, 0.88, 1 )"> <theme_item name="font_hover_color" type="Color" default="Color( 0.88, 0.88, 0.88, 1 )">
[Color] used for the hovered text. [Color] used for the hovered text.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the menu item.
</theme_item>
<theme_item name="font_separator_color" type="Color" default="Color( 0.88, 0.88, 0.88, 1 )"> <theme_item name="font_separator_color" type="Color" default="Color( 0.88, 0.88, 0.88, 1 )">
[Color] used for labeled separators' text. See [method add_separator]. [Color] used for labeled separators' text. See [method add_separator].
</theme_item> </theme_item>
@ -747,6 +750,9 @@
<theme_item name="labeled_separator_right" type="StyleBox"> <theme_item name="labeled_separator_right" type="StyleBox">
[StyleBox] for the right side of labeled separator. See [method add_separator]. [StyleBox] for the right side of labeled separator. See [method add_separator].
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the item text outline.
</theme_item>
<theme_item name="panel" type="StyleBox"> <theme_item name="panel" type="StyleBox">
Default [StyleBox] of the [PopupMenu] items. Default [StyleBox] of the [PopupMenu] items.
</theme_item> </theme_item>

View file

@ -32,11 +32,17 @@
<theme_item name="font_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )"> <theme_item name="font_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )">
The color of the text. The color of the text.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the [ProgressBar].
</theme_item>
<theme_item name="font_shadow_color" type="Color" default="Color( 0, 0, 0, 1 )"> <theme_item name="font_shadow_color" type="Color" default="Color( 0, 0, 0, 1 )">
The color of the text's shadow. The color of the text's shadow.
</theme_item> </theme_item>
<theme_item name="font_size" type="int"> <theme_item name="font_size" type="int">
Font size used to draw the fill percentage if [member percent_visible] is [code]true[/code]. Font size used to draw the fill percentage if [member percent_visible] is [code]true[/code].
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
</theme_items> </theme_items>
</class> </class>

View file

@ -597,6 +597,9 @@
<theme_item name="focus" type="StyleBox"> <theme_item name="focus" type="StyleBox">
The background The background used when the [RichTextLabel] is focused. The background The background used when the [RichTextLabel] is focused.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The default tint of text outline.
</theme_item>
<theme_item name="font_selected_color" type="Color" default="Color( 0, 0, 0, 1 )"> <theme_item name="font_selected_color" type="Color" default="Color( 0, 0, 0, 1 )">
The color of selected text, used when [member selection_enabled] is [code]true[/code]. The color of selected text, used when [member selection_enabled] is [code]true[/code].
</theme_item> </theme_item>
@ -627,6 +630,9 @@
<theme_item name="normal_font_size" type="int"> <theme_item name="normal_font_size" type="int">
The default text font size. The default text font size.
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
<theme_item name="selection_color" type="Color" default="Color( 0.1, 0.1, 1, 0.8 )"> <theme_item name="selection_color" type="Color" default="Color( 0.1, 0.1, 1, 0.8 )">
The color of the selection box. The color of the selection box.
</theme_item> </theme_item>

View file

@ -201,6 +201,9 @@
<theme_item name="font_disabled_color" type="Color" default="Color( 0.9, 0.9, 0.9, 0.2 )"> <theme_item name="font_disabled_color" type="Color" default="Color( 0.9, 0.9, 0.9, 0.2 )">
Font color of disabled tabs. Font color of disabled tabs.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the tab name.
</theme_item>
<theme_item name="font_selected_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )"> <theme_item name="font_selected_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )">
Font color of the currently selected tab. Font color of the currently selected tab.
</theme_item> </theme_item>
@ -225,6 +228,9 @@
<theme_item name="menu_highlight" type="Texture2D"> <theme_item name="menu_highlight" type="Texture2D">
The icon for the menu button (see [method set_popup]) when it's being hovered with the cursor. The icon for the menu button (see [method set_popup]) when it's being hovered with the cursor.
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the tab text outline.
</theme_item>
<theme_item name="panel" type="StyleBox"> <theme_item name="panel" type="StyleBox">
The style for the background fill. The style for the background fill.
</theme_item> </theme_item>

View file

@ -362,6 +362,9 @@
<theme_item name="font_disabled_color" type="Color" default="Color( 0.9, 0.9, 0.9, 0.2 )"> <theme_item name="font_disabled_color" type="Color" default="Color( 0.9, 0.9, 0.9, 0.2 )">
Font color of disabled tabs. Font color of disabled tabs.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the tab name.
</theme_item>
<theme_item name="font_selected_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )"> <theme_item name="font_selected_color" type="Color" default="Color( 0.94, 0.94, 0.94, 1 )">
Font color of the currently selected tab. Font color of the currently selected tab.
</theme_item> </theme_item>
@ -380,6 +383,9 @@
<theme_item name="increment_highlight" type="Texture2D"> <theme_item name="increment_highlight" type="Texture2D">
Icon for the right arrow button that appears when there are too many tabs to fit in the container width. Used when the button is being hovered with the cursor. Icon for the right arrow button that appears when there are too many tabs to fit in the container width. Used when the button is being hovered with the cursor.
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the tab text outline.
</theme_item>
<theme_item name="panel" type="StyleBox"> <theme_item name="panel" type="StyleBox">
</theme_item> </theme_item>
<theme_item name="tab_disabled" type="StyleBox"> <theme_item name="tab_disabled" type="StyleBox">

View file

@ -954,6 +954,9 @@
<theme_item name="font_color" type="Color" default="Color( 0.88, 0.88, 0.88, 1 )"> <theme_item name="font_color" type="Color" default="Color( 0.88, 0.88, 0.88, 1 )">
Sets the font [Color]. Sets the font [Color].
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the [TextEdit].
</theme_item>
<theme_item name="font_readonly_color" type="Color" default="Color( 0.88, 0.88, 0.88, 0.5 )"> <theme_item name="font_readonly_color" type="Color" default="Color( 0.88, 0.88, 0.88, 0.5 )">
</theme_item> </theme_item>
<theme_item name="font_selected_color" type="Color" default="Color( 0, 0, 0, 1 )"> <theme_item name="font_selected_color" type="Color" default="Color( 0, 0, 0, 1 )">
@ -971,6 +974,9 @@
<theme_item name="normal" type="StyleBox"> <theme_item name="normal" type="StyleBox">
Sets the [StyleBox] of this [TextEdit]. Sets the [StyleBox] of this [TextEdit].
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
<theme_item name="read_only" type="StyleBox"> <theme_item name="read_only" type="StyleBox">
Sets the [StyleBox] of this [TextEdit] when [member readonly] is enabled. Sets the [StyleBox] of this [TextEdit] when [member readonly] is enabled.
</theme_item> </theme_item>

View file

@ -524,6 +524,9 @@
<theme_item name="font_color" type="Color" default="Color( 0.69, 0.69, 0.69, 1 )"> <theme_item name="font_color" type="Color" default="Color( 0.69, 0.69, 0.69, 1 )">
Default text [Color] of the item. Default text [Color] of the item.
</theme_item> </theme_item>
<theme_item name="font_outline_color" type="Color" default="Color( 1, 1, 1, 1 )">
The tint of text outline of the item.
</theme_item>
<theme_item name="font_selected_color" type="Color" default="Color( 1, 1, 1, 1 )"> <theme_item name="font_selected_color" type="Color" default="Color( 1, 1, 1, 1 )">
Text [Color] used when the item is selected. Text [Color] used when the item is selected.
</theme_item> </theme_item>
@ -539,6 +542,9 @@
<theme_item name="item_margin" type="int" default="12"> <theme_item name="item_margin" type="int" default="12">
The horizontal margin at the start of an item. This is used when folding is enabled for the item. The horizontal margin at the start of an item. This is used when folding is enabled for the item.
</theme_item> </theme_item>
<theme_item name="outline_size" type="int" default="0">
The size of the text outline.
</theme_item>
<theme_item name="relationship_line_color" type="Color" default="Color( 0.27, 0.27, 0.27, 1 )"> <theme_item name="relationship_line_color" type="Color" default="Color( 0.27, 0.27, 0.27, 1 )">
[Color] of the relationship lines. [Color] of the relationship lines.
</theme_item> </theme_item>

View file

@ -474,8 +474,17 @@
</theme_item> </theme_item>
<theme_item name="title_font" type="Font"> <theme_item name="title_font" type="Font">
</theme_item> </theme_item>
<theme_item name="title_font_size" type="int">
The size of the title font.
</theme_item>
<theme_item name="title_height" type="int" default="20"> <theme_item name="title_height" type="int" default="20">
</theme_item> </theme_item>
<theme_item name="title_outline_modulate" type="Color" default="Color( 1, 1, 1, 1 )">
The color of the title outline.
</theme_item>
<theme_item name="title_outline_size" type="int" default="0">
The size of the title outline.
</theme_item>
<theme_item name="window_panel" type="StyleBox"> <theme_item name="window_panel" type="StyleBox">
</theme_item> </theme_item>
</theme_items> </theme_items>

View file

@ -124,8 +124,8 @@ DynamicFontDataAdvanced::DataAtSize *DynamicFontDataAdvanced::get_data_for_size(
fds->size = p_size; fds->size = p_size;
fds->ascent = (fds->face->size->metrics.ascender / 64.0) / oversampling * fds->scale_color_font; fds->ascent = (fds->face->size->metrics.ascender / 64.0) / oversampling * fds->scale_color_font;
fds->descent = (-fds->face->size->metrics.descender / 64.0) / oversampling * fds->scale_color_font; fds->descent = (-fds->face->size->metrics.descender / 64.0) / oversampling * fds->scale_color_font;
fds->underline_position = -fds->face->underline_position / 64.0 / oversampling * fds->scale_color_font; fds->underline_position = (-FT_MulFix(fds->face->underline_position, fds->face->size->metrics.y_scale) / 64.0) / oversampling * fds->scale_color_font;
fds->underline_thickness = fds->face->underline_thickness / 64.0 / oversampling * fds->scale_color_font; fds->underline_thickness = (FT_MulFix(fds->face->underline_thickness, fds->face->size->metrics.y_scale) / 64.0) / oversampling * fds->scale_color_font;
//Load os2 TTF pable //Load os2 TTF pable
fds->os2 = (TT_OS2 *)FT_Get_Sfnt_Table(fds->face, FT_SFNT_OS2); fds->os2 = (TT_OS2 *)FT_Get_Sfnt_Table(fds->face, FT_SFNT_OS2);

View file

@ -124,8 +124,9 @@ DynamicFontDataFallback::DataAtSize *DynamicFontDataFallback::get_data_for_size(
fds->size = p_size; fds->size = p_size;
fds->ascent = (fds->face->size->metrics.ascender / 64.0) / oversampling * fds->scale_color_font; fds->ascent = (fds->face->size->metrics.ascender / 64.0) / oversampling * fds->scale_color_font;
fds->descent = (-fds->face->size->metrics.descender / 64.0) / oversampling * fds->scale_color_font; fds->descent = (-fds->face->size->metrics.descender / 64.0) / oversampling * fds->scale_color_font;
fds->underline_position = -fds->face->underline_position / 64.0 / oversampling * fds->scale_color_font; fds->underline_position = (-FT_MulFix(fds->face->underline_position, fds->face->size->metrics.y_scale) / 64.0) / oversampling * fds->scale_color_font;
fds->underline_thickness = fds->face->underline_thickness / 64.0 / oversampling * fds->scale_color_font; fds->underline_thickness = (FT_MulFix(fds->face->underline_thickness, fds->face->size->metrics.y_scale) / 64.0) / oversampling * fds->scale_color_font;
if (p_outline_size != 0) { if (p_outline_size != 0) {
size_cache_outline[id] = fds; size_cache_outline[id] = fds;
} else { } else {

View file

@ -883,6 +883,8 @@ void ItemList::_notification(int p_what) {
int vseparation = get_theme_constant("vseparation"); int vseparation = get_theme_constant("vseparation");
int icon_margin = get_theme_constant("icon_margin"); int icon_margin = get_theme_constant("icon_margin");
int line_separation = get_theme_constant("line_separation"); int line_separation = get_theme_constant("line_separation");
Color font_outline_color = get_theme_color("font_outline_color");
int outline_size = get_theme_constant("outline_size");
Ref<StyleBox> sbsel = has_focus() ? get_theme_stylebox("selected_focus") : get_theme_stylebox("selected"); Ref<StyleBox> sbsel = has_focus() ? get_theme_stylebox("selected_focus") : get_theme_stylebox("selected");
Ref<StyleBox> cursor = has_focus() ? get_theme_stylebox("cursor") : get_theme_stylebox("cursor_unfocused"); Ref<StyleBox> cursor = has_focus() ? get_theme_stylebox("cursor") : get_theme_stylebox("cursor_unfocused");
@ -1204,6 +1206,10 @@ void ItemList::_notification(int p_what) {
items.write[i].text_buf->set_width(max_len); items.write[i].text_buf->set_width(max_len);
items.write[i].text_buf->set_align(HALIGN_CENTER); items.write[i].text_buf->set_align(HALIGN_CENTER);
if (outline_size > 0 && font_outline_color.a > 0) {
items[i].text_buf->draw_outline(get_canvas_item(), text_ofs, outline_size, font_outline_color);
}
items[i].text_buf->draw(get_canvas_item(), text_ofs, modulate); items[i].text_buf->draw(get_canvas_item(), text_ofs, modulate);
} else { } else {
if (fixed_column_width > 0) { if (fixed_column_width > 0) {
@ -1230,6 +1236,11 @@ void ItemList::_notification(int p_what) {
} else { } else {
items.write[i].text_buf->set_align(HALIGN_LEFT); items.write[i].text_buf->set_align(HALIGN_LEFT);
} }
if (outline_size > 0 && font_outline_color.a > 0) {
items[i].text_buf->draw_outline(get_canvas_item(), text_ofs, outline_size, font_outline_color);
}
items[i].text_buf->draw(get_canvas_item(), text_ofs, modulate); items[i].text_buf->draw(get_canvas_item(), text_ofs, modulate);
} }
} }

View file

@ -835,6 +835,24 @@ void LineEdit::_notification(int p_what) {
// Draw text. // Draw text.
ofs.y += TS->shaped_text_get_ascent(text_rid); ofs.y += TS->shaped_text_get_ascent(text_rid);
Color font_outline_color = get_theme_color("font_outline_color");
int outline_size = get_theme_constant("outline_size");
if (outline_size > 0 && font_outline_color.a > 0) {
Vector2 oofs = ofs;
for (int i = 0; i < gl_size; i++) {
for (int j = 0; j < glyphs[i].repeat; j++) {
if (ceil(oofs.x) >= x_ofs && (oofs.x + glyphs[i].advance) <= ofs_max) {
if (glyphs[i].font_rid != RID()) {
TS->font_draw_glyph_outline(glyphs[i].font_rid, ci, glyphs[i].font_size, outline_size, oofs + Vector2(glyphs[i].x_off, glyphs[i].y_off), glyphs[i].index, font_outline_color);
}
}
oofs.x += glyphs[i].advance;
}
if (oofs.x >= ofs_max) {
break;
}
}
}
for (int i = 0; i < gl_size; i++) { for (int i = 0; i < gl_size; i++) {
bool selected = selection.enabled && glyphs[i].start >= selection.begin && glyphs[i].end <= selection.end; bool selected = selection.enabled && glyphs[i].start >= selection.begin && glyphs[i].end <= selection.end;
for (int j = 0; j < glyphs[i].repeat; j++) { for (int j = 0; j < glyphs[i].repeat; j++) {

View file

@ -191,9 +191,17 @@ void LinkButton::_notification(int p_what) {
int width = text_buf->get_line_width(); int width = text_buf->get_line_width();
Color font_outline_color = get_theme_color("font_outline_color");
int outline_size = get_theme_constant("outline_size");
if (is_layout_rtl()) { if (is_layout_rtl()) {
if (outline_size > 0 && font_outline_color.a > 0) {
text_buf->draw_outline(get_canvas_item(), Vector2(size.width - width, 0), outline_size, font_outline_color);
}
text_buf->draw(get_canvas_item(), Vector2(size.width - width, 0), color); text_buf->draw(get_canvas_item(), Vector2(size.width - width, 0), color);
} else { } else {
if (outline_size > 0 && font_outline_color.a > 0) {
text_buf->draw_outline(get_canvas_item(), Vector2(0, 0), outline_size, font_outline_color);
}
text_buf->draw(get_canvas_item(), Vector2(0, 0), color); text_buf->draw(get_canvas_item(), Vector2(0, 0), color);
} }

View file

@ -572,17 +572,31 @@ void PopupMenu::_draw_items() {
} }
// Text // Text
Color font_outline_color = get_theme_color("font_outline_color");
int outline_size = get_theme_constant("outline_size");
if (items[i].separator) { if (items[i].separator) {
if (text != String()) { if (text != String()) {
int center = (display_width - items[i].text_buf->get_size().width) / 2; int center = (display_width - items[i].text_buf->get_size().width) / 2;
items[i].text_buf->draw(ci, Point2(center, item_ofs.y + Math::floor((h - items[i].text_buf->get_size().y) / 2.0)), font_separator_color); Vector2 text_pos = Point2(center, item_ofs.y + Math::floor((h - items[i].text_buf->get_size().y) / 2.0));
if (outline_size > 0 && font_outline_color.a > 0) {
items[i].text_buf->draw_outline(ci, text_pos, outline_size, font_outline_color);
}
items[i].text_buf->draw(ci, text_pos, font_separator_color);
} }
} else { } else {
item_ofs.x += icon_ofs + check_ofs; item_ofs.x += icon_ofs + check_ofs;
if (rtl) { if (rtl) {
items[i].text_buf->draw(ci, Size2(control->get_size().width - items[i].text_buf->get_size().width - item_ofs.x, item_ofs.y) + Point2(0, Math::floor((h - items[i].text_buf->get_size().y) / 2.0)), items[i].disabled ? font_disabled_color : (i == mouse_over ? font_hover_color : font_color)); Vector2 text_pos = Size2(control->get_size().width - items[i].text_buf->get_size().width - item_ofs.x, item_ofs.y) + Point2(0, Math::floor((h - items[i].text_buf->get_size().y) / 2.0));
if (outline_size > 0 && font_outline_color.a > 0) {
items[i].text_buf->draw_outline(ci, text_pos, outline_size, font_outline_color);
}
items[i].text_buf->draw(ci, text_pos, items[i].disabled ? font_disabled_color : (i == mouse_over ? font_hover_color : font_color));
} else { } else {
items[i].text_buf->draw(ci, item_ofs + Point2(0, Math::floor((h - items[i].text_buf->get_size().y) / 2.0)), items[i].disabled ? font_disabled_color : (i == mouse_over ? font_hover_color : font_color)); Vector2 text_pos = item_ofs + Point2(0, Math::floor((h - items[i].text_buf->get_size().y) / 2.0));
if (outline_size > 0 && font_outline_color.a > 0) {
items[i].text_buf->draw_outline(ci, text_pos, outline_size, font_outline_color);
}
items[i].text_buf->draw(ci, text_pos, items[i].disabled ? font_disabled_color : (i == mouse_over ? font_hover_color : font_color));
} }
} }
@ -593,7 +607,11 @@ void PopupMenu::_draw_items() {
} else { } else {
item_ofs.x = display_width - style->get_margin(SIDE_RIGHT) - items[i].accel_text_buf->get_size().x; item_ofs.x = display_width - style->get_margin(SIDE_RIGHT) - items[i].accel_text_buf->get_size().x;
} }
items[i].accel_text_buf->draw(ci, item_ofs + Point2(0, Math::floor((h - items[i].text_buf->get_size().y) / 2.0)), i == mouse_over ? font_hover_color : font_accelerator_color); Vector2 text_pos = item_ofs + Point2(0, Math::floor((h - items[i].text_buf->get_size().y) / 2.0));
if (outline_size > 0 && font_outline_color.a > 0) {
items[i].accel_text_buf->draw_outline(ci, text_pos, outline_size, font_outline_color);
}
items[i].accel_text_buf->draw(ci, text_pos, i == mouse_over ? font_hover_color : font_accelerator_color);
} }
// Cache the item vertical offset from the first item and the height // Cache the item vertical offset from the first item and the height

View file

@ -74,7 +74,13 @@ void ProgressBar::_notification(int p_what) {
if (percent_visible) { if (percent_visible) {
String txt = TS->format_number(itos(int(get_as_ratio() * 100))) + TS->percent_sign(); String txt = TS->format_number(itos(int(get_as_ratio() * 100))) + TS->percent_sign();
TextLine tl = TextLine(txt, font, font_size); TextLine tl = TextLine(txt, font, font_size);
tl.draw(get_canvas_item(), (Point2(get_size().width - tl.get_size().x, get_size().height - tl.get_size().y) / 2).round(), font_color); Vector2 text_pos = (Point2(get_size().width - tl.get_size().x, get_size().height - tl.get_size().y) / 2).round();
Color font_outline_color = get_theme_color("font_outline_color");
int outline_size = get_theme_constant("outline_size");
if (outline_size > 0 && font_outline_color.a > 0) {
tl.draw_outline(get_canvas_item(), text_pos, outline_size, font_outline_color);
}
tl.draw(get_canvas_item(), text_pos, font_color);
} }
} }
} }

View file

@ -776,6 +776,7 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
Color odd_row_bg = get_theme_color("table_odd_row_bg"); Color odd_row_bg = get_theme_color("table_odd_row_bg");
Color even_row_bg = get_theme_color("table_even_row_bg"); Color even_row_bg = get_theme_color("table_even_row_bg");
Color border = get_theme_color("table_border"); Color border = get_theme_color("table_border");
int hseparation = get_theme_constant("table_hseparation");
int col_count = table->columns.size(); int col_count = table->columns.size();
int row_count = table->rows.size(); int row_count = table->rows.size();
@ -792,11 +793,11 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
coff.x = rect.size.width - table->columns[col].width - coff.x; coff.x = rect.size.width - table->columns[col].width - coff.x;
} }
if (row % 2 == 0) { if (row % 2 == 0) {
draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position, Size2(table->columns[col].width, table->rows[row])), (frame->odd_row_bg != Color(0, 0, 0, 0) ? frame->odd_row_bg : odd_row_bg), true); draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position, Size2(table->columns[col].width + hseparation + frame->padding.position.x + frame->padding.size.x, table->rows[row])), (frame->odd_row_bg != Color(0, 0, 0, 0) ? frame->odd_row_bg : odd_row_bg), true);
} else { } else {
draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position, Size2(table->columns[col].width, table->rows[row])), (frame->even_row_bg != Color(0, 0, 0, 0) ? frame->even_row_bg : even_row_bg), true); draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position, Size2(table->columns[col].width + hseparation + frame->padding.position.x + frame->padding.size.x, table->rows[row])), (frame->even_row_bg != Color(0, 0, 0, 0) ? frame->even_row_bg : even_row_bg), true);
} }
draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position, Size2(table->columns[col].width, table->rows[row])), (frame->border != Color(0, 0, 0, 0) ? frame->border : border), false); draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position, Size2(table->columns[col].width + hseparation + frame->padding.position.x + frame->padding.size.x, table->rows[row])), (frame->border != Color(0, 0, 0, 0) ? frame->border : border), false);
} }
for (int j = 0; j < frame->lines.size(); j++) { for (int j = 0; j < frame->lines.size(); j++) {
@ -819,8 +820,8 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
// Draw oulines and shadow. // Draw oulines and shadow.
for (int i = 0; i < gl_size; i++) { for (int i = 0; i < gl_size; i++) {
Item *it = _get_item_at_pos(it_from, it_to, glyphs[i].start); Item *it = _get_item_at_pos(it_from, it_to, glyphs[i].start);
int size = _find_outline_size(it); int size = _find_outline_size(it, p_outline_size);
Color font_color = _find_outline_color(it, Color(0, 0, 0, 0)); Color font_color = _find_outline_color(it, p_outline_color);
if (size <= 0) { if (size <= 0) {
gloff.x += glyphs[i].advance; gloff.x += glyphs[i].advance;
continue; continue;
@ -1398,7 +1399,7 @@ void RichTextLabel::_notification(int p_what) {
} }
Ref<Font> base_font = get_theme_font("normal_font"); Ref<Font> base_font = get_theme_font("normal_font");
Color base_color = get_theme_color("default_color"); Color base_color = get_theme_color("default_color");
Color outline_color = get_theme_color("outline_color"); Color outline_color = get_theme_color("font_outline_color");
int outline_size = get_theme_constant("outline_size"); int outline_size = get_theme_constant("outline_size");
Color font_shadow_color = get_theme_color("font_shadow_color"); Color font_shadow_color = get_theme_color("font_shadow_color");
bool use_outline = get_theme_constant("shadow_as_outline"); bool use_outline = get_theme_constant("shadow_as_outline");
@ -1753,7 +1754,7 @@ int RichTextLabel::_find_font_size(Item *p_item) {
return -1; return -1;
} }
int RichTextLabel::_find_outline_size(Item *p_item) { int RichTextLabel::_find_outline_size(Item *p_item, int p_default) {
Item *sizeitem = p_item; Item *sizeitem = p_item;
while (sizeitem) { while (sizeitem) {
@ -1765,7 +1766,7 @@ int RichTextLabel::_find_outline_size(Item *p_item) {
sizeitem = sizeitem->parent; sizeitem = sizeitem->parent;
} }
return 0; return p_default;
} }
Dictionary RichTextLabel::_find_font_features(Item *p_item) { Dictionary RichTextLabel::_find_font_features(Item *p_item) {

View file

@ -405,7 +405,7 @@ private:
Ref<Font> _find_font(Item *p_item); Ref<Font> _find_font(Item *p_item);
int _find_font_size(Item *p_item); int _find_font_size(Item *p_item);
Dictionary _find_font_features(Item *p_item); Dictionary _find_font_features(Item *p_item);
int _find_outline_size(Item *p_item); int _find_outline_size(Item *p_item, int p_default);
ItemList *_find_list_item(Item *p_item); ItemList *_find_list_item(Item *p_item);
ItemDropcap *_find_dc_item(Item *p_item); ItemDropcap *_find_dc_item(Item *p_item);
int _find_list(Item *p_item, Vector<int> &r_index, Vector<ItemList *> &r_list); int _find_list(Item *p_item, Vector<int> &r_index, Vector<ItemList *> &r_list);

View file

@ -535,6 +535,8 @@ void TabContainer::_draw_tab(Ref<StyleBox> &p_tab_style, Color &p_font_color, in
Vector<Control *> tabs = _get_tabs(); Vector<Control *> tabs = _get_tabs();
RID canvas = get_canvas_item(); RID canvas = get_canvas_item();
Ref<Font> font = get_theme_font("font"); Ref<Font> font = get_theme_font("font");
Color font_outline_color = get_theme_color("font_outline_color");
int outline_size = get_theme_constant("outline_size");
int icon_text_distance = get_theme_constant("icon_separation"); int icon_text_distance = get_theme_constant("icon_separation");
int tab_width = _get_tab_width(p_index); int tab_width = _get_tab_width(p_index);
int header_height = _get_top_margin(); int header_height = _get_top_margin();
@ -565,6 +567,9 @@ void TabContainer::_draw_tab(Ref<StyleBox> &p_tab_style, Color &p_font_color, in
// Draw the tab text. // Draw the tab text.
Point2i text_pos(x_content, y_center - text_buf[p_index]->get_size().y / 2); Point2i text_pos(x_content, y_center - text_buf[p_index]->get_size().y / 2);
if (outline_size > 0 && font_outline_color.a > 0) {
text_buf[p_index]->draw_outline(canvas, text_pos, outline_size, font_outline_color);
}
text_buf[p_index]->draw(canvas, text_pos, p_font_color); text_buf[p_index]->draw(canvas, text_pos, p_font_color);
} }

View file

@ -275,6 +275,9 @@ void Tabs::_notification(int p_what) {
Color font_unselected_color = get_theme_color("font_unselected_color"); Color font_unselected_color = get_theme_color("font_unselected_color");
Color font_disabled_color = get_theme_color("font_disabled_color"); Color font_disabled_color = get_theme_color("font_disabled_color");
Ref<Texture2D> close = get_theme_icon("close"); Ref<Texture2D> close = get_theme_icon("close");
Color font_outline_color = get_theme_color("font_outline_color");
int outline_size = get_theme_constant("outline_size");
Vector2 size = get_size(); Vector2 size = get_size();
bool rtl = is_layout_rtl(); bool rtl = is_layout_rtl();
@ -357,9 +360,17 @@ void Tabs::_notification(int p_what) {
} }
if (rtl) { if (rtl) {
tabs[i].text_buf->draw(ci, Point2i(size.width - w - tabs[i].text_buf->get_size().x, sb->get_margin(SIDE_TOP) + ((sb_rect.size.y - sb_ms.y) - tabs[i].text_buf->get_size().y) / 2), col); Vector2 text_pos = Point2i(size.width - w - tabs[i].text_buf->get_size().x, sb->get_margin(SIDE_TOP) + ((sb_rect.size.y - sb_ms.y) - tabs[i].text_buf->get_size().y) / 2);
if (outline_size > 0 && font_outline_color.a > 0) {
tabs[i].text_buf->draw_outline(ci, text_pos, outline_size, font_outline_color);
}
tabs[i].text_buf->draw(ci, text_pos, col);
} else { } else {
tabs[i].text_buf->draw(ci, Point2i(w, sb->get_margin(SIDE_TOP) + ((sb_rect.size.y - sb_ms.y) - tabs[i].text_buf->get_size().y) / 2), col); Vector2 text_pos = Point2i(w, sb->get_margin(SIDE_TOP) + ((sb_rect.size.y - sb_ms.y) - tabs[i].text_buf->get_size().y) / 2);
if (outline_size > 0 && font_outline_color.a > 0) {
tabs[i].text_buf->draw_outline(ci, text_pos, outline_size, font_outline_color);
}
tabs[i].text_buf->draw(ci, text_pos, col);
} }
w += tabs[i].size_text; w += tabs[i].size_text;

View file

@ -1117,6 +1117,9 @@ void TextEdit::_notification(int p_what) {
tl->add_string(text, cache.font, cache.font_size); tl->add_string(text, cache.font, cache.font_size);
int yofs = ofs_y + (row_height - tl->get_size().y) / 2; int yofs = ofs_y + (row_height - tl->get_size().y) / 2;
if (cache.outline_size > 0 && cache.outline_color.a > 0) {
tl->draw_outline(ci, Point2(gutter_offset + ofs_x, yofs), cache.outline_size, cache.outline_color);
}
tl->draw(ci, Point2(gutter_offset + ofs_x, yofs), get_line_gutter_item_color(line, g)); tl->draw(ci, Point2(gutter_offset + ofs_x, yofs), get_line_gutter_item_color(line, g));
} break; } break;
case GUTTER_TPYE_ICON: { case GUTTER_TPYE_ICON: {
@ -1273,6 +1276,22 @@ void TextEdit::_notification(int p_what) {
ofs_y += ldata->get_line_ascent(line_wrap_index); ofs_y += ldata->get_line_ascent(line_wrap_index);
int char_ofs = 0; int char_ofs = 0;
if (cache.outline_size > 0 && cache.outline_color.a > 0) {
for (int j = 0; j < gl_size; j++) {
for (int k = 0; k < glyphs[j].repeat; k++) {
if ((char_ofs + char_margin) >= xmargin_beg && (char_ofs + glyphs[j].advance + char_margin) <= xmargin_end) {
if (glyphs[j].font_rid != RID()) {
TS->font_draw_glyph_outline(glyphs[j].font_rid, ci, glyphs[j].font_size, cache.outline_size, Vector2(char_margin + char_ofs + ofs_x + glyphs[j].x_off, ofs_y + glyphs[j].y_off), glyphs[j].index, cache.outline_color);
}
}
char_ofs += glyphs[j].advance;
}
if ((char_ofs + char_margin) >= xmargin_end) {
break;
}
}
char_ofs = 0;
}
for (int j = 0; j < gl_size; j++) { for (int j = 0; j < gl_size; j++) {
if (color_map.has(glyphs[j].start)) { if (color_map.has(glyphs[j].start)) {
current_color = color_map[glyphs[j].start].get("color"); current_color = color_map[glyphs[j].start].get("color");
@ -1601,6 +1620,9 @@ void TextEdit::_notification(int p_what) {
} }
tl->set_align(HALIGN_LEFT); tl->set_align(HALIGN_LEFT);
} }
if (cache.outline_size > 0 && cache.outline_color.a > 0) {
tl->draw_outline(ci, title_pos, cache.outline_size, cache.outline_color);
}
tl->draw(ci, title_pos, completion_options[l].font_color); tl->draw(ci, title_pos, completion_options[l].font_color);
} }
@ -4944,6 +4966,8 @@ void TextEdit::_update_caches() {
cache.completion_font_color = get_theme_color("completion_font_color"); cache.completion_font_color = get_theme_color("completion_font_color");
cache.font = get_theme_font("font"); cache.font = get_theme_font("font");
cache.font_size = get_theme_font_size("font_size"); cache.font_size = get_theme_font_size("font_size");
cache.outline_color = get_theme_color("font_outline_color");
cache.outline_size = get_theme_constant("outline_size");
cache.caret_color = get_theme_color("caret_color"); cache.caret_color = get_theme_color("caret_color");
cache.caret_background_color = get_theme_color("caret_background_color"); cache.caret_background_color = get_theme_color("caret_background_color");
cache.font_color = get_theme_color("font_color"); cache.font_color = get_theme_color("font_color");

View file

@ -451,6 +451,8 @@ protected:
Ref<StyleBox> style_readonly; Ref<StyleBox> style_readonly;
Ref<Font> font; Ref<Font> font;
int font_size = 16; int font_size = 16;
int outline_size = 0;
Color outline_color;
Color completion_background_color; Color completion_background_color;
Color completion_selected_color; Color completion_selected_color;
Color completion_existing_color; Color completion_existing_color;

View file

@ -1118,7 +1118,7 @@ int Tree::get_item_height(TreeItem *p_item) const {
return height; return height;
} }
void Tree::draw_item_rect(TreeItem::Cell &p_cell, const Rect2i &p_rect, const Color &p_color, const Color &p_icon_color) { void Tree::draw_item_rect(TreeItem::Cell &p_cell, const Rect2i &p_rect, const Color &p_color, const Color &p_icon_color, int p_ol_size, const Color &p_ol_color) {
ERR_FAIL_COND(cache.font.is_null()); ERR_FAIL_COND(cache.font.is_null());
Rect2i rect = p_rect; Rect2i rect = p_rect;
@ -1160,6 +1160,9 @@ void Tree::draw_item_rect(TreeItem::Cell &p_cell, const Rect2i &p_rect, const Co
Point2 draw_pos = rect.position; Point2 draw_pos = rect.position;
draw_pos.y += Math::floor((rect.size.y - p_cell.text_buf->get_size().y) / 2.0); draw_pos.y += Math::floor((rect.size.y - p_cell.text_buf->get_size().y) / 2.0);
p_cell.text_buf->set_width(MAX(0, rect.size.width)); p_cell.text_buf->set_width(MAX(0, rect.size.width));
if (p_ol_size > 0 && p_ol_color.a > 0) {
p_cell.text_buf->draw_outline(ci, draw_pos, p_ol_size, p_ol_color);
}
p_cell.text_buf->draw(ci, draw_pos, p_color); p_cell.text_buf->draw(ci, draw_pos, p_color);
rect.position.x += ts.width + cache.hseparation; rect.position.x += ts.width + cache.hseparation;
rect.size.x -= ts.width + cache.hseparation; rect.size.x -= ts.width + cache.hseparation;
@ -1182,6 +1185,9 @@ void Tree::draw_item_rect(TreeItem::Cell &p_cell, const Rect2i &p_rect, const Co
Point2 draw_pos = rect.position; Point2 draw_pos = rect.position;
draw_pos.y += Math::floor((rect.size.y - p_cell.text_buf->get_size().y) / 2.0); draw_pos.y += Math::floor((rect.size.y - p_cell.text_buf->get_size().y) / 2.0);
p_cell.text_buf->set_width(MAX(0, rect.size.width)); p_cell.text_buf->set_width(MAX(0, rect.size.width));
if (p_ol_size > 0 && p_ol_color.a > 0) {
p_cell.text_buf->draw_outline(ci, draw_pos, p_ol_size, p_ol_color);
}
p_cell.text_buf->draw(ci, draw_pos, p_color); p_cell.text_buf->draw(ci, draw_pos, p_color);
} }
} }
@ -1434,6 +1440,8 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
} }
Color col = p_item->cells[i].custom_color ? p_item->cells[i].color : get_theme_color(p_item->cells[i].selected ? "font_selected_color" : "font_color"); Color col = p_item->cells[i].custom_color ? p_item->cells[i].color : get_theme_color(p_item->cells[i].selected ? "font_selected_color" : "font_color");
Color font_outline_color = get_theme_color("font_outline_color");
int outline_size = get_theme_constant("outline_size");
Color icon_col = p_item->cells[i].icon_color; Color icon_col = p_item->cells[i].icon_color;
if (p_item->cells[i].dirty) { if (p_item->cells[i].dirty) {
@ -1450,7 +1458,7 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
switch (p_item->cells[i].mode) { switch (p_item->cells[i].mode) {
case TreeItem::CELL_MODE_STRING: { case TreeItem::CELL_MODE_STRING: {
draw_item_rect(p_item->cells.write[i], item_rect, col, icon_col); draw_item_rect(p_item->cells.write[i], item_rect, col, icon_col, outline_size, font_outline_color);
} break; } break;
case TreeItem::CELL_MODE_CHECK: { case TreeItem::CELL_MODE_CHECK: {
Ref<Texture2D> checked = cache.checked; Ref<Texture2D> checked = cache.checked;
@ -1471,7 +1479,7 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
item_rect.size.x -= check_w; item_rect.size.x -= check_w;
item_rect.position.x += check_w; item_rect.position.x += check_w;
draw_item_rect(p_item->cells.write[i], item_rect, col, icon_col); draw_item_rect(p_item->cells.write[i], item_rect, col, icon_col, outline_size, font_outline_color);
} break; } break;
case TreeItem::CELL_MODE_RANGE: { case TreeItem::CELL_MODE_RANGE: {
@ -1485,8 +1493,14 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
p_item->cells.write[i].text_buf->set_width(cell_width); p_item->cells.write[i].text_buf->set_width(cell_width);
if (rtl) { if (rtl) {
if (outline_size > 0 && font_outline_color.a > 0) {
p_item->cells[i].text_buf->draw_outline(ci, text_pos + Vector2(cell_width - text_width, 0), outline_size, font_outline_color);
}
p_item->cells[i].text_buf->draw(ci, text_pos + Vector2(cell_width - text_width, 0), col); p_item->cells[i].text_buf->draw(ci, text_pos + Vector2(cell_width - text_width, 0), col);
} else { } else {
if (outline_size > 0 && font_outline_color.a > 0) {
p_item->cells[i].text_buf->draw_outline(ci, text_pos, outline_size, font_outline_color);
}
p_item->cells[i].text_buf->draw(ci, text_pos, col); p_item->cells[i].text_buf->draw(ci, text_pos, col);
} }
@ -1501,8 +1515,14 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
int cell_width = item_rect.size.x - updown->get_width(); int cell_width = item_rect.size.x - updown->get_width();
if (rtl) { if (rtl) {
if (outline_size > 0 && font_outline_color.a > 0) {
p_item->cells[i].text_buf->draw_outline(ci, text_pos + Vector2(cell_width - text_width, 0), outline_size, font_outline_color);
}
p_item->cells[i].text_buf->draw(ci, text_pos + Vector2(cell_width - text_width, 0), col); p_item->cells[i].text_buf->draw(ci, text_pos + Vector2(cell_width - text_width, 0), col);
} else { } else {
if (outline_size > 0 && font_outline_color.a > 0) {
p_item->cells[i].text_buf->draw_outline(ci, text_pos, outline_size, font_outline_color);
}
p_item->cells[i].text_buf->draw(ci, text_pos, col); p_item->cells[i].text_buf->draw(ci, text_pos, col);
} }
@ -1543,7 +1563,7 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
} }
if (!p_item->cells[i].editable) { if (!p_item->cells[i].editable) {
draw_item_rect(p_item->cells.write[i], item_rect, col, icon_col); draw_item_rect(p_item->cells.write[i], item_rect, col, icon_col, outline_size, font_outline_color);
break; break;
} }
@ -1571,7 +1591,7 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
ir.position += cache.custom_button->get_offset(); ir.position += cache.custom_button->get_offset();
} }
draw_item_rect(p_item->cells.write[i], ir, col, icon_col); draw_item_rect(p_item->cells.write[i], ir, col, icon_col, outline_size, font_outline_color);
downarrow->draw(ci, arrow_pos); downarrow->draw(ci, arrow_pos);
@ -3143,6 +3163,8 @@ void Tree::_notification(int p_what) {
Ref<StyleBox> bg = cache.bg; Ref<StyleBox> bg = cache.bg;
Ref<StyleBox> bg_focus = get_theme_stylebox("bg_focus"); Ref<StyleBox> bg_focus = get_theme_stylebox("bg_focus");
Color font_outline_color = get_theme_color("font_outline_color");
int outline_size = get_theme_constant("outline_size");
Point2 draw_ofs; Point2 draw_ofs;
draw_ofs += bg->get_offset(); draw_ofs += bg->get_offset();
@ -3179,7 +3201,12 @@ void Tree::_notification(int p_what) {
//text //text
int clip_w = tbrect.size.width - sb->get_minimum_size().width; int clip_w = tbrect.size.width - sb->get_minimum_size().width;
columns.write[i].text_buf->set_width(clip_w); columns.write[i].text_buf->set_width(clip_w);
columns[i].text_buf->draw(ci, tbrect.position + Point2i(sb->get_offset().x + (tbrect.size.width - columns[i].text_buf->get_size().x) / 2, (tbrect.size.height - columns[i].text_buf->get_size().y) / 2), cache.title_button_color);
Vector2 text_pos = tbrect.position + Point2i(sb->get_offset().x + (tbrect.size.width - columns[i].text_buf->get_size().x) / 2, (tbrect.size.height - columns[i].text_buf->get_size().y) / 2);
if (outline_size > 0 && font_outline_color.a > 0) {
columns[i].text_buf->draw_outline(ci, text_pos, outline_size, font_outline_color);
}
columns[i].text_buf->draw(ci, text_pos, cache.title_button_color);
} }
} }
} }

View file

@ -385,7 +385,7 @@ private:
void update_item_cell(TreeItem *p_item, int p_col); void update_item_cell(TreeItem *p_item, int p_col);
void update_item_cache(TreeItem *p_item); void update_item_cache(TreeItem *p_item);
//void draw_item_text(String p_text,const Ref<Texture2D>& p_icon,int p_icon_max_w,bool p_tool,Rect2i p_rect,const Color& p_color); //void draw_item_text(String p_text,const Ref<Texture2D>& p_icon,int p_icon_max_w,bool p_tool,Rect2i p_rect,const Color& p_color);
void draw_item_rect(TreeItem::Cell &p_cell, const Rect2i &p_rect, const Color &p_color, const Color &p_icon_color); void draw_item_rect(TreeItem::Cell &p_cell, const Rect2i &p_rect, const Color &p_color, const Color &p_icon_color, int p_ol_size, const Color &p_ol_color);
int draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 &p_draw_size, TreeItem *p_item); int draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 &p_draw_size, TreeItem *p_item);
void select_single_item(TreeItem *p_selected, TreeItem *p_current, int p_col, TreeItem *p_prev = nullptr, bool *r_in_range = nullptr, bool p_force_deselect = false); void select_single_item(TreeItem *p_selected, TreeItem *p_current, int p_col, TreeItem *p_prev = nullptr, bool *r_in_range = nullptr, bool p_force_deselect = false);
int propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, bool p_doubleclick, TreeItem *p_item, int p_button, const Ref<InputEventWithModifiers> &p_mod); int propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, bool p_doubleclick, TreeItem *p_item, int p_button, const Ref<InputEventWithModifiers> &p_mod);

View file

@ -278,6 +278,11 @@ void Viewport::_sub_window_update(Window *p_window) {
int x = (r.size.width - title_text.get_size().x) / 2; int x = (r.size.width - title_text.get_size().x) / 2;
int y = (-title_height - title_text.get_size().y) / 2; int y = (-title_height - title_text.get_size().y) / 2;
Color font_outline_color = p_window->get_theme_color("title_outline_modulate");
int outline_size = p_window->get_theme_constant("title_outline_size");
if (outline_size > 0 && font_outline_color.a > 0) {
title_text.draw_outline(sw.canvas_item, r.position + Point2(x, y), outline_size, font_outline_color);
}
title_text.draw(sw.canvas_item, r.position + Point2(x, y), title_color); title_text.draw(sw.canvas_item, r.position + Point2(x, y), title_color);
bool hl = gui.subwindow_focused == sw.window && gui.subwindow_drag == SUB_WINDOW_DRAG_CLOSE && gui.subwindow_drag_close_inside; bool hl = gui.subwindow_focused == sw.window && gui.subwindow_drag == SUB_WINDOW_DRAG_CLOSE && gui.subwindow_drag_close_inside;

View file

@ -210,7 +210,9 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_color", "LinkButton", control_font_color); theme->set_color("font_color", "LinkButton", control_font_color);
theme->set_color("font_pressed_color", "LinkButton", control_font_pressed_color); theme->set_color("font_pressed_color", "LinkButton", control_font_pressed_color);
theme->set_color("font_hover_color", "LinkButton", control_font_hover_color); theme->set_color("font_hover_color", "LinkButton", control_font_hover_color);
theme->set_color("font_outline_color", "LinkButton", Color(1, 1, 1));
theme->set_constant("outline_size", "LinkButton", 0);
theme->set_constant("underline_spacing", "LinkButton", 2 * scale); theme->set_constant("underline_spacing", "LinkButton", 2 * scale);
// ColorPickerButton // ColorPickerButton
@ -228,8 +230,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_pressed_color", "ColorPickerButton", Color(0.8, 0.8, 0.8, 1)); theme->set_color("font_pressed_color", "ColorPickerButton", Color(0.8, 0.8, 0.8, 1));
theme->set_color("font_hover_color", "ColorPickerButton", Color(1, 1, 1, 1)); theme->set_color("font_hover_color", "ColorPickerButton", Color(1, 1, 1, 1));
theme->set_color("font_disabled_color", "ColorPickerButton", Color(0.9, 0.9, 0.9, 0.3)); theme->set_color("font_disabled_color", "ColorPickerButton", Color(0.9, 0.9, 0.9, 0.3));
theme->set_color("font_outline_color", "ColorPickerButton", Color(1, 1, 1));
theme->set_constant("hseparation", "ColorPickerButton", 2 * scale); theme->set_constant("hseparation", "ColorPickerButton", 2 * scale);
theme->set_constant("outline_size", "ColorPickerButton", 0);
// OptionButton // OptionButton
@ -265,9 +269,11 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_pressed_color", "OptionButton", control_font_pressed_color); theme->set_color("font_pressed_color", "OptionButton", control_font_pressed_color);
theme->set_color("font_hover_color", "OptionButton", control_font_hover_color); theme->set_color("font_hover_color", "OptionButton", control_font_hover_color);
theme->set_color("font_disabled_color", "OptionButton", control_font_disabled_color); theme->set_color("font_disabled_color", "OptionButton", control_font_disabled_color);
theme->set_color("font_outline_color", "OptionButton", Color(1, 1, 1));
theme->set_constant("hseparation", "OptionButton", 2 * scale); theme->set_constant("hseparation", "OptionButton", 2 * scale);
theme->set_constant("arrow_margin", "OptionButton", 2 * scale); theme->set_constant("arrow_margin", "OptionButton", 2 * scale);
theme->set_constant("outline_size", "OptionButton", 0);
// MenuButton // MenuButton
@ -284,8 +290,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_pressed_color", "MenuButton", control_font_pressed_color); theme->set_color("font_pressed_color", "MenuButton", control_font_pressed_color);
theme->set_color("font_hover_color", "MenuButton", control_font_hover_color); theme->set_color("font_hover_color", "MenuButton", control_font_hover_color);
theme->set_color("font_disabled_color", "MenuButton", Color(1, 1, 1, 0.3)); theme->set_color("font_disabled_color", "MenuButton", Color(1, 1, 1, 0.3));
theme->set_color("font_outline_color", "MenuButton", Color(1, 1, 1));
theme->set_constant("hseparation", "MenuButton", 3 * scale); theme->set_constant("hseparation", "MenuButton", 3 * scale);
theme->set_constant("outline_size", "MenuButton", 0);
// CheckBox // CheckBox
@ -320,9 +328,11 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_hover_color", "CheckBox", control_font_hover_color); theme->set_color("font_hover_color", "CheckBox", control_font_hover_color);
theme->set_color("font_hover_pressed_color", "CheckBox", control_font_pressed_color); theme->set_color("font_hover_pressed_color", "CheckBox", control_font_pressed_color);
theme->set_color("font_disabled_color", "CheckBox", control_font_disabled_color); theme->set_color("font_disabled_color", "CheckBox", control_font_disabled_color);
theme->set_color("font_outline_color", "CheckBox", Color(1, 1, 1));
theme->set_constant("hseparation", "CheckBox", 4 * scale); theme->set_constant("hseparation", "CheckBox", 4 * scale);
theme->set_constant("check_vadjust", "CheckBox", 0 * scale); theme->set_constant("check_vadjust", "CheckBox", 0 * scale);
theme->set_constant("outline_size", "CheckBox", 0);
// CheckButton // CheckButton
@ -357,9 +367,11 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_hover_color", "CheckButton", control_font_hover_color); theme->set_color("font_hover_color", "CheckButton", control_font_hover_color);
theme->set_color("font_hover_pressed_color", "CheckButton", control_font_pressed_color); theme->set_color("font_hover_pressed_color", "CheckButton", control_font_pressed_color);
theme->set_color("font_disabled_color", "CheckButton", control_font_disabled_color); theme->set_color("font_disabled_color", "CheckButton", control_font_disabled_color);
theme->set_color("font_outline_color", "CheckButton", Color(1, 1, 1));
theme->set_constant("hseparation", "CheckButton", 4 * scale); theme->set_constant("hseparation", "CheckButton", 4 * scale);
theme->set_constant("check_vadjust", "CheckButton", 0 * scale); theme->set_constant("check_vadjust", "CheckButton", 0 * scale);
theme->set_constant("outline_size", "CheckButton", 0);
// Label // Label
@ -373,7 +385,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_constant("shadow_offset_x", "Label", 1 * scale); theme->set_constant("shadow_offset_x", "Label", 1 * scale);
theme->set_constant("shadow_offset_y", "Label", 1 * scale); theme->set_constant("shadow_offset_y", "Label", 1 * scale);
theme->set_constant("outline_size", "Label", 0 * scale); theme->set_constant("outline_size", "Label", 0);
theme->set_constant("shadow_outline_size", "Label", 1 * scale); theme->set_constant("shadow_outline_size", "Label", 1 * scale);
theme->set_constant("line_spacing", "Label", 3 * scale); theme->set_constant("line_spacing", "Label", 3 * scale);
@ -389,12 +401,14 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_color", "LineEdit", control_font_color); theme->set_color("font_color", "LineEdit", control_font_color);
theme->set_color("font_selected_color", "LineEdit", Color(0, 0, 0)); theme->set_color("font_selected_color", "LineEdit", Color(0, 0, 0));
theme->set_color("font_uneditable_color", "LineEdit", Color(control_font_color.r, control_font_color.g, control_font_color.b, 0.5f)); theme->set_color("font_uneditable_color", "LineEdit", Color(control_font_color.r, control_font_color.g, control_font_color.b, 0.5f));
theme->set_color("font_outline_color", "LineEdit", Color(1, 1, 1));
theme->set_color("cursor_color", "LineEdit", control_font_hover_color); theme->set_color("cursor_color", "LineEdit", control_font_hover_color);
theme->set_color("selection_color", "LineEdit", control_selection_color); theme->set_color("selection_color", "LineEdit", control_selection_color);
theme->set_color("clear_button_color", "LineEdit", control_font_color); theme->set_color("clear_button_color", "LineEdit", control_font_color);
theme->set_color("clear_button_color_pressed", "LineEdit", control_font_pressed_color); theme->set_color("clear_button_color_pressed", "LineEdit", control_font_pressed_color);
theme->set_constant("minimum_character_width", "LineEdit", 4); theme->set_constant("minimum_character_width", "LineEdit", 4);
theme->set_constant("outline_size", "LineEdit", 0);
theme->set_icon("clear", "LineEdit", make_icon(line_edit_clear_png)); theme->set_icon("clear", "LineEdit", make_icon(line_edit_clear_png));
@ -408,6 +422,9 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_color", "ProgressBar", control_font_hover_color); theme->set_color("font_color", "ProgressBar", control_font_hover_color);
theme->set_color("font_shadow_color", "ProgressBar", Color(0, 0, 0)); theme->set_color("font_shadow_color", "ProgressBar", Color(0, 0, 0));
theme->set_color("font_outline_color", "ProgressBar", Color(1, 1, 1));
theme->set_constant("outline_size", "ProgressBar", 0);
// TextEdit // TextEdit
@ -431,6 +448,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_color", "TextEdit", control_font_color); theme->set_color("font_color", "TextEdit", control_font_color);
theme->set_color("font_selected_color", "TextEdit", Color(0, 0, 0)); theme->set_color("font_selected_color", "TextEdit", Color(0, 0, 0));
theme->set_color("font_readonly_color", "TextEdit", Color(control_font_color.r, control_font_color.g, control_font_color.b, 0.5f)); theme->set_color("font_readonly_color", "TextEdit", Color(control_font_color.r, control_font_color.g, control_font_color.b, 0.5f));
theme->set_color("font_outline_color", "TextEdit", Color(1, 1, 1));
theme->set_color("selection_color", "TextEdit", control_selection_color); theme->set_color("selection_color", "TextEdit", control_selection_color);
theme->set_color("mark_color", "TextEdit", Color(1.0, 0.4, 0.4, 0.4)); theme->set_color("mark_color", "TextEdit", Color(1.0, 0.4, 0.4, 0.4));
theme->set_color("code_folding_color", "TextEdit", Color(0.8, 0.8, 0.8, 0.8)); theme->set_color("code_folding_color", "TextEdit", Color(0.8, 0.8, 0.8, 0.8));
@ -444,8 +462,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_constant("completion_max_width", "TextEdit", 50); theme->set_constant("completion_max_width", "TextEdit", 50);
theme->set_constant("completion_scroll_width", "TextEdit", 3); theme->set_constant("completion_scroll_width", "TextEdit", 3);
theme->set_constant("line_spacing", "TextEdit", 4 * scale); theme->set_constant("line_spacing", "TextEdit", 4 * scale);
theme->set_constant("outline_size", "TextEdit", 0);
// CodeEdit // CodeEdit
theme->set_stylebox("normal", "CodeEdit", make_stylebox(tree_bg_png, 3, 3, 3, 3, 0, 0, 0, 0)); theme->set_stylebox("normal", "CodeEdit", make_stylebox(tree_bg_png, 3, 3, 3, 3, 0, 0, 0, 0));
theme->set_stylebox("focus", "CodeEdit", focus); theme->set_stylebox("focus", "CodeEdit", focus);
theme->set_stylebox("read_only", "CodeEdit", make_stylebox(tree_bg_disabled_png, 4, 4, 4, 4, 0, 0, 0, 0)); theme->set_stylebox("read_only", "CodeEdit", make_stylebox(tree_bg_disabled_png, 4, 4, 4, 4, 0, 0, 0, 0));
@ -471,6 +491,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_color", "CodeEdit", control_font_color); theme->set_color("font_color", "CodeEdit", control_font_color);
theme->set_color("font_selected_color", "CodeEdit", Color(0, 0, 0)); theme->set_color("font_selected_color", "CodeEdit", Color(0, 0, 0));
theme->set_color("font_readonly_color", "CodeEdit", Color(control_font_color.r, control_font_color.g, control_font_color.b, 0.5f)); theme->set_color("font_readonly_color", "CodeEdit", Color(control_font_color.r, control_font_color.g, control_font_color.b, 0.5f));
theme->set_color("font_outline_color", "CodeEdit", Color(1, 1, 1));
theme->set_color("selection_color", "CodeEdit", control_selection_color); theme->set_color("selection_color", "CodeEdit", control_selection_color);
theme->set_color("mark_color", "CodeEdit", Color(1.0, 0.4, 0.4, 0.4)); theme->set_color("mark_color", "CodeEdit", Color(1.0, 0.4, 0.4, 0.4));
theme->set_color("bookmark_color", "CodeEdit", Color(0.5, 0.64, 1, 0.8)); theme->set_color("bookmark_color", "CodeEdit", Color(0.5, 0.64, 1, 0.8));
@ -489,6 +510,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_constant("completion_max_width", "CodeEdit", 50); theme->set_constant("completion_max_width", "CodeEdit", 50);
theme->set_constant("completion_scroll_width", "CodeEdit", 3); theme->set_constant("completion_scroll_width", "CodeEdit", 3);
theme->set_constant("line_spacing", "CodeEdit", 4 * scale); theme->set_constant("line_spacing", "CodeEdit", 4 * scale);
theme->set_constant("outline_size", "CodeEdit", 0);
Ref<Texture2D> empty_icon = memnew(ImageTexture); Ref<Texture2D> empty_icon = memnew(ImageTexture);
@ -544,7 +566,8 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_icon("updown", "SpinBox", make_icon(spinbox_updown_png)); theme->set_icon("updown", "SpinBox", make_icon(spinbox_updown_png));
//scroll container // ScrollContainer
Ref<StyleBoxEmpty> empty; Ref<StyleBoxEmpty> empty;
empty.instance(); empty.instance();
theme->set_stylebox("bg", "ScrollContainer", empty); theme->set_stylebox("bg", "ScrollContainer", empty);
@ -556,7 +579,12 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_constant("scaleborder_size", "Window", 4 * scale); theme->set_constant("scaleborder_size", "Window", 4 * scale);
theme->set_font("title_font", "Window", large_font); theme->set_font("title_font", "Window", large_font);
theme->set_font_size("title_font_size", "Window", -1);
theme->set_color("title_color", "Window", Color(0, 0, 0)); theme->set_color("title_color", "Window", Color(0, 0, 0));
theme->set_color("title_outline_modulate", "Window", Color(1, 1, 1));
theme->set_constant("title_outline_size", "Window", 0);
theme->set_constant("title_height", "Window", 20 * scale); theme->set_constant("title_height", "Window", 20 * scale);
theme->set_constant("resize_margin", "Window", 4 * scale); theme->set_constant("resize_margin", "Window", 4 * scale);
@ -611,9 +639,11 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_disabled_color", "PopupMenu", Color(0.4, 0.4, 0.4, 0.8)); theme->set_color("font_disabled_color", "PopupMenu", Color(0.4, 0.4, 0.4, 0.8));
theme->set_color("font_hover_color", "PopupMenu", control_font_color); theme->set_color("font_hover_color", "PopupMenu", control_font_color);
theme->set_color("font_separator_color", "PopupMenu", control_font_color); theme->set_color("font_separator_color", "PopupMenu", control_font_color);
theme->set_color("font_outline_color", "PopupMenu", Color(1, 1, 1));
theme->set_constant("hseparation", "PopupMenu", 4 * scale); theme->set_constant("hseparation", "PopupMenu", 4 * scale);
theme->set_constant("vseparation", "PopupMenu", 4 * scale); theme->set_constant("vseparation", "PopupMenu", 4 * scale);
theme->set_constant("outline_size", "PopupMenu", 0);
// GraphNode // GraphNode
@ -682,6 +712,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("title_button_color", "Tree", control_font_color); theme->set_color("title_button_color", "Tree", control_font_color);
theme->set_color("font_color", "Tree", control_font_low_color); theme->set_color("font_color", "Tree", control_font_low_color);
theme->set_color("font_selected_color", "Tree", control_font_pressed_color); theme->set_color("font_selected_color", "Tree", control_font_pressed_color);
theme->set_color("font_outline_color", "Tree", Color(1, 1, 1));
theme->set_color("guide_color", "Tree", Color(0, 0, 0, 0.1)); theme->set_color("guide_color", "Tree", Color(0, 0, 0, 0.1));
theme->set_color("drop_position_color", "Tree", Color(1, 0.3, 0.2)); theme->set_color("drop_position_color", "Tree", Color(1, 0.3, 0.2));
theme->set_color("relationship_line_color", "Tree", Color(0.27, 0.27, 0.27)); theme->set_color("relationship_line_color", "Tree", Color(0.27, 0.27, 0.27));
@ -695,8 +726,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_constant("draw_guides", "Tree", 1); theme->set_constant("draw_guides", "Tree", 1);
theme->set_constant("scroll_border", "Tree", 4); theme->set_constant("scroll_border", "Tree", 4);
theme->set_constant("scroll_speed", "Tree", 12); theme->set_constant("scroll_speed", "Tree", 12);
theme->set_constant("outline_size", "Tree", 0);
// ItemList // ItemList
Ref<StyleBoxTexture> item_selected = make_stylebox(selection_png, 4, 4, 4, 4, 8, 2, 8, 2); Ref<StyleBoxTexture> item_selected = make_stylebox(selection_png, 4, 4, 4, 4, 8, 2, 8, 2);
Ref<StyleBoxTexture> item_selected_oof = make_stylebox(selection_oof_png, 4, 4, 4, 4, 8, 2, 8, 2); Ref<StyleBoxTexture> item_selected_oof = make_stylebox(selection_oof_png, 4, 4, 4, 4, 8, 2, 8, 2);
@ -712,12 +745,15 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_color", "ItemList", control_font_lower_color); theme->set_color("font_color", "ItemList", control_font_lower_color);
theme->set_color("font_selected_color", "ItemList", control_font_pressed_color); theme->set_color("font_selected_color", "ItemList", control_font_pressed_color);
theme->set_color("font_outline_color", "ItemList", Color(1, 1, 1));
theme->set_color("guide_color", "ItemList", Color(0, 0, 0, 0.1)); theme->set_color("guide_color", "ItemList", Color(0, 0, 0, 0.1));
theme->set_stylebox("selected", "ItemList", item_selected_oof); theme->set_stylebox("selected", "ItemList", item_selected_oof);
theme->set_stylebox("selected_focus", "ItemList", item_selected); theme->set_stylebox("selected_focus", "ItemList", item_selected);
theme->set_stylebox("cursor", "ItemList", focus); theme->set_stylebox("cursor", "ItemList", focus);
theme->set_stylebox("cursor_unfocused", "ItemList", focus); theme->set_stylebox("cursor_unfocused", "ItemList", focus);
theme->set_constant("outline_size", "ItemList", 0);
// TabContainer // TabContainer
Ref<StyleBoxTexture> tc_sb = sb_expand(make_stylebox(tab_container_bg_png, 4, 4, 4, 4, 4, 4, 4, 4), 3, 3, 3, 3); Ref<StyleBoxTexture> tc_sb = sb_expand(make_stylebox(tab_container_bg_png, 4, 4, 4, 4, 4, 4, 4, 4), 3, 3, 3, 3);
@ -743,9 +779,11 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_selected_color", "TabContainer", control_font_hover_color); theme->set_color("font_selected_color", "TabContainer", control_font_hover_color);
theme->set_color("font_unselected_color", "TabContainer", control_font_low_color); theme->set_color("font_unselected_color", "TabContainer", control_font_low_color);
theme->set_color("font_disabled_color", "TabContainer", control_font_disabled_color); theme->set_color("font_disabled_color", "TabContainer", control_font_disabled_color);
theme->set_color("font_outline_color", "TabContainer", Color(1, 1, 1));
theme->set_constant("side_margin", "TabContainer", 8 * scale); theme->set_constant("side_margin", "TabContainer", 8 * scale);
theme->set_constant("icon_separation", "TabContainer", 4 * scale); theme->set_constant("icon_separation", "TabContainer", 4 * scale);
theme->set_constant("outline_size", "TabContainer", 0);
// Tabs // Tabs
@ -768,8 +806,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_selected_color", "Tabs", control_font_hover_color); theme->set_color("font_selected_color", "Tabs", control_font_hover_color);
theme->set_color("font_unselected_color", "Tabs", control_font_low_color); theme->set_color("font_unselected_color", "Tabs", control_font_low_color);
theme->set_color("font_disabled_color", "Tabs", control_font_disabled_color); theme->set_color("font_disabled_color", "Tabs", control_font_disabled_color);
theme->set_color("font_outline_color", "Tabs", Color(1, 1, 1));
theme->set_constant("hseparation", "Tabs", 4 * scale); theme->set_constant("hseparation", "Tabs", 4 * scale);
theme->set_constant("outline_size", "Tabs", 0);
// Separators // Separators
@ -827,9 +867,11 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_color", "TooltipLabel", Color(0, 0, 0)); theme->set_color("font_color", "TooltipLabel", Color(0, 0, 0));
theme->set_color("font_shadow_color", "TooltipLabel", Color(0, 0, 0, 0.1)); theme->set_color("font_shadow_color", "TooltipLabel", Color(0, 0, 0, 0.1));
theme->set_color("font_outline_color", "TooltipLabel", Color(1, 1, 1));
theme->set_constant("shadow_offset_x", "TooltipLabel", 1); theme->set_constant("shadow_offset_x", "TooltipLabel", 1);
theme->set_constant("shadow_offset_y", "TooltipLabel", 1); theme->set_constant("shadow_offset_y", "TooltipLabel", 1);
theme->set_constant("outline_size", "TooltipLabel", 0);
// RichTextLabel // RichTextLabel
@ -854,6 +896,8 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_color("font_shadow_color", "RichTextLabel", Color(0, 0, 0, 0)); theme->set_color("font_shadow_color", "RichTextLabel", Color(0, 0, 0, 0));
theme->set_color("font_outline_color", "RichTextLabel", Color(1, 1, 1));
theme->set_constant("shadow_offset_x", "RichTextLabel", 1 * scale); theme->set_constant("shadow_offset_x", "RichTextLabel", 1 * scale);
theme->set_constant("shadow_offset_y", "RichTextLabel", 1 * scale); theme->set_constant("shadow_offset_y", "RichTextLabel", 1 * scale);
theme->set_constant("shadow_as_outline", "RichTextLabel", 0 * scale); theme->set_constant("shadow_as_outline", "RichTextLabel", 0 * scale);
@ -862,9 +906,12 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_constant("table_hseparation", "RichTextLabel", 3 * scale); theme->set_constant("table_hseparation", "RichTextLabel", 3 * scale);
theme->set_constant("table_vseparation", "RichTextLabel", 3 * scale); theme->set_constant("table_vseparation", "RichTextLabel", 3 * scale);
theme->set_constant("outline_size", "RichTextLabel", 0);
theme->set_color("table_odd_row_bg", "RichTextLabel", Color(0, 0, 0, 0)); theme->set_color("table_odd_row_bg", "RichTextLabel", Color(0, 0, 0, 0));
theme->set_color("table_even_row_bg", "RichTextLabel", Color(0, 0, 0, 0)); theme->set_color("table_even_row_bg", "RichTextLabel", Color(0, 0, 0, 0));
theme->set_color("table_border", "RichTextLabel", Color(0, 0, 0, 0)); theme->set_color("table_border", "RichTextLabel", Color(0, 0, 0, 0));
// Containers // Containers
theme->set_stylebox("bg", "VSplitContainer", make_stylebox(vsplit_bg_png, 1, 1, 1, 1)); theme->set_stylebox("bg", "VSplitContainer", make_stylebox(vsplit_bg_png, 1, 1, 1, 1));
@ -904,6 +951,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_constant("bezier_len_neg", "GraphEdit", 160 * scale); theme->set_constant("bezier_len_neg", "GraphEdit", 160 * scale);
// Visual Node Ports // Visual Node Ports
theme->set_constant("port_grab_distance_horizontal", "GraphEdit", 48 * scale); theme->set_constant("port_grab_distance_horizontal", "GraphEdit", 48 * scale);
theme->set_constant("port_grab_distance_vertical", "GraphEdit", 6 * scale); theme->set_constant("port_grab_distance_vertical", "GraphEdit", 6 * scale);