2016-06-18 07:32:03 +02:00
/*************************************************************************/
2017-01-16 08:04:19 +01:00
/* editor_themes.cpp */
2016-06-18 07:32:03 +02:00
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
2017-08-27 14:16:55 +02:00
/* https://godotengine.org */
2016-06-18 07:32:03 +02:00
/*************************************************************************/
2022-01-03 21:27:34 +01:00
/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
2016-06-18 07:32:03 +02:00
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
2018-01-05 00:50:27 +01:00
2016-06-18 07:32:03 +02:00
# include "editor_themes.h"
2017-01-16 08:04:19 +01:00
2022-01-13 13:54:19 +01:00
# include "core/error/error_macros.h"
2016-06-18 07:32:03 +02:00
# include "core/io/resource_loader.h"
2022-01-13 13:54:19 +01:00
# include "core/variant/dictionary.h"
2022-02-12 02:46:22 +01:00
# include "editor/editor_fonts.h"
# include "editor/editor_icons.gen.h"
# include "editor/editor_scale.h"
# include "editor/editor_settings.h"
2020-02-06 21:51:36 +01:00
2021-11-12 13:42:58 +01:00
# include "modules/modules_enabled.gen.h" // For svg.
2020-02-06 21:51:36 +01:00
# ifdef MODULE_SVG_ENABLED
2017-08-19 04:34:09 +02:00
# include "modules/svg/image_loader_svg.h"
2020-02-06 21:51:36 +01:00
# endif
2016-06-18 07:32:03 +02:00
2021-01-18 04:19:07 +01:00
static Ref < StyleBoxTexture > make_stylebox ( Ref < Texture2D > p_texture , float p_left , float p_top , float p_right , float p_bottom , float p_margin_left = - 1 , float p_margin_top = - 1 , float p_margin_right = - 1 , float p_margin_bottom = - 1 , bool p_draw_center = true ) {
2017-05-02 22:13:12 +02:00
Ref < StyleBoxTexture > style ( memnew ( StyleBoxTexture ) ) ;
2017-09-27 21:44:48 +02:00
style - > set_texture ( p_texture ) ;
2020-12-22 17:24:29 +01:00
style - > set_margin_size ( SIDE_LEFT , p_left * EDSCALE ) ;
style - > set_margin_size ( SIDE_RIGHT , p_right * EDSCALE ) ;
2021-01-18 04:19:07 +01:00
style - > set_margin_size ( SIDE_BOTTOM , p_bottom * EDSCALE ) ;
2020-12-22 17:24:29 +01:00
style - > set_margin_size ( SIDE_TOP , p_top * EDSCALE ) ;
style - > set_default_margin ( SIDE_LEFT , p_margin_left * EDSCALE ) ;
style - > set_default_margin ( SIDE_RIGHT , p_margin_right * EDSCALE ) ;
2021-01-18 04:19:07 +01:00
style - > set_default_margin ( SIDE_BOTTOM , p_margin_bottom * EDSCALE ) ;
2020-12-22 17:24:29 +01:00
style - > set_default_margin ( SIDE_TOP , p_margin_top * EDSCALE ) ;
2017-05-02 22:13:12 +02:00
style - > set_draw_center ( p_draw_center ) ;
return style ;
}
static Ref < StyleBoxEmpty > make_empty_stylebox ( float p_margin_left = - 1 , float p_margin_top = - 1 , float p_margin_right = - 1 , float p_margin_bottom = - 1 ) {
Ref < StyleBoxEmpty > style ( memnew ( StyleBoxEmpty ) ) ;
2020-12-22 17:24:29 +01:00
style - > set_default_margin ( SIDE_LEFT , p_margin_left * EDSCALE ) ;
style - > set_default_margin ( SIDE_RIGHT , p_margin_right * EDSCALE ) ;
style - > set_default_margin ( SIDE_BOTTOM , p_margin_bottom * EDSCALE ) ;
style - > set_default_margin ( SIDE_TOP , p_margin_top * EDSCALE ) ;
2017-05-02 22:13:12 +02:00
return style ;
}
2019-03-23 01:57:28 +01:00
static Ref < StyleBoxFlat > make_flat_stylebox ( Color p_color , float p_margin_left = - 1 , float p_margin_top = - 1 , float p_margin_right = - 1 , float p_margin_bottom = - 1 , int p_corner_width = 0 ) {
2017-05-02 22:13:12 +02:00
Ref < StyleBoxFlat > style ( memnew ( StyleBoxFlat ) ) ;
2017-09-27 21:44:48 +02:00
style - > set_bg_color ( p_color ) ;
2019-03-23 01:57:28 +01:00
// Adjust level of detail based on the corners' effective sizes.
style - > set_corner_detail ( Math : : ceil ( 1.5 * p_corner_width * EDSCALE ) ) ;
2022-04-01 01:55:51 +02:00
style - > set_corner_radius_all ( p_corner_width * EDSCALE ) ;
2020-12-22 17:24:29 +01:00
style - > set_default_margin ( SIDE_LEFT , p_margin_left * EDSCALE ) ;
style - > set_default_margin ( SIDE_RIGHT , p_margin_right * EDSCALE ) ;
style - > set_default_margin ( SIDE_BOTTOM , p_margin_bottom * EDSCALE ) ;
style - > set_default_margin ( SIDE_TOP , p_margin_top * EDSCALE ) ;
2022-05-24 06:01:09 +02:00
// Work around issue about antialiased edges being blurrier (GH-35279).
style - > set_anti_aliased ( false ) ;
2017-05-02 22:13:12 +02:00
return style ;
}
2018-07-14 23:15:42 +02:00
static Ref < StyleBoxLine > make_line_stylebox ( Color p_color , int p_thickness = 1 , float p_grow_begin = 1 , float p_grow_end = 1 , bool p_vertical = false ) {
2017-07-18 08:09:19 +02:00
Ref < StyleBoxLine > style ( memnew ( StyleBoxLine ) ) ;
2017-09-27 21:44:48 +02:00
style - > set_color ( p_color ) ;
2018-07-14 23:15:42 +02:00
style - > set_grow_begin ( p_grow_begin ) ;
style - > set_grow_end ( p_grow_end ) ;
2017-09-27 21:44:48 +02:00
style - > set_thickness ( p_thickness ) ;
style - > set_vertical ( p_vertical ) ;
2017-07-18 08:09:19 +02:00
return style ;
}
2020-11-06 20:16:45 +01:00
static Ref < Texture2D > flip_icon ( Ref < Texture2D > p_texture , bool p_flip_y = false , bool p_flip_x = false ) {
if ( ! p_flip_y & & ! p_flip_x ) {
return p_texture ;
}
2021-03-28 13:32:17 +02:00
Ref < Image > img = p_texture - > get_image ( ) ;
2022-01-13 13:54:19 +01:00
ERR_FAIL_NULL_V ( img , Ref < Texture2D > ( ) ) ;
2021-01-25 15:37:05 +01:00
img = img - > duplicate ( ) ;
2020-11-06 20:16:45 +01:00
if ( p_flip_y ) {
img - > flip_y ( ) ;
}
if ( p_flip_x ) {
img - > flip_x ( ) ;
}
2022-05-04 01:49:20 +02:00
return ImageTexture : : create_from_image ( img ) ;
2020-11-06 20:16:45 +01:00
}
2020-08-08 21:43:47 +02:00
# ifdef MODULE_SVG_ENABLED
2021-12-30 17:22:06 +01:00
// See also `generate_icon()` in `scene/resources/default_theme.cpp`.
2022-01-13 13:54:19 +01:00
static Ref < ImageTexture > editor_generate_icon ( int p_index , bool p_convert_color , float p_scale = EDSCALE , float p_saturation = 1.0 , Dictionary p_convert_colors = Dictionary ( ) ) {
2017-08-19 04:34:09 +02:00
Ref < Image > img = memnew ( Image ) ;
2020-01-19 23:21:49 +01:00
// Upsample icon generation only if the editor scale isn't an integer multiplier.
// Generating upsampled icons is slower, and the benefit is hardly visible
// with integer editor scales.
const bool upsample = ! Math : : is_equal_approx ( Math : : round ( p_scale ) , p_scale ) ;
2022-01-13 13:54:19 +01:00
ImageLoaderSVG img_loader ;
img_loader . set_replace_colors ( p_convert_colors ) ;
img_loader . create_image_from_string ( img , editor_icons_sources [ p_index ] , p_scale , upsample , p_convert_color ) ;
2021-02-12 16:16:37 +01:00
if ( p_saturation ! = 1.0 ) {
img - > adjust_bcs ( 1.0 , 1.0 , p_saturation ) ;
}
2017-08-19 04:34:09 +02:00
2022-05-04 01:49:20 +02:00
// In this case filter really helps.
return ImageTexture : : create_from_image ( img ) ;
2017-08-19 04:34:09 +02:00
}
2020-08-08 21:43:47 +02:00
# endif
2017-08-19 04:34:09 +02:00
2017-08-30 20:29:35 +02:00
# ifndef ADD_CONVERT_COLOR
# define ADD_CONVERT_COLOR(dictionary, old_color, new_color) dictionary[Color::html(old_color)] = Color::html(new_color)
# endif
2021-02-12 16:16:37 +01:00
void editor_register_and_generate_icons ( Ref < Theme > p_theme , bool p_dark_theme = true , int p_thumb_size = 32 , bool p_only_thumbs = false , float p_icon_saturation = 1.0 ) {
2020-02-06 21:51:36 +01:00
# ifdef MODULE_SVG_ENABLED
2020-01-19 23:21:49 +01:00
// The default icon theme is designed to be used for a dark theme.
2022-01-13 13:54:19 +01:00
// This dictionary stores Color values to convert to other colors
2020-01-19 23:21:49 +01:00
// for better readability on a light theme.
2022-01-13 13:54:19 +01:00
// Godot Color values are used to avoid the ambiguity of strings
// (where "#ffffff", "fff", and "white" are all equivalent).
2017-08-30 20:29:35 +02:00
Dictionary dark_icon_color_dictionary ;
2020-01-19 23:21:49 +01:00
// The names of the icons to never convert, even if one of their colors
// are contained in the dictionary above.
2022-05-19 17:00:06 +02:00
HashSet < StringName > exceptions ;
2020-01-19 23:21:49 +01:00
2022-01-28 17:38:48 +01:00
// Some of the colors below are listed for completeness sake.
// This can be a basis for proper palette validation later.
2017-09-27 21:44:48 +02:00
if ( ! p_dark_theme ) {
2021-05-10 20:11:46 +02:00
// Convert color: FROM TO
2022-01-28 17:38:48 +01:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #478cbf " , " #478cbf " ) ; // Godot Blue
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #414042 " , " #414042 " ) ; // Godot Gray
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ffffff " , " #414141 " ) ; // Pure white
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #000000 " , " #bfbfbf " ) ; // Pure black
2022-02-10 12:00:11 +01:00
// Keep pure RGB colors as is, but list them for explicitly.
2022-01-28 17:38:48 +01:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ff0000 " , " #ff0000 " ) ; // Pure red
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #00ff00 " , " #00ff00 " ) ; // Pure green
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #0000ff " , " #0000ff " ) ; // Pure blue
// GUI Colors
2022-01-28 17:55:16 +01:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #e0e0e0 " , " #5a5a5a " ) ; // Common icon color
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #fefefe " , " #fefefe " ) ; // Forced light color
2022-01-28 17:38:48 +01:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #808080 " , " #808080 " ) ; // GUI disabled color
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #b3b3b3 " , " #363636 " ) ; // GUI disabled light color
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #699ce8 " , " #699ce8 " ) ; // GUI highlight color
2021-05-10 20:11:46 +02:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #f9f9f9 " , " #606060 " ) ; // Scrollbar grabber highlight color
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #c38ef1 " , " #a85de9 " ) ; // Animation
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #fc7f7f " , " #cd3838 " ) ; // Spatial
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #8da5f3 " , " #3d64dd " ) ; // 2D
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #4b70ea " , " #1a3eac " ) ; // 2D Dark
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #8eef97 " , " #2fa139 " ) ; // Control
2022-01-28 17:38:48 +01:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #5fb2ff " , " #0079f0 " ) ; // Selection (blue)
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #003e7a " , " #2b74bb " ) ; // Selection (darker blue)
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #f7f5cf " , " #615f3a " ) ; // Gizmo (yellow)
2021-05-10 20:11:46 +02:00
// Rainbow
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ff4545 " , " #ff2929 " ) ; // Red
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ffe345 " , " #ffe337 " ) ; // Yellow
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #80ff45 " , " #74ff34 " ) ; // Green
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #45ffa2 " , " #2cff98 " ) ; // Aqua
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #45d7ff " , " #22ccff " ) ; // Blue
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #8045ff " , " #702aff " ) ; // Purple
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ff4596 " , " #ff2781 " ) ; // Pink
2022-01-28 17:38:48 +01:00
// Audio gradients
2021-05-10 20:11:46 +02:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #e1da5b " , " #d6cf4b " ) ; // Yellow
2022-01-28 17:38:48 +01:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #62aeff " , " #1678e0 " ) ; // Frozen gradient top
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #75d1e6 " , " #41acc5 " ) ; // Frozen gradient middle
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #84ffee " , " #49ccba " ) ; // Frozen gradient bottom
2021-05-10 20:11:46 +02:00
2022-01-28 17:38:48 +01:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #f70000 " , " #c91616 " ) ; // Color track red
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #eec315 " , " #d58c0b " ) ; // Color track orange
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #dbee15 " , " #b7d10a " ) ; // Color track yellow
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #288027 " , " #218309 " ) ; // Color track green
// Resource groups
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ffca5f " , " #fea900 " ) ; // Mesh resource (orange)
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #2998ff " , " #68b6ff " ) ; // Shape resource (blue)
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #a2d2ff " , " #4998e3 " ) ; // Shape resource (light blue)
2017-09-14 04:30:07 +02:00
2019-08-05 01:53:45 +02:00
// Animation editor tracks
2021-05-10 20:11:46 +02:00
// The property track icon color is set by the common icon color.
2022-01-28 17:38:48 +01:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ea7940 " , " #bd5e2c " ) ; // 3D Position track
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ff2b88 " , " #bd165f " ) ; // 3D Rotation track
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #eac840 " , " #bd9d1f " ) ; // 3D Scale track
2021-05-10 20:11:46 +02:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #3cf34e " , " #16a827 " ) ; // Call Method track
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #2877f6 " , " #236be6 " ) ; // Bezier Curve track
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #eae440 " , " #9f9722 " ) ; // Audio Playback track
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #a448f0 " , " #9853ce " ) ; // Animation Playback track
2022-01-28 17:38:48 +01:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #5ad5c4 " , " #0a9c88 " ) ; // Blend Shape track
// Control layouts
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #d6d6d6 " , " #474747 " ) ; // Highlighted part
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #474747 " , " #d6d6d6 " ) ; // Background part
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #919191 " , " #6e6e6e " ) ; // Border part
2017-10-03 04:31:32 +02:00
2019-08-08 16:23:34 +02:00
// TileSet editor icons
2021-05-10 20:11:46 +02:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #fce00e " , " #aa8d24 " ) ; // New Single Tile
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #0e71fc " , " #0350bd " ) ; // New Autotile
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #c6ced4 " , " #828f9b " ) ; // New Atlas
2022-01-28 17:38:48 +01:00
// Visual script
2021-05-10 20:11:46 +02:00
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #41ecad " , " #25e3a0 " ) ; // VisualScript variant
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #6f91f0 " , " #6d8eeb " ) ; // VisualScript bool
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #5abbef " , " #4fb2e9 " ) ; // VisualScript int
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #35d4f4 " , " #27ccf0 " ) ; // VisualScript float
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #4593ec " , " #4690e7 " ) ; // VisualScript String
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ac73f1 " , " #ad76ee " ) ; // VisualScript Vector2
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #f1738f " , " #ee758e " ) ; // VisualScript Rect2
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #de66f0 " , " #dc6aed " ) ; // VisualScript Vector3
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #b9ec41 " , " #96ce1a " ) ; // VisualScript Transform2D
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #f74949 " , " #f77070 " ) ; // VisualScript Plane
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ec418e " , " #ec69a3 " ) ; // VisualScript Quat
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ee5677 " , " #ee7991 " ) ; // VisualScript AABB
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #e1ec41 " , " #b2bb19 " ) ; // VisualScript Basis
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #f68f45 " , " #f49047 " ) ; // VisualScript Transform
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #417aec " , " #6993ec " ) ; // VisualScript NodePath
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #41ec80 " , " #2ce573 " ) ; // VisualScript RID
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #55f3e3 " , " #12d5c3 " ) ; // VisualScript Object
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #54ed9e " , " #57e99f " ) ; // VisualScript Dictionary
2022-01-28 17:38:48 +01:00
// Visual shaders
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #77ce57 " , " #67c046 " ) ; // Vector funcs
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #ea686c " , " #d95256 " ) ; // Vector transforms
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #eac968 " , " #d9b64f " ) ; // Textures and cubemaps
ADD_CONVERT_COLOR ( dark_icon_color_dictionary , " #cf68ea " , " #c050dd " ) ; // Functions and expressions
2020-01-19 23:21:49 +01:00
exceptions . insert ( " EditorPivot " ) ;
exceptions . insert ( " EditorHandle " ) ;
exceptions . insert ( " Editor3DHandle " ) ;
2021-02-04 09:20:26 +01:00
exceptions . insert ( " EditorBoneHandle " ) ;
2020-01-19 23:21:49 +01:00
exceptions . insert ( " Godot " ) ;
2020-03-20 01:32:19 +01:00
exceptions . insert ( " Sky " ) ;
2020-01-19 23:21:49 +01:00
exceptions . insert ( " EditorControlAnchor " ) ;
exceptions . insert ( " DefaultProjectIcon " ) ;
2021-05-22 03:42:51 +02:00
exceptions . insert ( " GuiChecked " ) ;
2021-06-02 23:43:05 +02:00
exceptions . insert ( " GuiRadioChecked " ) ;
2021-07-22 22:34:54 +02:00
exceptions . insert ( " GuiIndeterminate " ) ;
2020-01-19 23:21:49 +01:00
exceptions . insert ( " GuiCloseCustomizable " ) ;
exceptions . insert ( " GuiGraphNodePort " ) ;
exceptions . insert ( " GuiResizer " ) ;
exceptions . insert ( " ZoomMore " ) ;
exceptions . insert ( " ZoomLess " ) ;
exceptions . insert ( " ZoomReset " ) ;
exceptions . insert ( " LockViewport " ) ;
exceptions . insert ( " GroupViewport " ) ;
exceptions . insert ( " StatusError " ) ;
exceptions . insert ( " StatusSuccess " ) ;
exceptions . insert ( " StatusWarning " ) ;
exceptions . insert ( " OverbrightIndicator " ) ;
2022-02-12 14:55:07 +01:00
exceptions . insert ( " GuiMiniCheckerboard " ) ;
2022-02-23 12:12:09 +01:00
// Prevents Code Editor icons from changing
exceptions . insert ( " GuiTab " ) ;
exceptions . insert ( " GuiSpace " ) ;
exceptions . insert ( " CodeFoldedRightArrow " ) ;
exceptions . insert ( " CodeFoldDownArrow " ) ;
exceptions . insert ( " TextEditorPlay " ) ;
exceptions . insert ( " Breakpoint " ) ;
2017-09-14 04:30:07 +02:00
}
2020-01-19 23:21:49 +01:00
// These ones should be converted even if we are using a dark theme.
2022-02-06 15:53:53 +01:00
const Color error_color = p_theme - > get_color ( SNAME ( " error_color " ) , SNAME ( " Editor " ) ) ;
const Color success_color = p_theme - > get_color ( SNAME ( " success_color " ) , SNAME ( " Editor " ) ) ;
const Color warning_color = p_theme - > get_color ( SNAME ( " warning_color " ) , SNAME ( " Editor " ) ) ;
2022-01-28 17:38:48 +01:00
dark_icon_color_dictionary [ Color : : html ( " #ff5f5f " ) ] = error_color ;
dark_icon_color_dictionary [ Color : : html ( " #5fff97 " ) ] = success_color ;
dark_icon_color_dictionary [ Color : : html ( " #ffdd65 " ) ] = warning_color ;
2017-08-30 20:29:35 +02:00
2022-03-22 22:01:45 +01:00
// Use the accent color for some icons (checkbox, radio, toggle, etc.).
Dictionary accent_color_icon_color_dictionary ;
2022-05-19 17:00:06 +02:00
HashSet < StringName > accent_color_icons ;
2022-03-22 22:01:45 +01:00
const Color accent_color = p_theme - > get_color ( SNAME ( " accent_color " ) , SNAME ( " Editor " ) ) ;
accent_color_icon_color_dictionary [ Color : : html ( " 699ce8 " ) ] = accent_color ;
if ( accent_color . get_luminance ( ) > 0.75 ) {
accent_color_icon_color_dictionary [ Color : : html ( " ffffff " ) ] = Color ( 0.2 , 0.2 , 0.2 ) ;
}
accent_color_icons . insert ( " GuiChecked " ) ;
accent_color_icons . insert ( " GuiRadioChecked " ) ;
accent_color_icons . insert ( " GuiIndeterminate " ) ;
accent_color_icons . insert ( " GuiToggleOn " ) ;
accent_color_icons . insert ( " GuiToggleOnMirrored " ) ;
accent_color_icons . insert ( " PlayOverlay " ) ;
2020-01-19 23:21:49 +01:00
// Generate icons.
if ( ! p_only_thumbs ) {
2017-09-08 09:32:43 +02:00
for ( int i = 0 ; i < editor_icons_count ; i + + ) {
2022-03-22 22:01:45 +01:00
Ref < ImageTexture > icon ;
2020-08-21 19:21:17 +02:00
2022-03-22 22:01:45 +01:00
if ( accent_color_icons . has ( editor_icons_names [ i ] ) ) {
icon = editor_generate_icon ( i , true , EDSCALE , 1.0 , accent_color_icon_color_dictionary ) ;
} else {
float saturation = p_icon_saturation ;
if ( strcmp ( editor_icons_names [ i ] , " DefaultProjectIcon " ) = = 0 | | strcmp ( editor_icons_names [ i ] , " Godot " ) = = 0 | | strcmp ( editor_icons_names [ i ] , " Logo " ) = = 0 ) {
saturation = 1.0 ;
}
2021-02-12 16:16:37 +01:00
2022-03-22 22:01:45 +01:00
const int is_exception = exceptions . has ( editor_icons_names [ i ] ) ;
icon = editor_generate_icon ( i , ! is_exception , EDSCALE , saturation , dark_icon_color_dictionary ) ;
}
2020-01-19 23:21:49 +01:00
2022-02-06 15:53:53 +01:00
p_theme - > set_icon ( editor_icons_names [ i ] , SNAME ( " EditorIcons " ) , icon ) ;
2017-09-08 09:32:43 +02:00
}
2020-01-19 23:21:49 +01:00
}
2017-09-08 09:32:43 +02:00
2020-01-19 23:21:49 +01:00
// Generate thumbnail icons with the given thumbnail size.
// We don't need filtering when generating at one of the default resolutions.
const bool force_filter = p_thumb_size ! = 64 & & p_thumb_size ! = 32 ;
2017-09-08 09:32:43 +02:00
if ( p_thumb_size > = 64 ) {
2020-01-19 23:21:49 +01:00
const float scale = ( float ) p_thumb_size / 64.0 * EDSCALE ;
2017-09-08 09:32:43 +02:00
for ( int i = 0 ; i < editor_bg_thumbs_count ; i + + ) {
2020-01-19 23:21:49 +01:00
const int index = editor_bg_thumbs_indices [ i ] ;
const int is_exception = exceptions . has ( editor_icons_names [ index ] ) ;
2022-01-13 13:54:19 +01:00
const Ref < ImageTexture > icon = editor_generate_icon ( index , ! p_dark_theme & & ! is_exception , scale , force_filter , dark_icon_color_dictionary ) ;
2020-01-19 23:21:49 +01:00
2022-02-06 15:53:53 +01:00
p_theme - > set_icon ( editor_icons_names [ index ] , SNAME ( " EditorIcons " ) , icon ) ;
2017-09-08 09:32:43 +02:00
}
} else {
2020-01-19 23:21:49 +01:00
const float scale = ( float ) p_thumb_size / 32.0 * EDSCALE ;
2017-09-08 09:32:43 +02:00
for ( int i = 0 ; i < editor_md_thumbs_count ; i + + ) {
2020-01-19 23:21:49 +01:00
const int index = editor_md_thumbs_indices [ i ] ;
const bool is_exception = exceptions . has ( editor_icons_names [ index ] ) ;
2022-01-13 13:54:19 +01:00
const Ref < ImageTexture > icon = editor_generate_icon ( index , ! p_dark_theme & & ! is_exception , scale , force_filter , dark_icon_color_dictionary ) ;
2020-01-19 23:21:49 +01:00
2022-02-06 15:53:53 +01:00
p_theme - > set_icon ( editor_icons_names [ index ] , SNAME ( " EditorIcons " ) , icon ) ;
2017-08-30 20:29:35 +02:00
}
2017-08-19 04:34:09 +02:00
}
# else
2020-01-19 23:21:49 +01:00
WARN_PRINT ( " SVG support disabled, editor icons won't be rendered. " ) ;
2017-08-19 04:34:09 +02:00
# endif
}
Ref < Theme > create_editor_theme ( const Ref < Theme > p_theme ) {
2017-03-05 16:44:50 +01:00
Ref < Theme > theme = Ref < Theme > ( memnew ( Theme ) ) ;
2016-06-18 07:32:03 +02:00
2021-10-02 22:06:14 +02:00
// Controls may rely on the scale for their internal drawing logic.
2021-12-31 16:53:43 +01:00
theme - > set_default_base_scale ( EDSCALE ) ;
2017-07-15 06:40:17 +02:00
2019-03-23 01:57:28 +01:00
// Theme settings
2019-03-06 16:10:36 +01:00
Color accent_color = EDITOR_GET ( " interface/theme/accent_color " ) ;
Color base_color = EDITOR_GET ( " interface/theme/base_color " ) ;
float contrast = EDITOR_GET ( " interface/theme/contrast " ) ;
2021-02-12 16:16:37 +01:00
float icon_saturation = EDITOR_GET ( " interface/theme/icon_saturation " ) ;
2019-03-06 16:10:36 +01:00
float relationship_line_opacity = EDITOR_GET ( " interface/theme/relationship_line_opacity " ) ;
2017-08-15 19:30:53 +02:00
2019-03-06 16:10:36 +01:00
String preset = EDITOR_GET ( " interface/theme/preset " ) ;
2018-06-23 11:05:12 +02:00
2019-03-06 16:10:36 +01:00
int border_size = EDITOR_GET ( " interface/theme/border_size " ) ;
2019-03-23 01:57:28 +01:00
int corner_radius = EDITOR_GET ( " interface/theme/corner_radius " ) ;
2017-09-14 07:45:00 +02:00
2017-09-26 13:08:25 +02:00
Color preset_accent_color ;
Color preset_base_color ;
2018-10-04 13:04:58 +02:00
float preset_contrast = 0 ;
2018-06-23 11:05:12 +02:00
2021-10-02 22:06:14 +02:00
const float default_contrast = 0.3 ;
2019-03-23 01:57:28 +01:00
// Please use alphabetical order if you're adding a new theme here
// (after "Custom")
2018-06-23 11:05:12 +02:00
2019-03-23 01:57:28 +01:00
if ( preset = = " Custom " ) {
2019-03-06 16:10:36 +01:00
accent_color = EDITOR_GET ( " interface/theme/accent_color " ) ;
base_color = EDITOR_GET ( " interface/theme/base_color " ) ;
contrast = EDITOR_GET ( " interface/theme/contrast " ) ;
2019-03-23 01:57:28 +01:00
} else if ( preset = = " Breeze Dark " ) {
preset_accent_color = Color ( 0.26 , 0.76 , 1.00 ) ;
preset_base_color = Color ( 0.24 , 0.26 , 0.28 ) ;
preset_contrast = default_contrast ;
2018-06-23 11:05:12 +02:00
} else if ( preset = = " Godot 2 " ) {
2019-07-08 20:03:06 +02:00
preset_accent_color = Color ( 0.53 , 0.67 , 0.89 ) ;
preset_base_color = Color ( 0.24 , 0.23 , 0.27 ) ;
2019-03-23 01:57:28 +01:00
preset_contrast = default_contrast ;
2022-05-23 10:01:43 +02:00
} else if ( preset = = " Gray " ) {
preset_accent_color = Color ( 0.44 , 0.73 , 0.98 ) ;
2019-07-08 20:03:06 +02:00
preset_base_color = Color ( 0.24 , 0.24 , 0.24 ) ;
2019-03-23 01:57:28 +01:00
preset_contrast = default_contrast ;
2018-06-23 11:05:12 +02:00
} else if ( preset = = " Light " ) {
2019-03-23 01:57:28 +01:00
preset_accent_color = Color ( 0.18 , 0.50 , 1.00 ) ;
2021-05-27 11:35:33 +02:00
preset_base_color = Color ( 0.9 , 0.9 , 0.9 ) ;
// A negative contrast rate looks better for light themes, since it better follows the natural order of UI "elevation".
preset_contrast = - 0.08 ;
2018-06-23 11:05:12 +02:00
} else if ( preset = = " Solarized (Dark) " ) {
2019-07-08 20:03:06 +02:00
preset_accent_color = Color ( 0.15 , 0.55 , 0.82 ) ;
2019-03-23 01:57:28 +01:00
preset_base_color = Color ( 0.04 , 0.23 , 0.27 ) ;
preset_contrast = default_contrast ;
2018-06-23 11:05:12 +02:00
} else if ( preset = = " Solarized (Light) " ) {
2019-07-08 20:03:06 +02:00
preset_accent_color = Color ( 0.15 , 0.55 , 0.82 ) ;
2021-05-27 11:35:33 +02:00
preset_base_color = Color ( 0.89 , 0.86 , 0.79 ) ;
// A negative contrast rate looks better for light themes, since it better follows the natural order of UI "elevation".
preset_contrast = - 0.08 ;
2018-06-23 11:05:12 +02:00
} else { // Default
2019-03-23 01:57:28 +01:00
preset_accent_color = Color ( 0.44 , 0.73 , 0.98 ) ;
preset_base_color = Color ( 0.21 , 0.24 , 0.29 ) ;
2018-06-23 11:05:12 +02:00
preset_contrast = default_contrast ;
2017-09-26 13:08:25 +02:00
}
2018-06-23 11:05:12 +02:00
if ( preset ! = " Custom " ) {
2017-09-26 13:08:25 +02:00
accent_color = preset_accent_color ;
base_color = preset_base_color ;
contrast = preset_contrast ;
EditorSettings : : get_singleton ( ) - > set_initial_value ( " interface/theme/accent_color " , accent_color ) ;
EditorSettings : : get_singleton ( ) - > set_initial_value ( " interface/theme/base_color " , base_color ) ;
EditorSettings : : get_singleton ( ) - > set_initial_value ( " interface/theme/contrast " , contrast ) ;
2017-05-26 17:14:45 +02:00
}
2019-03-23 01:57:28 +01:00
2017-09-26 13:08:25 +02:00
EditorSettings : : get_singleton ( ) - > set_manually ( " interface/theme/preset " , preset ) ;
EditorSettings : : get_singleton ( ) - > set_manually ( " interface/theme/accent_color " , accent_color ) ;
EditorSettings : : get_singleton ( ) - > set_manually ( " interface/theme/base_color " , base_color ) ;
EditorSettings : : get_singleton ( ) - > set_manually ( " interface/theme/contrast " , contrast ) ;
2017-05-02 22:13:12 +02:00
2019-03-23 01:57:28 +01:00
// Colors
2018-06-10 16:30:49 +02:00
bool dark_theme = EditorSettings : : get_singleton ( ) - > is_dark_theme ( ) ;
2017-08-15 19:30:53 +02:00
2022-03-04 08:28:14 +01:00
// Ensure base colors are in the 0..1 luminance range to avoid 8-bit integer overflow or text rendering issues.
// Some places in the editor use 8-bit integer colors.
const Color dark_color_1 = base_color . lerp ( Color ( 0 , 0 , 0 , 1 ) , contrast ) . clamp ( ) ;
const Color dark_color_2 = base_color . lerp ( Color ( 0 , 0 , 0 , 1 ) , contrast * 1.5 ) . clamp ( ) ;
const Color dark_color_3 = base_color . lerp ( Color ( 0 , 0 , 0 , 1 ) , contrast * 2 ) . clamp ( ) ;
2017-05-02 22:13:12 +02:00
2017-09-08 08:06:02 +02:00
const Color background_color = dark_color_2 ;
2017-05-02 22:13:12 +02:00
2019-03-23 01:57:28 +01:00
// White (dark theme) or black (light theme), will be used to generate the rest of the colors
2017-09-08 08:06:02 +02:00
const Color mono_color = dark_theme ? Color ( 1 , 1 , 1 ) : Color ( 0 , 0 , 0 ) ;
2017-07-15 06:40:17 +02:00
2020-03-16 10:07:33 +01:00
const Color contrast_color_1 = base_color . lerp ( mono_color , MAX ( contrast , default_contrast ) ) ;
const Color contrast_color_2 = base_color . lerp ( mono_color , MAX ( contrast * 1.5 , default_contrast * 1.5 ) ) ;
2017-08-19 04:34:09 +02:00
2020-03-16 10:07:33 +01:00
const Color font_color = mono_color . lerp ( base_color , 0.25 ) ;
2019-03-23 01:57:28 +01:00
const Color font_hover_color = mono_color . lerp ( base_color , 0.125 ) ;
2021-10-26 16:28:12 +02:00
const Color font_focus_color = mono_color . lerp ( base_color , 0.125 ) ;
2020-12-08 14:11:45 +01:00
const Color font_disabled_color = Color ( mono_color . r , mono_color . g , mono_color . b , 0.3 ) ;
2021-07-31 21:14:14 +02:00
const Color font_readonly_color = Color ( mono_color . r , mono_color . g , mono_color . b , 0.65 ) ;
2022-01-30 18:56:23 +01:00
const Color font_placeholder_color = Color ( mono_color . r , mono_color . g , mono_color . b , 0.6 ) ;
2020-12-08 14:11:45 +01:00
const Color selection_color = accent_color * Color ( 1 , 1 , 1 , 0.4 ) ;
const Color disabled_color = mono_color . inverted ( ) . lerp ( base_color , 0.7 ) ;
const Color disabled_bg_color = mono_color . inverted ( ) . lerp ( base_color , 0.9 ) ;
2022-03-04 18:43:50 +01:00
const Color icon_normal_color = Color ( 1 , 1 , 1 ) ;
Color icon_hover_color = icon_normal_color * ( dark_theme ? 1.15 : 1.45 ) ;
2020-12-08 14:11:45 +01:00
icon_hover_color . a = 1.0 ;
2021-10-26 16:28:12 +02:00
Color icon_focus_color = icon_hover_color ;
2022-06-04 19:47:37 +02:00
Color icon_disabled_color = Color ( icon_normal_color , 0.4 ) ;
2019-08-08 16:23:34 +02:00
// Make the pressed icon color overbright because icons are not completely white on a dark theme.
// On a light theme, icons are dark, so we need to modulate them with an even brighter color.
2020-12-08 14:11:45 +01:00
Color icon_pressed_color = accent_color * ( dark_theme ? 1.15 : 3.5 ) ;
icon_pressed_color . a = 1.0 ;
2019-08-08 16:23:34 +02:00
2017-09-08 08:06:02 +02:00
const Color separator_color = Color ( mono_color . r , mono_color . g , mono_color . b , 0.1 ) ;
2019-03-23 01:57:28 +01:00
const Color highlight_color = Color ( accent_color . r , accent_color . g , accent_color . b , 0.275 ) ;
2021-08-16 04:42:24 +02:00
const Color disabled_highlight_color = highlight_color . lerp ( dark_theme ? Color ( 0 , 0 , 0 ) : Color ( 1 , 1 , 1 ) , 0.5 ) ;
2017-07-18 08:09:19 +02:00
2022-02-06 15:53:53 +01:00
float prev_icon_saturation = theme - > has_color ( SNAME ( " icon_saturation " ) , SNAME ( " Editor " ) ) ? theme - > get_color ( SNAME ( " icon_saturation " ) , SNAME ( " Editor " ) ) . r : 1.0 ;
2021-02-12 16:16:37 +01:00
2022-02-08 10:14:58 +01:00
theme - > set_color ( " icon_saturation " , " Editor " , Color ( icon_saturation , icon_saturation , icon_saturation ) ) ; // can't save single float in theme, so using color
theme - > set_color ( " accent_color " , " Editor " , accent_color ) ;
theme - > set_color ( " highlight_color " , " Editor " , highlight_color ) ;
theme - > set_color ( " disabled_highlight_color " , " Editor " , disabled_highlight_color ) ;
theme - > set_color ( " base_color " , " Editor " , base_color ) ;
theme - > set_color ( " dark_color_1 " , " Editor " , dark_color_1 ) ;
theme - > set_color ( " dark_color_2 " , " Editor " , dark_color_2 ) ;
theme - > set_color ( " dark_color_3 " , " Editor " , dark_color_3 ) ;
theme - > set_color ( " contrast_color_1 " , " Editor " , contrast_color_1 ) ;
theme - > set_color ( " contrast_color_2 " , " Editor " , contrast_color_2 ) ;
theme - > set_color ( " box_selection_fill_color " , " Editor " , accent_color * Color ( 1 , 1 , 1 , 0.3 ) ) ;
theme - > set_color ( " box_selection_stroke_color " , " Editor " , accent_color * Color ( 1 , 1 , 1 , 0.8 ) ) ;
theme - > set_color ( " axis_x_color " , " Editor " , Color ( 0.96 , 0.20 , 0.32 ) ) ;
theme - > set_color ( " axis_y_color " , " Editor " , Color ( 0.53 , 0.84 , 0.01 ) ) ;
theme - > set_color ( " axis_z_color " , " Editor " , Color ( 0.16 , 0.55 , 0.96 ) ) ;
2022-04-22 19:31:23 +02:00
theme - > set_color ( " axis_w_color " , " Editor " , Color ( 0.55 , 0.55 , 0.55 ) ) ;
2022-02-08 10:14:58 +01:00
2022-03-04 01:19:00 +01:00
const float prop_color_saturation = accent_color . get_s ( ) * 0.75 ;
const float prop_color_value = accent_color . get_v ( ) ;
theme - > set_color ( " property_color_x " , " Editor " , Color ( ) . from_hsv ( 0.0 / 3.0 + 0.05 , prop_color_saturation , prop_color_value ) ) ;
theme - > set_color ( " property_color_y " , " Editor " , Color ( ) . from_hsv ( 1.0 / 3.0 + 0.05 , prop_color_saturation , prop_color_value ) ) ;
theme - > set_color ( " property_color_z " , " Editor " , Color ( ) . from_hsv ( 2.0 / 3.0 + 0.05 , prop_color_saturation , prop_color_value ) ) ;
theme - > set_color ( " property_color_w " , " Editor " , Color ( ) . from_hsv ( 1.5 / 3.0 + 0.05 , prop_color_saturation , prop_color_value ) ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " font_color " , " Editor " , font_color ) ;
theme - > set_color ( " highlighted_font_color " , " Editor " , font_hover_color ) ;
theme - > set_color ( " disabled_font_color " , " Editor " , font_disabled_color ) ;
2021-11-08 21:53:41 +01:00
theme - > set_color ( " readonly_font_color " , " Editor " , font_readonly_color ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " mono_color " , " Editor " , mono_color ) ;
2017-09-26 04:43:20 +02:00
2018-12-15 18:06:26 +01:00
Color success_color = Color ( 0.45 , 0.95 , 0.5 ) ;
Color warning_color = Color ( 1 , 0.87 , 0.4 ) ;
Color error_color = Color ( 1 , 0.47 , 0.42 ) ;
2020-03-16 10:07:33 +01:00
Color property_color = font_color . lerp ( Color ( 0.5 , 0.5 , 0.5 ) , 0.5 ) ;
2021-08-16 04:42:24 +02:00
Color readonly_color = property_color . lerp ( dark_theme ? Color ( 0 , 0 , 0 ) : Color ( 1 , 1 , 1 ) , 0.5 ) ;
2021-09-30 17:08:04 +02:00
Color readonly_warning_color = error_color . lerp ( dark_theme ? Color ( 0 , 0 , 0 ) : Color ( 1 , 1 , 1 ) , 0.5 ) ;
2018-08-07 17:19:19 +02:00
2017-09-26 04:43:20 +02:00
if ( ! dark_theme ) {
2018-12-15 18:06:26 +01:00
// Darken some colors to be readable on a light background
2020-03-16 10:07:33 +01:00
success_color = success_color . lerp ( mono_color , 0.35 ) ;
warning_color = warning_color . lerp ( mono_color , 0.35 ) ;
error_color = error_color . lerp ( mono_color , 0.25 ) ;
2017-09-26 04:43:20 +02:00
}
2018-12-15 18:06:26 +01:00
2022-02-08 10:14:58 +01:00
theme - > set_color ( " success_color " , " Editor " , success_color ) ;
theme - > set_color ( " warning_color " , " Editor " , warning_color ) ;
theme - > set_color ( " error_color " , " Editor " , error_color ) ;
theme - > set_color ( " property_color " , " Editor " , property_color ) ;
theme - > set_color ( " readonly_color " , " Editor " , readonly_color ) ;
2017-07-31 20:19:45 +02:00
2020-02-12 16:39:19 +01:00
if ( ! dark_theme ) {
2022-02-08 10:14:58 +01:00
theme - > set_color ( " vulkan_color " , " Editor " , Color : : hex ( 0xad1128ff ) ) ;
2020-02-12 16:39:19 +01:00
} else {
2022-02-08 10:14:58 +01:00
theme - > set_color ( " vulkan_color " , " Editor " , Color ( 1.0 , 0.0 , 0.0 ) ) ;
2020-02-12 16:39:19 +01:00
}
2019-03-06 16:10:36 +01:00
const int thumb_size = EDITOR_GET ( " filesystem/file_dialog/thumbnail_size " ) ;
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " scale " , " Editor " , EDSCALE ) ;
theme - > set_constant ( " thumb_size " , " Editor " , thumb_size ) ;
theme - > set_constant ( " dark_theme " , " Editor " , dark_theme ) ;
2022-05-17 22:44:15 +02:00
theme - > set_constant ( " color_picker_button_height " , " Editor " , 28 * EDSCALE ) ;
2017-08-15 19:30:53 +02:00
2019-03-23 01:57:28 +01:00
// Register icons + font
2017-08-15 19:30:53 +02:00
2022-03-22 22:01:45 +01:00
// The editor scale, icon color (dark_theme bool), icon saturation, and accent color has not changed, so we do not regenerate the icons.
if ( p_theme ! = nullptr & & fabs ( p_theme - > get_constant ( SNAME ( " scale " ) , SNAME ( " Editor " ) ) - EDSCALE ) < 0.00001 & & ( bool ) p_theme - > get_constant ( SNAME ( " dark_theme " ) , SNAME ( " Editor " ) ) = = dark_theme & & prev_icon_saturation = = icon_saturation & & p_theme - > get_color ( SNAME ( " accent_color " ) , SNAME ( " Editor " ) ) = = accent_color ) {
2019-03-23 01:57:28 +01:00
// Register already generated icons.
2017-08-15 19:30:53 +02:00
for ( int i = 0 ; i < editor_icons_count ; i + + ) {
2022-02-06 15:53:53 +01:00
theme - > set_icon ( editor_icons_names [ i ] , SNAME ( " EditorIcons " ) , p_theme - > get_icon ( editor_icons_names [ i ] , SNAME ( " EditorIcons " ) ) ) ;
2017-08-15 19:30:53 +02:00
}
} else {
2021-02-12 16:16:37 +01:00
editor_register_and_generate_icons ( theme , dark_theme , thumb_size , false , icon_saturation ) ;
2017-09-08 09:32:43 +02:00
}
2019-03-23 01:57:28 +01:00
// Thumbnail size has changed, so we regenerate the medium sizes
2022-02-06 15:53:53 +01:00
if ( p_theme ! = nullptr & & fabs ( ( double ) p_theme - > get_constant ( SNAME ( " thumb_size " ) , SNAME ( " Editor " ) ) - thumb_size ) > 0.00001 ) {
2017-09-08 09:32:43 +02:00
editor_register_and_generate_icons ( p_theme , dark_theme , thumb_size , true ) ;
2017-08-15 19:30:53 +02:00
}
editor_register_fonts ( theme ) ;
2017-05-02 22:13:12 +02:00
2020-11-12 16:01:27 +01:00
// Ensure borders are visible when using an editor scale below 100%.
2019-03-23 01:57:28 +01:00
const int border_width = CLAMP ( border_size , 0 , 2 ) * MAX ( 1 , EDSCALE ) ;
2021-05-27 17:32:30 +02:00
const int corner_width = CLAMP ( corner_radius , 0 , 6 ) ;
2017-09-12 23:46:23 +02:00
const int default_margin_size = 4 ;
2019-03-23 01:57:28 +01:00
const int margin_size_extra = default_margin_size + CLAMP ( border_size , 0 , 2 ) ;
2017-09-12 23:46:23 +02:00
2019-03-23 01:57:28 +01:00
// Styleboxes
// This is the most commonly used stylebox, variations should be made as duplicate of this
Ref < StyleBoxFlat > style_default = make_flat_stylebox ( base_color , default_margin_size , default_margin_size , default_margin_size , default_margin_size , corner_width ) ;
2017-09-08 08:06:02 +02:00
style_default - > set_border_width_all ( border_width ) ;
2019-03-19 10:32:13 +01:00
style_default - > set_border_color ( base_color ) ;
2017-09-08 08:06:02 +02:00
style_default - > set_draw_center ( true ) ;
// Button and widgets
2017-09-28 23:41:46 +02:00
const float extra_spacing = EDITOR_GET ( " interface/theme/additional_spacing " ) ;
2017-09-08 08:06:02 +02:00
2019-03-23 01:57:28 +01:00
const Vector2 widget_default_margin = Vector2 ( extra_spacing + 6 , extra_spacing + default_margin_size + 1 ) * EDSCALE ;
2017-09-19 00:20:06 +02:00
Ref < StyleBoxFlat > style_widget = style_default - > duplicate ( ) ;
2019-03-23 01:57:28 +01:00
style_widget - > set_default_margin ( SIDE_LEFT , widget_default_margin . x ) ;
style_widget - > set_default_margin ( SIDE_TOP , widget_default_margin . y ) ;
style_widget - > set_default_margin ( SIDE_RIGHT , widget_default_margin . x ) ;
style_widget - > set_default_margin ( SIDE_BOTTOM , widget_default_margin . y ) ;
2017-09-08 08:06:02 +02:00
style_widget - > set_bg_color ( dark_color_1 ) ;
2019-03-19 10:32:13 +01:00
style_widget - > set_border_color ( dark_color_2 ) ;
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_widget_disabled = style_widget - > duplicate ( ) ;
2020-12-08 14:11:45 +01:00
style_widget_disabled - > set_border_color ( disabled_color ) ;
style_widget_disabled - > set_bg_color ( disabled_bg_color ) ;
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_widget_focus = style_widget - > duplicate ( ) ;
2019-03-23 01:57:28 +01:00
style_widget_focus - > set_draw_center ( false ) ;
style_widget_focus - > set_border_width_all ( Math : : round ( 2 * MAX ( 1 , EDSCALE ) ) ) ;
2019-03-19 10:32:13 +01:00
style_widget_focus - > set_border_color ( accent_color ) ;
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_widget_pressed = style_widget - > duplicate ( ) ;
2019-03-23 01:57:28 +01:00
style_widget_pressed - > set_bg_color ( dark_color_1 . darkened ( 0.125 ) ) ;
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_widget_hover = style_widget - > duplicate ( ) ;
2019-03-23 01:57:28 +01:00
style_widget_hover - > set_bg_color ( mono_color * Color ( 1 , 1 , 1 , 0.11 ) ) ;
style_widget_hover - > set_border_color ( mono_color * Color ( 1 , 1 , 1 , 0.05 ) ) ;
2017-09-08 08:06:02 +02:00
2019-03-23 01:57:28 +01:00
// Style for windows, popups, etc..
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_popup = style_default - > duplicate ( ) ;
2019-03-23 01:57:28 +01:00
const int popup_margin_size = default_margin_size * EDSCALE * 3 ;
2020-12-22 17:24:29 +01:00
style_popup - > set_default_margin ( SIDE_LEFT , popup_margin_size ) ;
style_popup - > set_default_margin ( SIDE_TOP , popup_margin_size ) ;
style_popup - > set_default_margin ( SIDE_RIGHT , popup_margin_size ) ;
style_popup - > set_default_margin ( SIDE_BOTTOM , popup_margin_size ) ;
2019-03-19 10:32:13 +01:00
style_popup - > set_border_color ( contrast_color_1 ) ;
2017-09-08 21:41:44 +02:00
const Color shadow_color = Color ( 0 , 0 , 0 , dark_theme ? 0.3 : 0.1 ) ;
style_popup - > set_shadow_color ( shadow_color ) ;
2017-09-08 08:06:02 +02:00
style_popup - > set_shadow_size ( 4 * EDSCALE ) ;
2017-09-27 21:44:48 +02:00
Ref < StyleBoxLine > style_popup_separator ( memnew ( StyleBoxLine ) ) ;
style_popup_separator - > set_color ( separator_color ) ;
2019-03-23 01:57:28 +01:00
style_popup_separator - > set_grow_begin ( popup_margin_size - MAX ( Math : : round ( EDSCALE ) , border_width ) ) ;
style_popup_separator - > set_grow_end ( popup_margin_size - MAX ( Math : : round ( EDSCALE ) , border_width ) ) ;
style_popup_separator - > set_thickness ( MAX ( Math : : round ( EDSCALE ) , border_width ) ) ;
2017-09-27 21:44:48 +02:00
2018-07-14 23:15:42 +02:00
Ref < StyleBoxLine > style_popup_labeled_separator_left ( memnew ( StyleBoxLine ) ) ;
2019-03-23 01:57:28 +01:00
style_popup_labeled_separator_left - > set_grow_begin ( popup_margin_size - MAX ( Math : : round ( EDSCALE ) , border_width ) ) ;
2018-07-14 23:15:42 +02:00
style_popup_labeled_separator_left - > set_color ( separator_color ) ;
2019-03-23 01:57:28 +01:00
style_popup_labeled_separator_left - > set_thickness ( MAX ( Math : : round ( EDSCALE ) , border_width ) ) ;
2018-07-14 23:15:42 +02:00
Ref < StyleBoxLine > style_popup_labeled_separator_right ( memnew ( StyleBoxLine ) ) ;
2019-03-23 01:57:28 +01:00
style_popup_labeled_separator_right - > set_grow_end ( popup_margin_size - MAX ( Math : : round ( EDSCALE ) , border_width ) ) ;
2018-07-14 23:15:42 +02:00
style_popup_labeled_separator_right - > set_color ( separator_color ) ;
2019-03-23 01:57:28 +01:00
style_popup_labeled_separator_right - > set_thickness ( MAX ( Math : : round ( EDSCALE ) , border_width ) ) ;
2018-07-14 23:15:42 +02:00
2017-09-08 08:06:02 +02:00
Ref < StyleBoxEmpty > style_empty = make_empty_stylebox ( default_margin_size , default_margin_size , default_margin_size , default_margin_size ) ;
2021-10-17 18:55:44 +02:00
// TabBar
2017-09-28 23:41:46 +02:00
2017-09-19 00:20:06 +02:00
Ref < StyleBoxFlat > style_tab_selected = style_widget - > duplicate ( ) ;
2017-09-18 21:06:55 +02:00
2019-03-23 01:57:28 +01:00
// Add a highlight line at the top of the selected tab.
style_tab_selected - > set_border_width_all ( 0 ) ;
2021-05-08 18:56:48 +02:00
style_tab_selected - > set_default_margin ( SIDE_LEFT , widget_default_margin . x - border_width ) ;
2019-03-23 01:57:28 +01:00
style_tab_selected - > set_border_width ( SIDE_TOP , Math : : round ( 2 * EDSCALE ) ) ;
// Make the highlight line prominent, but not too prominent as to not be distracting.
2022-03-20 02:24:36 +01:00
Color tab_highlight = dark_color_2 . lerp ( accent_color , 0.75 ) ;
style_tab_selected - > set_border_color ( tab_highlight ) ;
2019-03-23 01:57:28 +01:00
// Don't round the top corners to avoid creating a small blank space between the tabs and the main panel.
// This also makes the top highlight look better.
style_tab_selected - > set_corner_radius_all ( 0 ) ;
// Prevent visible artifacts and cover the top-left rounded corner of the panel below the tab if selected
// We can't prevent them with both rounded corners and non-zero border width, though
style_tab_selected - > set_expand_margin_size ( SIDE_BOTTOM , corner_width > 0 ? corner_width : border_width ) ;
2021-05-08 18:56:48 +02:00
// When using a border width greater than 0, visually line up the left of the selected tab with the underlying panel.
style_tab_selected - > set_expand_margin_size ( SIDE_LEFT , - border_width ) ;
2019-03-23 01:57:28 +01:00
style_tab_selected - > set_default_margin ( SIDE_LEFT , widget_default_margin . x + 2 * EDSCALE ) ;
style_tab_selected - > set_default_margin ( SIDE_RIGHT , widget_default_margin . x + 2 * EDSCALE ) ;
style_tab_selected - > set_default_margin ( SIDE_BOTTOM , widget_default_margin . y ) ;
style_tab_selected - > set_default_margin ( SIDE_TOP , widget_default_margin . y ) ;
style_tab_selected - > set_bg_color ( base_color ) ;
2017-09-08 08:06:02 +02:00
2017-09-18 01:58:36 +02:00
Ref < StyleBoxFlat > style_tab_unselected = style_tab_selected - > duplicate ( ) ;
2018-09-30 19:01:32 +02:00
style_tab_unselected - > set_bg_color ( dark_color_1 ) ;
2019-03-23 01:57:28 +01:00
style_tab_unselected - > set_expand_margin_size ( SIDE_BOTTOM , 0 ) ;
// Add some spacing between unselected tabs to make them easier to distinguish from each other
2021-05-11 23:07:16 +02:00
style_tab_unselected - > set_border_color ( Color ( 0 , 0 , 0 , 0 ) ) ;
style_tab_unselected - > set_border_width ( SIDE_LEFT , Math : : round ( 1 * EDSCALE ) ) ;
style_tab_unselected - > set_border_width ( SIDE_RIGHT , Math : : round ( 1 * EDSCALE ) ) ;
style_tab_unselected - > set_default_margin ( SIDE_LEFT , widget_default_margin . x + 2 * EDSCALE ) ;
style_tab_unselected - > set_default_margin ( SIDE_RIGHT , widget_default_margin . x + 2 * EDSCALE ) ;
2017-09-08 08:06:02 +02:00
2019-02-10 21:11:54 +01:00
Ref < StyleBoxFlat > style_tab_disabled = style_tab_selected - > duplicate ( ) ;
2020-12-08 14:11:45 +01:00
style_tab_disabled - > set_bg_color ( disabled_bg_color ) ;
2019-03-23 01:57:28 +01:00
style_tab_disabled - > set_expand_margin_size ( SIDE_BOTTOM , 0 ) ;
style_tab_disabled - > set_border_color ( disabled_bg_color ) ;
2019-02-10 21:11:54 +01:00
2017-05-02 22:13:12 +02:00
// Editor background
2020-02-08 04:03:20 +01:00
Color background_color_opaque = background_color ;
background_color_opaque . a = 1.0 ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " Background " , " EditorStyles " , make_flat_stylebox ( background_color_opaque , default_margin_size , default_margin_size , default_margin_size , default_margin_size ) ) ;
2017-05-02 22:13:12 +02:00
// Focus
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " Focus " , " EditorStyles " , style_widget_focus ) ;
2021-05-09 01:56:22 +02:00
// Use a less opaque color to be less distracting for the 2D and 3D editor viewports.
Ref < StyleBoxFlat > style_widget_focus_viewport = style_widget_focus - > duplicate ( ) ;
style_widget_focus_viewport - > set_border_color ( accent_color * Color ( 1 , 1 , 1 , 0.5 ) ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " FocusViewport " , " EditorStyles " , style_widget_focus_viewport ) ;
2017-05-02 22:13:12 +02:00
// Menu
2017-09-19 00:20:06 +02:00
Ref < StyleBoxFlat > style_menu = style_widget - > duplicate ( ) ;
style_menu - > set_draw_center ( false ) ;
style_menu - > set_border_width_all ( 0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " panel " , " PanelContainer " , style_menu ) ;
theme - > set_stylebox ( " MenuPanel " , " EditorStyles " , style_menu ) ;
2017-05-02 22:13:12 +02:00
2021-08-14 01:01:15 +02:00
// CanvasItem Editor
Ref < StyleBoxFlat > style_canvas_editor_info = make_flat_stylebox ( Color ( 0.0 , 0.0 , 0.0 , 0.2 ) ) ;
style_canvas_editor_info - > set_expand_margin_size_all ( 4 * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " CanvasItemInfoOverlay " , " EditorStyles " , style_canvas_editor_info ) ;
2021-08-14 01:01:15 +02:00
2022-04-01 06:43:46 +02:00
// 2D and 3D contextual toolbar.
// Use a custom stylebox to make contextual menu items stand out from the rest.
// This helps with editor usability as contextual menu items change when selecting nodes,
// even though it may not be immediately obvious at first.
Ref < StyleBoxFlat > toolbar_stylebox = memnew ( StyleBoxFlat ) ;
toolbar_stylebox - > set_bg_color ( accent_color * Color ( 1 , 1 , 1 , 0.1 ) ) ;
toolbar_stylebox - > set_corner_radius ( CORNER_TOP_LEFT , corner_radius * EDSCALE ) ;
toolbar_stylebox - > set_corner_radius ( CORNER_TOP_RIGHT , corner_radius * EDSCALE ) ;
toolbar_stylebox - > set_anti_aliased ( false ) ;
// Add an underline to the StyleBox, but prevent its minimum vertical size from changing.
toolbar_stylebox - > set_border_color ( accent_color ) ;
toolbar_stylebox - > set_border_width ( SIDE_BOTTOM , Math : : round ( 2 * EDSCALE ) ) ;
toolbar_stylebox - > set_default_margin ( SIDE_BOTTOM , 0 ) ;
theme - > set_stylebox ( " ContextualToolbar " , " EditorStyles " , toolbar_stylebox ) ;
2017-09-06 23:25:57 +02:00
// Script Editor
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " ScriptEditorPanel " , " EditorStyles " , make_empty_stylebox ( default_margin_size , 0 , default_margin_size , default_margin_size ) ) ;
theme - > set_stylebox ( " ScriptEditor " , " EditorStyles " , make_empty_stylebox ( 0 , 0 , 0 , 0 ) ) ;
2017-09-06 23:25:57 +02:00
2017-05-02 22:13:12 +02:00
// Play button group
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " PlayButtonPanel " , " EditorStyles " , style_empty ) ;
2017-05-02 22:13:12 +02:00
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " normal " , " MenuButton " , style_menu ) ;
theme - > set_stylebox ( " hover " , " MenuButton " , style_widget_hover ) ;
theme - > set_stylebox ( " pressed " , " MenuButton " , style_menu ) ;
theme - > set_stylebox ( " focus " , " MenuButton " , style_menu ) ;
theme - > set_stylebox ( " disabled " , " MenuButton " , style_menu ) ;
2017-08-29 16:56:43 +02:00
2022-02-08 10:14:58 +01:00
theme - > set_color ( " font_color " , " MenuButton " , font_color ) ;
theme - > set_color ( " font_hover_color " , " MenuButton " , font_hover_color ) ;
theme - > set_color ( " font_focus_color " , " MenuButton " , font_focus_color ) ;
2017-05-02 22:13:12 +02:00
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " MenuHover " , " EditorStyles " , style_widget_hover ) ;
2017-05-02 22:13:12 +02:00
2017-09-08 08:06:02 +02:00
// Buttons
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " normal " , " Button " , style_widget ) ;
theme - > set_stylebox ( " hover " , " Button " , style_widget_hover ) ;
theme - > set_stylebox ( " pressed " , " Button " , style_widget_pressed ) ;
theme - > set_stylebox ( " focus " , " Button " , style_widget_focus ) ;
theme - > set_stylebox ( " disabled " , " Button " , style_widget_disabled ) ;
theme - > set_color ( " font_color " , " Button " , font_color ) ;
theme - > set_color ( " font_hover_color " , " Button " , font_hover_color ) ;
theme - > set_color ( " font_focus_color " , " Button " , font_focus_color ) ;
theme - > set_color ( " font_pressed_color " , " Button " , accent_color ) ;
theme - > set_color ( " font_disabled_color " , " Button " , font_disabled_color ) ;
2022-06-04 19:47:37 +02:00
2022-03-04 18:43:50 +01:00
theme - > set_color ( " icon_normal_color " , " Button " , icon_normal_color ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " icon_hover_color " , " Button " , icon_hover_color ) ;
theme - > set_color ( " icon_focus_color " , " Button " , icon_focus_color ) ;
theme - > set_color ( " icon_pressed_color " , " Button " , icon_pressed_color ) ;
2022-06-04 19:47:37 +02:00
theme - > set_color ( " icon_disabled_color " , " Button " , icon_disabled_color ) ;
2017-05-02 22:13:12 +02:00
2022-05-25 01:38:13 +02:00
const float ACTION_BUTTON_EXTRA_MARGIN = 32 * EDSCALE ;
theme - > set_type_variation ( " InspectorActionButton " , " Button " ) ;
Color color_inspector_action = dark_color_1 . lerp ( mono_color , 0.12 ) ;
color_inspector_action . a = 0.5 ;
Ref < StyleBoxFlat > style_inspector_action = style_widget - > duplicate ( ) ;
style_inspector_action - > set_bg_color ( color_inspector_action ) ;
style_inspector_action - > set_default_margin ( SIDE_RIGHT , ACTION_BUTTON_EXTRA_MARGIN ) ;
theme - > set_stylebox ( " normal " , " InspectorActionButton " , style_inspector_action ) ;
style_inspector_action = style_widget_hover - > duplicate ( ) ;
style_inspector_action - > set_default_margin ( SIDE_RIGHT , ACTION_BUTTON_EXTRA_MARGIN ) ;
theme - > set_stylebox ( " hover " , " InspectorActionButton " , style_inspector_action ) ;
style_inspector_action = style_widget_pressed - > duplicate ( ) ;
style_inspector_action - > set_default_margin ( SIDE_RIGHT , ACTION_BUTTON_EXTRA_MARGIN ) ;
theme - > set_stylebox ( " pressed " , " InspectorActionButton " , style_inspector_action ) ;
style_inspector_action = style_widget_disabled - > duplicate ( ) ;
style_inspector_action - > set_default_margin ( SIDE_RIGHT , ACTION_BUTTON_EXTRA_MARGIN ) ;
theme - > set_stylebox ( " disabled " , " InspectorActionButton " , style_inspector_action ) ;
theme - > set_constant ( " h_separation " , " InspectorActionButton " , ACTION_BUTTON_EXTRA_MARGIN ) ;
2022-03-14 12:47:13 +01:00
// Variation for Editor Log filter buttons
theme - > set_type_variation ( " EditorLogFilterButton " , " Button " ) ;
// When pressed, don't tint the icons with the accent color, just leave them normal.
theme - > set_color ( " icon_pressed_color " , " EditorLogFilterButton " , icon_normal_color ) ;
// When unpressed, dim the icons.
2022-06-04 19:47:37 +02:00
theme - > set_color ( " icon_normal_color " , " EditorLogFilterButton " , icon_disabled_color ) ;
2022-03-14 12:47:13 +01:00
// When pressed, add a small bottom border to the buttons to better show their active state,
// similar to active tabs.
Ref < StyleBoxFlat > editor_log_button_pressed = style_widget_pressed - > duplicate ( ) ;
editor_log_button_pressed - > set_border_width ( SIDE_BOTTOM , 2 * EDSCALE ) ;
editor_log_button_pressed - > set_border_color ( accent_color ) ;
theme - > set_stylebox ( " pressed " , " EditorLogFilterButton " , editor_log_button_pressed ) ;
2017-05-02 22:13:12 +02:00
// OptionButton
2022-04-30 03:56:57 +02:00
Ref < StyleBoxFlat > style_option_button_focus = style_widget_focus - > duplicate ( ) ;
Ref < StyleBoxFlat > style_option_button_normal = style_widget - > duplicate ( ) ;
Ref < StyleBoxFlat > style_option_button_hover = style_widget_hover - > duplicate ( ) ;
Ref < StyleBoxFlat > style_option_button_pressed = style_widget_pressed - > duplicate ( ) ;
Ref < StyleBoxFlat > style_option_button_disabled = style_widget_disabled - > duplicate ( ) ;
style_option_button_focus - > set_default_margin ( SIDE_RIGHT , 4 * EDSCALE ) ;
style_option_button_normal - > set_default_margin ( SIDE_RIGHT , 4 * EDSCALE ) ;
style_option_button_hover - > set_default_margin ( SIDE_RIGHT , 4 * EDSCALE ) ;
style_option_button_pressed - > set_default_margin ( SIDE_RIGHT , 4 * EDSCALE ) ;
style_option_button_disabled - > set_default_margin ( SIDE_RIGHT , 4 * EDSCALE ) ;
theme - > set_stylebox ( " focus " , " OptionButton " , style_option_button_focus ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " normal " , " OptionButton " , style_widget ) ;
theme - > set_stylebox ( " hover " , " OptionButton " , style_widget_hover ) ;
theme - > set_stylebox ( " pressed " , " OptionButton " , style_widget_pressed ) ;
theme - > set_stylebox ( " disabled " , " OptionButton " , style_widget_disabled ) ;
2022-04-30 03:56:57 +02:00
theme - > set_stylebox ( " normal_mirrored " , " OptionButton " , style_option_button_normal ) ;
theme - > set_stylebox ( " hover_mirrored " , " OptionButton " , style_option_button_hover ) ;
theme - > set_stylebox ( " pressed_mirrored " , " OptionButton " , style_option_button_pressed ) ;
theme - > set_stylebox ( " disabled_mirrored " , " OptionButton " , style_option_button_disabled ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " font_color " , " OptionButton " , font_color ) ;
theme - > set_color ( " font_hover_color " , " OptionButton " , font_hover_color ) ;
theme - > set_color ( " font_focus_color " , " OptionButton " , font_focus_color ) ;
theme - > set_color ( " font_pressed_color " , " OptionButton " , accent_color ) ;
theme - > set_color ( " font_disabled_color " , " OptionButton " , font_disabled_color ) ;
2022-06-04 19:47:37 +02:00
theme - > set_color ( " icon_normal_color " , " OptionButton " , icon_normal_color ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " icon_hover_color " , " OptionButton " , icon_hover_color ) ;
theme - > set_color ( " icon_focus_color " , " OptionButton " , icon_focus_color ) ;
2022-06-04 19:47:37 +02:00
theme - > set_color ( " icon_pressed_color " , " OptionButton " , icon_pressed_color ) ;
theme - > set_color ( " icon_disabled_color " , " OptionButton " , icon_disabled_color ) ;
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " arrow " , " OptionButton " , theme - > get_icon ( SNAME ( " GuiOptionArrow " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_constant ( " arrow_margin " , " OptionButton " , widget_default_margin . x - 2 * EDSCALE ) ;
theme - > set_constant ( " modulate_arrow " , " OptionButton " , true ) ;
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " h_separation " , " OptionButton " , 4 * EDSCALE ) ;
2017-07-15 06:40:17 +02:00
// CheckButton
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " normal " , " CheckButton " , style_menu ) ;
theme - > set_stylebox ( " pressed " , " CheckButton " , style_menu ) ;
theme - > set_stylebox ( " disabled " , " CheckButton " , style_menu ) ;
theme - > set_stylebox ( " hover " , " CheckButton " , style_menu ) ;
2022-08-03 16:08:30 +02:00
theme - > set_stylebox ( " hover_pressed " , " CheckButton " , style_menu ) ;
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " on " , " CheckButton " , theme - > get_icon ( SNAME ( " GuiToggleOn " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " on_disabled " , " CheckButton " , theme - > get_icon ( SNAME ( " GuiToggleOnDisabled " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " off " , " CheckButton " , theme - > get_icon ( SNAME ( " GuiToggleOff " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " off_disabled " , " CheckButton " , theme - > get_icon ( SNAME ( " GuiToggleOffDisabled " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " on_mirrored " , " CheckButton " , theme - > get_icon ( SNAME ( " GuiToggleOnMirrored " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " on_disabled_mirrored " , " CheckButton " , theme - > get_icon ( SNAME ( " GuiToggleOnDisabledMirrored " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " off_mirrored " , " CheckButton " , theme - > get_icon ( SNAME ( " GuiToggleOffMirrored " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " off_disabled_mirrored " , " CheckButton " , theme - > get_icon ( SNAME ( " GuiToggleOffDisabledMirrored " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_color ( " font_color " , " CheckButton " , font_color ) ;
theme - > set_color ( " font_hover_color " , " CheckButton " , font_hover_color ) ;
theme - > set_color ( " font_focus_color " , " CheckButton " , font_focus_color ) ;
theme - > set_color ( " font_pressed_color " , " CheckButton " , accent_color ) ;
theme - > set_color ( " font_disabled_color " , " CheckButton " , font_disabled_color ) ;
2022-06-04 19:47:37 +02:00
theme - > set_color ( " icon_normal_color " , " CheckButton " , icon_normal_color ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " icon_hover_color " , " CheckButton " , icon_hover_color ) ;
theme - > set_color ( " icon_focus_color " , " CheckButton " , icon_focus_color ) ;
2022-06-04 19:47:37 +02:00
theme - > set_color ( " icon_pressed_color " , " CheckButton " , icon_pressed_color ) ;
theme - > set_color ( " icon_disabled_color " , " CheckButton " , icon_disabled_color ) ;
2022-02-08 10:14:58 +01:00
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " h_separation " , " CheckButton " , 8 * EDSCALE ) ;
theme - > set_constant ( " check_v_adjust " , " CheckButton " , 0 * EDSCALE ) ;
2017-11-11 18:57:54 +01:00
2017-08-15 19:30:53 +02:00
// Checkbox
2017-11-11 18:57:54 +01:00
Ref < StyleBoxFlat > sb_checkbox = style_menu - > duplicate ( ) ;
2020-12-22 17:24:29 +01:00
sb_checkbox - > set_default_margin ( SIDE_LEFT , default_margin_size * EDSCALE ) ;
sb_checkbox - > set_default_margin ( SIDE_RIGHT , default_margin_size * EDSCALE ) ;
sb_checkbox - > set_default_margin ( SIDE_TOP , default_margin_size * EDSCALE ) ;
sb_checkbox - > set_default_margin ( SIDE_BOTTOM , default_margin_size * EDSCALE ) ;
2017-11-11 18:57:54 +01:00
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " normal " , " CheckBox " , sb_checkbox ) ;
theme - > set_stylebox ( " pressed " , " CheckBox " , sb_checkbox ) ;
theme - > set_stylebox ( " disabled " , " CheckBox " , sb_checkbox ) ;
theme - > set_stylebox ( " hover " , " CheckBox " , sb_checkbox ) ;
2022-08-03 16:08:30 +02:00
theme - > set_stylebox ( " hover_pressed " , " CheckBox " , sb_checkbox ) ;
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " checked " , " CheckBox " , theme - > get_icon ( SNAME ( " GuiChecked " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " unchecked " , " CheckBox " , theme - > get_icon ( SNAME ( " GuiUnchecked " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " radio_checked " , " CheckBox " , theme - > get_icon ( SNAME ( " GuiRadioChecked " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " radio_unchecked " , " CheckBox " , theme - > get_icon ( SNAME ( " GuiRadioUnchecked " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " checked_disabled " , " CheckBox " , theme - > get_icon ( SNAME ( " GuiCheckedDisabled " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " unchecked_disabled " , " CheckBox " , theme - > get_icon ( SNAME ( " GuiUncheckedDisabled " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " radio_checked_disabled " , " CheckBox " , theme - > get_icon ( SNAME ( " GuiRadioCheckedDisabled " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " radio_unchecked_disabled " , " CheckBox " , theme - > get_icon ( SNAME ( " GuiRadioUncheckedDisabled " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_color ( " font_color " , " CheckBox " , font_color ) ;
theme - > set_color ( " font_hover_color " , " CheckBox " , font_hover_color ) ;
theme - > set_color ( " font_focus_color " , " CheckBox " , font_focus_color ) ;
theme - > set_color ( " font_pressed_color " , " CheckBox " , accent_color ) ;
theme - > set_color ( " font_disabled_color " , " CheckBox " , font_disabled_color ) ;
2022-06-04 19:47:37 +02:00
theme - > set_color ( " icon_normal_color " , " CheckBox " , icon_normal_color ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " icon_hover_color " , " CheckBox " , icon_hover_color ) ;
theme - > set_color ( " icon_focus_color " , " CheckBox " , icon_focus_color ) ;
2022-06-04 19:47:37 +02:00
theme - > set_color ( " icon_pressed_color " , " CheckBox " , icon_pressed_color ) ;
theme - > set_color ( " icon_disabled_color " , " CheckBox " , icon_disabled_color ) ;
2022-02-08 10:14:58 +01:00
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " h_separation " , " CheckBox " , 8 * EDSCALE ) ;
theme - > set_constant ( " check_v_adjust " , " CheckBox " , 0 * EDSCALE ) ;
2017-11-11 18:57:54 +01:00
2019-10-27 23:45:03 +01:00
// PopupDialog
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " panel " , " PopupDialog " , style_popup ) ;
2019-10-27 23:45:03 +01:00
2017-05-02 22:13:12 +02:00
// PopupMenu
2020-11-30 01:11:25 +01:00
const int popup_menu_margin_size = default_margin_size * 1.5 * EDSCALE ;
Ref < StyleBoxFlat > style_popup_menu = style_popup - > duplicate ( ) ;
2021-02-04 14:03:36 +01:00
// Use 1 pixel for the sides, since if 0 is used, the highlight of hovered items is drawn
// on top of the popup border. This causes a 'gap' in the panel border when an item is highlighted,
// and it looks weird. 1px solves this.
style_popup_menu - > set_default_margin ( SIDE_LEFT , 1 * EDSCALE ) ;
2020-12-22 17:24:29 +01:00
style_popup_menu - > set_default_margin ( SIDE_TOP , popup_menu_margin_size ) ;
2021-02-04 14:03:36 +01:00
style_popup_menu - > set_default_margin ( SIDE_RIGHT , 1 * EDSCALE ) ;
2020-12-22 17:24:29 +01:00
style_popup_menu - > set_default_margin ( SIDE_BOTTOM , popup_menu_margin_size ) ;
2021-05-11 23:07:16 +02:00
// Always display a border for PopupMenus so they can be distinguished from their background.
style_popup_menu - > set_border_width_all ( 1 * EDSCALE ) ;
style_popup_menu - > set_border_color ( dark_color_2 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " panel " , " PopupMenu " , style_popup_menu ) ;
2021-05-11 23:07:16 +02:00
Ref < StyleBoxFlat > style_menu_hover = style_widget_hover - > duplicate ( ) ;
// Don't use rounded corners for hover highlights since the StyleBox touches the PopupMenu's edges.
style_menu_hover - > set_corner_radius_all ( 0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " hover " , " PopupMenu " , style_menu_hover ) ;
theme - > set_stylebox ( " separator " , " PopupMenu " , style_popup_separator ) ;
theme - > set_stylebox ( " labeled_separator_left " , " PopupMenu " , style_popup_labeled_separator_left ) ;
theme - > set_stylebox ( " labeled_separator_right " , " PopupMenu " , style_popup_labeled_separator_right ) ;
theme - > set_color ( " font_color " , " PopupMenu " , font_color ) ;
theme - > set_color ( " font_hover_color " , " PopupMenu " , font_hover_color ) ;
theme - > set_color ( " font_accelerator_color " , " PopupMenu " , font_disabled_color ) ;
theme - > set_color ( " font_disabled_color " , " PopupMenu " , font_disabled_color ) ;
theme - > set_color ( " font_separator_color " , " PopupMenu " , font_disabled_color ) ;
theme - > set_icon ( " checked " , " PopupMenu " , theme - > get_icon ( SNAME ( " GuiChecked " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " unchecked " , " PopupMenu " , theme - > get_icon ( SNAME ( " GuiUnchecked " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " radio_checked " , " PopupMenu " , theme - > get_icon ( SNAME ( " GuiRadioChecked " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " radio_unchecked " , " PopupMenu " , theme - > get_icon ( SNAME ( " GuiRadioUnchecked " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " checked_disabled " , " PopupMenu " , theme - > get_icon ( SNAME ( " GuiCheckedDisabled " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " unchecked_disabled " , " PopupMenu " , theme - > get_icon ( SNAME ( " GuiUncheckedDisabled " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " radio_checked_disabled " , " PopupMenu " , theme - > get_icon ( SNAME ( " GuiRadioCheckedDisabled " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " radio_unchecked_disabled " , " PopupMenu " , theme - > get_icon ( SNAME ( " GuiRadioUncheckedDisabled " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " submenu " , " PopupMenu " , theme - > get_icon ( SNAME ( " ArrowRight " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " submenu_mirrored " , " PopupMenu " , theme - > get_icon ( SNAME ( " ArrowLeft " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " visibility_hidden " , " PopupMenu " , theme - > get_icon ( SNAME ( " GuiVisibilityHidden " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " visibility_visible " , " PopupMenu " , theme - > get_icon ( SNAME ( " GuiVisibilityVisible " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " visibility_xray " , " PopupMenu " , theme - > get_icon ( SNAME ( " GuiVisibilityXray " ) , SNAME ( " EditorIcons " ) ) ) ;
2022-04-14 23:20:28 +02:00
// Force the v_separation to be even so that the spacing on top and bottom is even.
2022-03-10 12:51:26 +01:00
// If the vsep is odd and cannot be split into 2 even groups (of pixels), then it will be lopsided.
// We add 2 to the vsep to give it some extra spacing which looks a bit more modern (see Windows, for example)
int vsep_base = extra_spacing + default_margin_size + 2 ;
int force_even_vsep = vsep_base + ( vsep_base % 2 ) ;
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " v_separation " , " PopupMenu " , force_even_vsep * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " item_start_padding " , " PopupMenu " , popup_menu_margin_size * EDSCALE ) ;
theme - > set_constant ( " item_end_padding " , " PopupMenu " , popup_menu_margin_size * EDSCALE ) ;
2017-09-21 22:55:07 +02:00
2022-04-01 01:55:51 +02:00
// Sub-inspectors
2021-02-11 22:01:56 +01:00
for ( int i = 0 ; i < 16 ; i + + ) {
Color si_base_color = accent_color ;
float hue_rotate = ( i * 2 % 16 ) / 16.0 ;
si_base_color . set_hsv ( Math : : fmod ( float ( si_base_color . get_h ( ) + hue_rotate ) , float ( 1.0 ) ) , si_base_color . get_s ( ) , si_base_color . get_v ( ) ) ;
si_base_color = accent_color . lerp ( si_base_color , float ( EDITOR_GET ( " docks/property_editor/subresource_hue_tint " ) ) ) ;
2022-04-01 01:55:51 +02:00
// Sub-inspector background.
Ref < StyleBoxFlat > sub_inspector_bg = style_default - > duplicate ( ) ;
sub_inspector_bg - > set_bg_color ( dark_color_1 . lerp ( si_base_color , 0.08 ) ) ;
sub_inspector_bg - > set_border_width_all ( 2 * EDSCALE ) ;
2021-02-11 22:01:56 +01:00
sub_inspector_bg - > set_border_color ( si_base_color * Color ( 0.7 , 0.7 , 0.7 , 0.8 ) ) ;
2022-04-01 01:55:51 +02:00
sub_inspector_bg - > set_default_margin ( SIDE_LEFT , 4 * EDSCALE ) ;
sub_inspector_bg - > set_default_margin ( SIDE_RIGHT , 4 * EDSCALE ) ;
sub_inspector_bg - > set_default_margin ( SIDE_BOTTOM , 4 * EDSCALE ) ;
sub_inspector_bg - > set_default_margin ( SIDE_TOP , 4 * EDSCALE ) ;
sub_inspector_bg - > set_corner_radius ( CORNER_TOP_LEFT , 0 ) ;
sub_inspector_bg - > set_corner_radius ( CORNER_TOP_RIGHT , 0 ) ;
2021-02-11 22:01:56 +01:00
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " sub_inspector_bg " + itos ( i ) , " Editor " , sub_inspector_bg ) ;
2021-02-11 22:01:56 +01:00
2022-04-01 01:55:51 +02:00
// EditorProperty background while it has a sub-inspector open.
Ref < StyleBoxFlat > bg_color = make_flat_stylebox ( si_base_color * Color ( 0.7 , 0.7 , 0.7 , 0.8 ) , 0 , 0 , 0 , 0 , corner_radius ) ;
bg_color - > set_anti_aliased ( false ) ;
bg_color - > set_corner_radius ( CORNER_BOTTOM_LEFT , 0 ) ;
bg_color - > set_corner_radius ( CORNER_BOTTOM_RIGHT , 0 ) ;
2021-02-11 22:01:56 +01:00
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " sub_inspector_property_bg " + itos ( i ) , " Editor " , bg_color ) ;
2021-02-11 22:01:56 +01:00
}
2022-02-08 10:14:58 +01:00
theme - > set_color ( " sub_inspector_property_color " , " Editor " , dark_theme ? Color ( 1 , 1 , 1 , 1 ) : Color ( 0 , 0 , 0 , 1 ) ) ;
2021-02-11 22:01:56 +01:00
2022-03-04 01:19:00 +01:00
// EditorSpinSlider.
theme - > set_color ( " label_color " , " EditorSpinSlider " , font_color ) ;
theme - > set_color ( " read_only_label_color " , " EditorSpinSlider " , font_readonly_color ) ;
2022-04-01 01:55:51 +02:00
Ref < StyleBoxFlat > editor_spin_label_bg = style_default - > duplicate ( ) ;
editor_spin_label_bg - > set_bg_color ( dark_color_3 ) ;
editor_spin_label_bg - > set_border_width_all ( 0 ) ;
theme - > set_stylebox ( " label_bg " , " EditorSpinSlider " , editor_spin_label_bg ) ;
// EditorProperty
2021-02-11 22:01:56 +01:00
Ref < StyleBoxFlat > style_property_bg = style_default - > duplicate ( ) ;
style_property_bg - > set_bg_color ( highlight_color ) ;
style_property_bg - > set_border_width_all ( 0 ) ;
2022-04-01 01:55:51 +02:00
Ref < StyleBoxFlat > style_property_child_bg = style_default - > duplicate ( ) ;
style_property_child_bg - > set_bg_color ( dark_color_2 ) ;
style_property_child_bg - > set_border_width_all ( 0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " font_offset " , " EditorProperty " , 8 * EDSCALE ) ;
theme - > set_stylebox ( " bg_selected " , " EditorProperty " , style_property_bg ) ;
theme - > set_stylebox ( " bg " , " EditorProperty " , Ref < StyleBoxEmpty > ( memnew ( StyleBoxEmpty ) ) ) ;
2022-04-01 01:55:51 +02:00
theme - > set_stylebox ( " child_bg " , " EditorProperty " , style_property_child_bg ) ;
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " v_separation " , " EditorProperty " , ( extra_spacing + default_margin_size ) * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " warning_color " , " EditorProperty " , warning_color ) ;
theme - > set_color ( " property_color " , " EditorProperty " , property_color ) ;
theme - > set_color ( " readonly_color " , " EditorProperty " , readonly_color ) ;
theme - > set_color ( " readonly_warning_color " , " EditorProperty " , readonly_warning_color ) ;
2021-02-11 22:01:56 +01:00
2021-11-08 21:53:41 +01:00
Ref < StyleBoxFlat > style_property_group_note = style_default - > duplicate ( ) ;
Color property_group_note_color = accent_color ;
property_group_note_color . a = 0.1 ;
style_property_group_note - > set_bg_color ( property_group_note_color ) ;
theme - > set_stylebox ( " bg_group_note " , " EditorProperty " , style_property_group_note ) ;
2022-04-01 01:55:51 +02:00
// EditorInspectorSection
2021-05-27 17:32:30 +02:00
Color inspector_section_color = font_color . lerp ( Color ( 0.5 , 0.5 , 0.5 ) , 0.35 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " font_color " , " EditorInspectorSection " , inspector_section_color ) ;
2021-05-27 17:32:30 +02:00
2021-11-08 21:53:41 +01:00
Color inspector_indent_color = accent_color ;
inspector_indent_color . a = 0.2 ;
Ref < StyleBoxFlat > inspector_indent_style = make_flat_stylebox ( inspector_indent_color , 2.0 * EDSCALE , 0 , 2.0 * EDSCALE , 0 ) ;
theme - > set_stylebox ( " indent_box " , " EditorInspectorSection " , inspector_indent_style ) ;
theme - > set_constant ( " indent_size " , " EditorInspectorSection " , 6.0 * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " inspector_margin " , " Editor " , 12 * EDSCALE ) ;
2018-07-19 00:37:17 +02:00
2017-06-26 02:21:12 +02:00
// Tree & ItemList background
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_tree_bg = style_default - > duplicate ( ) ;
2019-03-23 01:57:28 +01:00
// Make Trees easier to distinguish from other controls by using a darker background color.
style_tree_bg - > set_bg_color ( dark_color_1 . lerp ( dark_color_2 , 0.5 ) ) ;
2019-03-19 10:32:13 +01:00
style_tree_bg - > set_border_color ( dark_color_3 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " bg " , " Tree " , style_tree_bg ) ;
2017-08-29 16:56:43 +02:00
2017-05-02 22:13:12 +02:00
// Tree
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " checked " , " Tree " , theme - > get_icon ( SNAME ( " GuiChecked " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " indeterminate " , " Tree " , theme - > get_icon ( SNAME ( " GuiIndeterminate " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " unchecked " , " Tree " , theme - > get_icon ( SNAME ( " GuiUnchecked " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " arrow " , " Tree " , theme - > get_icon ( SNAME ( " GuiTreeArrowDown " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " arrow_collapsed " , " Tree " , theme - > get_icon ( SNAME ( " GuiTreeArrowRight " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " arrow_collapsed_mirrored " , " Tree " , theme - > get_icon ( SNAME ( " GuiTreeArrowLeft " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " updown " , " Tree " , theme - > get_icon ( SNAME ( " GuiTreeUpdown " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " select_arrow " , " Tree " , theme - > get_icon ( SNAME ( " GuiDropdown " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_stylebox ( " bg_focus " , " Tree " , style_widget_focus ) ;
theme - > set_stylebox ( " custom_button " , " Tree " , make_empty_stylebox ( ) ) ;
theme - > set_stylebox ( " custom_button_pressed " , " Tree " , make_empty_stylebox ( ) ) ;
theme - > set_stylebox ( " custom_button_hover " , " Tree " , style_widget ) ;
theme - > set_color ( " custom_button_font_highlight " , " Tree " , font_hover_color ) ;
theme - > set_color ( " font_color " , " Tree " , font_color ) ;
theme - > set_color ( " font_selected_color " , " Tree " , mono_color ) ;
theme - > set_color ( " title_button_color " , " Tree " , font_color ) ;
theme - > set_color ( " drop_position_color " , " Tree " , accent_color ) ;
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " v_separation " , " Tree " , widget_default_margin . y - EDSCALE ) ;
theme - > set_constant ( " h_separation " , " Tree " , 6 * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " guide_width " , " Tree " , border_width ) ;
theme - > set_constant ( " item_margin " , " Tree " , 3 * default_margin_size * EDSCALE ) ;
theme - > set_constant ( " button_margin " , " Tree " , default_margin_size * EDSCALE ) ;
theme - > set_constant ( " scroll_border " , " Tree " , 40 * EDSCALE ) ;
theme - > set_constant ( " scroll_speed " , " Tree " , 12 ) ;
2017-05-02 22:13:12 +02:00
2021-05-02 17:34:29 +02:00
const Color guide_color = mono_color * Color ( 1 , 1 , 1 , 0.05 ) ;
Color relationship_line_color = mono_color * Color ( 1 , 1 , 1 , relationship_line_opacity ) ;
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " draw_guides " , " Tree " , relationship_line_opacity < 0.01 ) ;
theme - > set_color ( " guide_color " , " Tree " , guide_color ) ;
2021-05-02 17:34:29 +02:00
int relationship_line_width = 1 ;
Color parent_line_color = mono_color * Color ( 1 , 1 , 1 , CLAMP ( relationship_line_opacity + 0.45 , 0.0 , 1.0 ) ) ;
Color children_line_color = mono_color * Color ( 1 , 1 , 1 , CLAMP ( relationship_line_opacity + 0.25 , 0.0 , 1.0 ) ) ;
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " draw_relationship_lines " , " Tree " , relationship_line_opacity > = 0.01 ) ;
theme - > set_constant ( " relationship_line_width " , " Tree " , relationship_line_width ) ;
theme - > set_constant ( " parent_hl_line_width " , " Tree " , relationship_line_width * 2 ) ;
theme - > set_constant ( " children_hl_line_width " , " Tree " , relationship_line_width ) ;
theme - > set_constant ( " parent_hl_line_margin " , " Tree " , relationship_line_width * 3 ) ;
theme - > set_color ( " relationship_line_color " , " Tree " , relationship_line_color ) ;
theme - > set_color ( " parent_hl_line_color " , " Tree " , parent_line_color ) ;
theme - > set_color ( " children_hl_line_color " , " Tree " , children_line_color ) ;
2021-05-02 17:34:29 +02:00
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_tree_btn = style_default - > duplicate ( ) ;
2019-03-23 01:57:28 +01:00
style_tree_btn - > set_bg_color ( highlight_color ) ;
2017-09-08 08:06:02 +02:00
style_tree_btn - > set_border_width_all ( 0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " button_pressed " , " Tree " , style_tree_btn ) ;
2017-05-02 22:13:12 +02:00
2019-09-13 02:31:02 +02:00
Ref < StyleBoxFlat > style_tree_hover = style_default - > duplicate ( ) ;
style_tree_hover - > set_bg_color ( highlight_color * Color ( 1 , 1 , 1 , 0.4 ) ) ;
style_tree_hover - > set_border_width_all ( 0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " hover " , " Tree " , style_tree_hover ) ;
2019-09-13 02:31:02 +02:00
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_tree_focus = style_default - > duplicate ( ) ;
style_tree_focus - > set_bg_color ( highlight_color ) ;
style_tree_focus - > set_border_width_all ( 0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " selected_focus " , " Tree " , style_tree_focus ) ;
2017-05-02 22:13:12 +02:00
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_tree_selected = style_tree_focus - > duplicate ( ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " selected " , " Tree " , style_tree_selected ) ;
2017-05-02 22:13:12 +02:00
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_tree_cursor = style_default - > duplicate ( ) ;
2017-08-31 15:11:10 +02:00
style_tree_cursor - > set_draw_center ( false ) ;
2021-03-11 15:52:05 +01:00
style_tree_cursor - > set_border_width_all ( MAX ( 1 , border_width ) ) ;
2019-03-19 10:32:13 +01:00
style_tree_cursor - > set_border_color ( contrast_color_1 ) ;
2017-06-10 20:40:45 +02:00
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_tree_title = style_default - > duplicate ( ) ;
style_tree_title - > set_bg_color ( dark_color_3 ) ;
style_tree_title - > set_border_width_all ( 0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " cursor " , " Tree " , style_tree_cursor ) ;
theme - > set_stylebox ( " cursor_unfocused " , " Tree " , style_tree_cursor ) ;
theme - > set_stylebox ( " title_button_normal " , " Tree " , style_tree_title ) ;
theme - > set_stylebox ( " title_button_hover " , " Tree " , style_tree_title ) ;
theme - > set_stylebox ( " title_button_pressed " , " Tree " , style_tree_title ) ;
2017-05-02 22:13:12 +02:00
2020-03-16 10:07:33 +01:00
Color prop_category_color = dark_color_1 . lerp ( mono_color , 0.12 ) ;
Color prop_section_color = dark_color_1 . lerp ( mono_color , 0.09 ) ;
Color prop_subsection_color = dark_color_1 . lerp ( mono_color , 0.06 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " prop_category " , " Editor " , prop_category_color ) ;
theme - > set_color ( " prop_section " , " Editor " , prop_section_color ) ;
theme - > set_color ( " prop_subsection " , " Editor " , prop_subsection_color ) ;
theme - > set_color ( " drop_position_color " , " Tree " , accent_color ) ;
2017-05-02 22:13:12 +02:00
2022-04-01 01:55:51 +02:00
// EditorInspectorCategory
2021-05-27 17:32:30 +02:00
Ref < StyleBoxFlat > category_bg = style_default - > duplicate ( ) ;
category_bg - > set_bg_color ( prop_category_color ) ;
category_bg - > set_border_color ( prop_category_color ) ;
2022-04-01 01:55:51 +02:00
theme - > set_stylebox ( " bg " , " EditorInspectorCategory " , category_bg ) ;
2021-05-27 17:32:30 +02:00
2017-05-02 22:13:12 +02:00
// ItemList
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_itemlist_bg = style_default - > duplicate ( ) ;
style_itemlist_bg - > set_bg_color ( dark_color_1 ) ;
2017-06-10 20:40:45 +02:00
style_itemlist_bg - > set_border_width_all ( border_width ) ;
2019-03-19 10:32:13 +01:00
style_itemlist_bg - > set_border_color ( dark_color_3 ) ;
2017-06-10 20:40:45 +02:00
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_itemlist_cursor = style_default - > duplicate ( ) ;
2017-08-31 15:11:10 +02:00
style_itemlist_cursor - > set_draw_center ( false ) ;
2017-06-10 20:40:45 +02:00
style_itemlist_cursor - > set_border_width_all ( border_width ) ;
2019-03-19 10:32:13 +01:00
style_itemlist_cursor - > set_border_color ( highlight_color ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " cursor " , " ItemList " , style_itemlist_cursor ) ;
theme - > set_stylebox ( " cursor_unfocused " , " ItemList " , style_itemlist_cursor ) ;
theme - > set_stylebox ( " selected_focus " , " ItemList " , style_tree_focus ) ;
theme - > set_stylebox ( " selected " , " ItemList " , style_tree_selected ) ;
theme - > set_stylebox ( " bg_focus " , " ItemList " , style_widget_focus ) ;
theme - > set_stylebox ( " bg " , " ItemList " , style_itemlist_bg ) ;
theme - > set_color ( " font_color " , " ItemList " , font_color ) ;
theme - > set_color ( " font_selected_color " , " ItemList " , mono_color ) ;
theme - > set_color ( " guide_color " , " ItemList " , guide_color ) ;
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " v_separation " , " ItemList " , widget_default_margin . y - EDSCALE ) ;
theme - > set_constant ( " h_separation " , " ItemList " , 6 * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " icon_margin " , " ItemList " , 6 * EDSCALE ) ;
theme - > set_constant ( " line_separation " , " ItemList " , 3 * EDSCALE ) ;
2017-05-02 22:13:12 +02:00
2021-10-17 18:55:44 +02:00
// TabBar & TabContainer
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " tab_selected " , " TabContainer " , style_tab_selected ) ;
theme - > set_stylebox ( " tab_unselected " , " TabContainer " , style_tab_unselected ) ;
theme - > set_stylebox ( " tab_disabled " , " TabContainer " , style_tab_disabled ) ;
theme - > set_stylebox ( " tab_selected " , " TabBar " , style_tab_selected ) ;
theme - > set_stylebox ( " tab_unselected " , " TabBar " , style_tab_unselected ) ;
theme - > set_stylebox ( " tab_disabled " , " TabBar " , style_tab_disabled ) ;
2022-03-20 02:24:36 +01:00
theme - > set_stylebox ( " button_pressed " , " TabBar " , style_menu ) ;
theme - > set_stylebox ( " button_highlight " , " TabBar " , style_menu ) ;
theme - > set_stylebox ( " SceneTabFG " , " EditorStyles " , style_tab_selected ) ;
theme - > set_stylebox ( " SceneTabBG " , " EditorStyles " , style_tab_unselected ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " font_selected_color " , " TabContainer " , font_color ) ;
theme - > set_color ( " font_unselected_color " , " TabContainer " , font_disabled_color ) ;
theme - > set_color ( " font_selected_color " , " TabBar " , font_color ) ;
theme - > set_color ( " font_unselected_color " , " TabBar " , font_disabled_color ) ;
2022-03-20 02:24:36 +01:00
theme - > set_color ( " drop_mark_color " , " TabContainer " , tab_highlight ) ;
theme - > set_color ( " drop_mark_color " , " TabBar " , tab_highlight ) ;
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " menu " , " TabContainer " , theme - > get_icon ( SNAME ( " GuiTabMenu " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " menu_highlight " , " TabContainer " , theme - > get_icon ( SNAME ( " GuiTabMenuHl " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " close " , " TabBar " , theme - > get_icon ( SNAME ( " GuiClose " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " increment " , " TabContainer " , theme - > get_icon ( SNAME ( " GuiScrollArrowRight " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " decrement " , " TabContainer " , theme - > get_icon ( SNAME ( " GuiScrollArrowLeft " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " increment " , " TabBar " , theme - > get_icon ( SNAME ( " GuiScrollArrowRight " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " decrement " , " TabBar " , theme - > get_icon ( SNAME ( " GuiScrollArrowLeft " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " increment_highlight " , " TabBar " , theme - > get_icon ( SNAME ( " GuiScrollArrowRightHl " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " decrement_highlight " , " TabBar " , theme - > get_icon ( SNAME ( " GuiScrollArrowLeftHl " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " increment_highlight " , " TabContainer " , theme - > get_icon ( SNAME ( " GuiScrollArrowRightHl " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " decrement_highlight " , " TabContainer " , theme - > get_icon ( SNAME ( " GuiScrollArrowLeftHl " ) , SNAME ( " EditorIcons " ) ) ) ;
2022-03-20 02:24:36 +01:00
theme - > set_icon ( " drop_mark " , " TabContainer " , theme - > get_icon ( SNAME ( " GuiTabDropMark " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " drop_mark " , " TabBar " , theme - > get_icon ( SNAME ( " GuiTabDropMark " ) , SNAME ( " EditorIcons " ) ) ) ;
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " h_separation " , " TabBar " , 4 * EDSCALE ) ;
2017-07-15 06:40:17 +02:00
2017-09-02 03:29:04 +02:00
// Content of each tab
Ref < StyleBoxFlat > style_content_panel = style_default - > duplicate ( ) ;
2019-03-19 10:32:13 +01:00
style_content_panel - > set_border_color ( dark_color_3 ) ;
2017-09-02 03:29:04 +02:00
style_content_panel - > set_border_width_all ( border_width ) ;
2017-09-18 01:58:36 +02:00
// compensate the border
2021-05-27 17:32:30 +02:00
style_content_panel - > set_default_margin ( SIDE_TOP , ( 2 + margin_size_extra ) * EDSCALE ) ;
2020-12-22 17:24:29 +01:00
style_content_panel - > set_default_margin ( SIDE_RIGHT , margin_size_extra * EDSCALE ) ;
style_content_panel - > set_default_margin ( SIDE_BOTTOM , margin_size_extra * EDSCALE ) ;
style_content_panel - > set_default_margin ( SIDE_LEFT , margin_size_extra * EDSCALE ) ;
2021-05-11 23:07:16 +02:00
// Display border to visually split the body of the container from its possible backgrounds.
style_content_panel - > set_border_width ( Side : : SIDE_TOP , Math : : round ( 2 * EDSCALE ) ) ;
style_content_panel - > set_border_color ( dark_color_2 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " panel " , " TabContainer " , style_content_panel ) ;
2017-09-02 03:29:04 +02:00
2022-05-27 04:12:09 +02:00
// TabContainerOdd can be used on tabs against the base color background (e.g. nested tabs).
theme - > set_type_variation ( " TabContainerOdd " , " TabContainer " ) ;
2021-05-11 23:07:16 +02:00
Ref < StyleBoxFlat > style_tab_selected_odd = style_tab_selected - > duplicate ( ) ;
style_tab_selected_odd - > set_bg_color ( disabled_bg_color ) ;
2022-05-27 04:12:09 +02:00
theme - > set_stylebox ( " tab_selected " , " TabContainerOdd " , style_tab_selected_odd ) ;
2021-05-11 23:07:16 +02:00
Ref < StyleBoxFlat > style_content_panel_odd = style_content_panel - > duplicate ( ) ;
style_content_panel_odd - > set_bg_color ( disabled_bg_color ) ;
2022-05-27 04:12:09 +02:00
theme - > set_stylebox ( " panel " , " TabContainerOdd " , style_content_panel_odd ) ;
2021-05-11 23:07:16 +02:00
2021-03-13 20:30:26 +01:00
// This stylebox is used in 3d and 2d viewports (no borders).
Ref < StyleBoxFlat > style_content_panel_vp = style_content_panel - > duplicate ( ) ;
style_content_panel_vp - > set_default_margin ( SIDE_LEFT , border_width * 2 ) ;
style_content_panel_vp - > set_default_margin ( SIDE_TOP , default_margin_size * EDSCALE ) ;
style_content_panel_vp - > set_default_margin ( SIDE_RIGHT , border_width * 2 ) ;
style_content_panel_vp - > set_default_margin ( SIDE_BOTTOM , border_width * 2 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " Content " , " EditorStyles " , style_content_panel_vp ) ;
2021-03-13 20:30:26 +01:00
// This stylebox is used by preview tabs in the Theme Editor.
Ref < StyleBoxFlat > style_theme_preview_tab = style_tab_selected_odd - > duplicate ( ) ;
style_theme_preview_tab - > set_expand_margin_size ( SIDE_BOTTOM , 5 * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " ThemeEditorPreviewFG " , " EditorStyles " , style_theme_preview_tab ) ;
2021-03-13 20:30:26 +01:00
Ref < StyleBoxFlat > style_theme_preview_bg_tab = style_tab_unselected - > duplicate ( ) ;
style_theme_preview_bg_tab - > set_expand_margin_size ( SIDE_BOTTOM , 2 * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " ThemeEditorPreviewBG " , " EditorStyles " , style_theme_preview_bg_tab ) ;
2021-03-13 20:30:26 +01:00
2017-09-27 21:44:48 +02:00
// Separators
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " separator " , " HSeparator " , make_line_stylebox ( separator_color , MAX ( Math : : round ( EDSCALE ) , border_width ) ) ) ;
theme - > set_stylebox ( " separator " , " VSeparator " , make_line_stylebox ( separator_color , MAX ( Math : : round ( EDSCALE ) , border_width ) , 0 , 0 , true ) ) ;
2017-05-02 22:13:12 +02:00
2017-09-18 01:58:36 +02:00
// Debugger
2017-09-18 21:06:55 +02:00
Ref < StyleBoxFlat > style_panel_debugger = style_content_panel - > duplicate ( ) ;
2020-12-22 17:24:29 +01:00
style_panel_debugger - > set_border_width ( SIDE_BOTTOM , 0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " DebuggerPanel " , " EditorStyles " , style_panel_debugger ) ;
2017-09-18 21:06:55 +02:00
Ref < StyleBoxFlat > style_panel_invisible_top = style_content_panel - > duplicate ( ) ;
2022-02-06 15:53:53 +01:00
int stylebox_offset = theme - > get_font ( SNAME ( " tab_selected " ) , SNAME ( " TabContainer " ) ) - > get_height ( theme - > get_font_size ( SNAME ( " tab_selected " ) , SNAME ( " TabContainer " ) ) ) + theme - > get_stylebox ( SNAME ( " tab_selected " ) , SNAME ( " TabContainer " ) ) - > get_minimum_size ( ) . height + theme - > get_stylebox ( SNAME ( " panel " ) , SNAME ( " TabContainer " ) ) - > get_default_margin ( SIDE_TOP ) ;
2020-12-22 17:24:29 +01:00
style_panel_invisible_top - > set_expand_margin_size ( SIDE_TOP , - stylebox_offset ) ;
style_panel_invisible_top - > set_default_margin ( SIDE_TOP , 0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " BottomPanelDebuggerOverride " , " EditorStyles " , style_panel_invisible_top ) ;
2017-05-02 22:13:12 +02:00
// LineEdit
2019-03-23 01:57:28 +01:00
Ref < StyleBoxFlat > style_line_edit = style_widget - > duplicate ( ) ;
2021-07-04 22:42:23 +02:00
// The original style_widget style has an extra 1 pixel offset that makes LineEdits not align with Buttons,
// so this compensates for that.
style_line_edit - > set_default_margin ( SIDE_TOP , style_line_edit - > get_default_margin ( SIDE_TOP ) - 1 * EDSCALE ) ;
2019-03-23 01:57:28 +01:00
// Add a bottom line to make LineEdits more visible, especially in sectioned inspectors
// such as the Project Settings.
style_line_edit - > set_border_width ( SIDE_BOTTOM , Math : : round ( 2 * EDSCALE ) ) ;
style_line_edit - > set_border_color ( dark_color_2 ) ;
// Don't round the bottom corner to make the line look sharper.
style_tab_selected - > set_corner_radius ( CORNER_BOTTOM_LEFT , 0 ) ;
style_tab_selected - > set_corner_radius ( CORNER_BOTTOM_RIGHT , 0 ) ;
Ref < StyleBoxFlat > style_line_edit_disabled = style_line_edit - > duplicate ( ) ;
style_line_edit_disabled - > set_border_color ( disabled_color ) ;
style_line_edit_disabled - > set_bg_color ( disabled_bg_color ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " normal " , " LineEdit " , style_line_edit ) ;
theme - > set_stylebox ( " focus " , " LineEdit " , style_widget_focus ) ;
theme - > set_stylebox ( " read_only " , " LineEdit " , style_line_edit_disabled ) ;
theme - > set_icon ( " clear " , " LineEdit " , theme - > get_icon ( SNAME ( " GuiClose " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_color ( " read_only " , " LineEdit " , font_disabled_color ) ;
theme - > set_color ( " font_color " , " LineEdit " , font_color ) ;
theme - > set_color ( " font_selected_color " , " LineEdit " , mono_color ) ;
theme - > set_color ( " font_uneditable_color " , " LineEdit " , font_readonly_color ) ;
theme - > set_color ( " font_placeholder_color " , " LineEdit " , font_placeholder_color ) ;
theme - > set_color ( " caret_color " , " LineEdit " , font_color ) ;
theme - > set_color ( " selection_color " , " LineEdit " , selection_color ) ;
theme - > set_color ( " clear_button_color " , " LineEdit " , font_color ) ;
theme - > set_color ( " clear_button_color_pressed " , " LineEdit " , accent_color ) ;
2017-05-02 22:13:12 +02:00
// TextEdit
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " normal " , " TextEdit " , style_line_edit ) ;
theme - > set_stylebox ( " focus " , " TextEdit " , style_widget_focus ) ;
theme - > set_stylebox ( " read_only " , " TextEdit " , style_line_edit_disabled ) ;
theme - > set_constant ( " side_margin " , " TabContainer " , 0 ) ;
theme - > set_icon ( " tab " , " TextEdit " , theme - > get_icon ( SNAME ( " GuiTab " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " space " , " TextEdit " , theme - > get_icon ( SNAME ( " GuiSpace " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_color ( " font_color " , " TextEdit " , font_color ) ;
theme - > set_color ( " font_readonly_color " , " TextEdit " , font_readonly_color ) ;
theme - > set_color ( " font_placeholder_color " , " TextEdit " , font_placeholder_color ) ;
theme - > set_color ( " caret_color " , " TextEdit " , font_color ) ;
theme - > set_color ( " selection_color " , " TextEdit " , selection_color ) ;
theme - > set_constant ( " line_spacing " , " TextEdit " , 4 * EDSCALE ) ;
2017-05-02 22:13:12 +02:00
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " grabber " , " VSplitContainer " , theme - > get_icon ( SNAME ( " GuiVsplitter " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " grabber " , " HSplitContainer " , theme - > get_icon ( SNAME ( " GuiHsplitter " ) , SNAME ( " EditorIcons " ) ) ) ;
2017-05-02 22:13:12 +02:00
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " separation " , " HSplitContainer " , default_margin_size * 2 * EDSCALE ) ;
theme - > set_constant ( " separation " , " VSplitContainer " , default_margin_size * 2 * EDSCALE ) ;
2017-05-02 22:13:12 +02:00
2017-09-18 21:39:37 +02:00
// Containers
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " separation " , " BoxContainer " , default_margin_size * EDSCALE ) ;
theme - > set_constant ( " separation " , " HBoxContainer " , default_margin_size * EDSCALE ) ;
theme - > set_constant ( " separation " , " VBoxContainer " , default_margin_size * EDSCALE ) ;
theme - > set_constant ( " margin_left " , " MarginContainer " , 0 ) ;
theme - > set_constant ( " margin_top " , " MarginContainer " , 0 ) ;
theme - > set_constant ( " margin_right " , " MarginContainer " , 0 ) ;
theme - > set_constant ( " margin_bottom " , " MarginContainer " , 0 ) ;
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " h_separation " , " GridContainer " , default_margin_size * EDSCALE ) ;
theme - > set_constant ( " v_separation " , " GridContainer " , default_margin_size * EDSCALE ) ;
theme - > set_constant ( " h_separation " , " FlowContainer " , default_margin_size * EDSCALE ) ;
theme - > set_constant ( " v_separation " , " FlowContainer " , default_margin_size * EDSCALE ) ;
theme - > set_constant ( " h_separation " , " HFlowContainer " , default_margin_size * EDSCALE ) ;
theme - > set_constant ( " v_separation " , " HFlowContainer " , default_margin_size * EDSCALE ) ;
theme - > set_constant ( " h_separation " , " VFlowContainer " , default_margin_size * EDSCALE ) ;
theme - > set_constant ( " v_separation " , " VFlowContainer " , default_margin_size * EDSCALE ) ;
2017-09-18 21:39:37 +02:00
2022-04-01 03:10:46 +02:00
// Custom theme type for MarginContainer with 4px margins.
theme - > set_type_variation ( " MarginContainer4px " , " MarginContainer " ) ;
theme - > set_constant ( " margin_left " , " MarginContainer4px " , 4 * EDSCALE ) ;
theme - > set_constant ( " margin_top " , " MarginContainer4px " , 4 * EDSCALE ) ;
theme - > set_constant ( " margin_right " , " MarginContainer4px " , 4 * EDSCALE ) ;
theme - > set_constant ( " margin_bottom " , " MarginContainer4px " , 4 * EDSCALE ) ;
2019-03-23 01:57:28 +01:00
// Window
// Prevent corner artifacts between window title and body.
Ref < StyleBoxFlat > style_window_title = style_default - > duplicate ( ) ;
style_window_title - > set_corner_radius ( CORNER_TOP_LEFT , 0 ) ;
style_window_title - > set_corner_radius ( CORNER_TOP_RIGHT , 0 ) ;
// Prevent visible line between window title and body.
style_window_title - > set_expand_margin_size ( SIDE_BOTTOM , 2 * EDSCALE ) ;
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_window = style_popup - > duplicate ( ) ;
2019-03-23 01:57:28 +01:00
style_window - > set_border_color ( base_color ) ;
2020-12-22 17:24:29 +01:00
style_window - > set_border_width ( SIDE_TOP , 24 * EDSCALE ) ;
style_window - > set_expand_margin_size ( SIDE_TOP , 24 * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " embedded_border " , " Window " , style_window ) ;
theme - > set_color ( " title_color " , " Window " , font_color ) ;
theme - > set_icon ( " close " , " Window " , theme - > get_icon ( SNAME ( " GuiClose " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " close_pressed " , " Window " , theme - > get_icon ( SNAME ( " GuiClose " ) , SNAME ( " EditorIcons " ) ) ) ;
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " close_h_offset " , " Window " , 22 * EDSCALE ) ;
theme - > set_constant ( " close_v_offset " , " Window " , 20 * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " title_height " , " Window " , 24 * EDSCALE ) ;
theme - > set_constant ( " resize_margin " , " Window " , 4 * EDSCALE ) ;
theme - > set_font ( " title_font " , " Window " , theme - > get_font ( SNAME ( " title " ) , SNAME ( " EditorFonts " ) ) ) ;
theme - > set_font_size ( " title_font_size " , " Window " , theme - > get_font_size ( SNAME ( " title_size " ) , SNAME ( " EditorFonts " ) ) ) ;
2017-05-02 22:13:12 +02:00
2019-03-23 01:57:28 +01:00
// Complex window (currently only Editor Settings and Project Settings)
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_complex_window = style_window - > duplicate ( ) ;
style_complex_window - > set_bg_color ( dark_color_2 ) ;
2019-03-23 01:57:28 +01:00
style_complex_window - > set_border_color ( dark_color_2 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " panel " , " EditorSettingsDialog " , style_complex_window ) ;
theme - > set_stylebox ( " panel " , " ProjectSettingsEditor " , style_complex_window ) ;
theme - > set_stylebox ( " panel " , " EditorAbout " , style_complex_window ) ;
2017-09-08 08:06:02 +02:00
2021-07-28 04:32:03 +02:00
// AcceptDialog
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " panel " , " AcceptDialog " , style_window_title ) ;
2021-07-28 04:32:03 +02:00
2017-05-02 22:13:12 +02:00
// HScrollBar
2019-06-11 20:43:37 +02:00
Ref < Texture2D > empty_icon = memnew ( ImageTexture ) ;
2017-05-02 22:13:12 +02:00
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " scroll " , " HScrollBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiScrollBg " ) , SNAME ( " EditorIcons " ) ) , 5 , 5 , 5 , 5 , 0 , 0 , 0 , 0 ) ) ;
theme - > set_stylebox ( " scroll_focus " , " HScrollBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiScrollBg " ) , SNAME ( " EditorIcons " ) ) , 5 , 5 , 5 , 5 , 0 , 0 , 0 , 0 ) ) ;
theme - > set_stylebox ( " grabber " , " HScrollBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiScrollGrabber " ) , SNAME ( " EditorIcons " ) ) , 6 , 6 , 6 , 6 , 2 , 2 , 2 , 2 ) ) ;
theme - > set_stylebox ( " grabber_highlight " , " HScrollBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiScrollGrabberHl " ) , SNAME ( " EditorIcons " ) ) , 5 , 5 , 5 , 5 , 2 , 2 , 2 , 2 ) ) ;
theme - > set_stylebox ( " grabber_pressed " , " HScrollBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiScrollGrabberPressed " ) , SNAME ( " EditorIcons " ) ) , 6 , 6 , 6 , 6 , 2 , 2 , 2 , 2 ) ) ;
2017-05-02 22:13:12 +02:00
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " increment " , " HScrollBar " , empty_icon ) ;
theme - > set_icon ( " increment_highlight " , " HScrollBar " , empty_icon ) ;
theme - > set_icon ( " increment_pressed " , " HScrollBar " , empty_icon ) ;
theme - > set_icon ( " decrement " , " HScrollBar " , empty_icon ) ;
theme - > set_icon ( " decrement_highlight " , " HScrollBar " , empty_icon ) ;
theme - > set_icon ( " decrement_pressed " , " HScrollBar " , empty_icon ) ;
2017-05-02 22:13:12 +02:00
// VScrollBar
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " scroll " , " VScrollBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiScrollBg " ) , SNAME ( " EditorIcons " ) ) , 5 , 5 , 5 , 5 , 0 , 0 , 0 , 0 ) ) ;
theme - > set_stylebox ( " scroll_focus " , " VScrollBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiScrollBg " ) , SNAME ( " EditorIcons " ) ) , 5 , 5 , 5 , 5 , 0 , 0 , 0 , 0 ) ) ;
theme - > set_stylebox ( " grabber " , " VScrollBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiScrollGrabber " ) , SNAME ( " EditorIcons " ) ) , 6 , 6 , 6 , 6 , 2 , 2 , 2 , 2 ) ) ;
theme - > set_stylebox ( " grabber_highlight " , " VScrollBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiScrollGrabberHl " ) , SNAME ( " EditorIcons " ) ) , 5 , 5 , 5 , 5 , 2 , 2 , 2 , 2 ) ) ;
theme - > set_stylebox ( " grabber_pressed " , " VScrollBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiScrollGrabberPressed " ) , SNAME ( " EditorIcons " ) ) , 6 , 6 , 6 , 6 , 2 , 2 , 2 , 2 ) ) ;
theme - > set_icon ( " increment " , " VScrollBar " , empty_icon ) ;
theme - > set_icon ( " increment_highlight " , " VScrollBar " , empty_icon ) ;
theme - > set_icon ( " increment_pressed " , " VScrollBar " , empty_icon ) ;
theme - > set_icon ( " decrement " , " VScrollBar " , empty_icon ) ;
theme - > set_icon ( " decrement_highlight " , " VScrollBar " , empty_icon ) ;
theme - > set_icon ( " decrement_pressed " , " VScrollBar " , empty_icon ) ;
2017-05-02 22:13:12 +02:00
// HSlider
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " grabber_highlight " , " HSlider " , theme - > get_icon ( SNAME ( " GuiSliderGrabberHl " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " grabber " , " HSlider " , theme - > get_icon ( SNAME ( " GuiSliderGrabber " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_stylebox ( " slider " , " HSlider " , make_flat_stylebox ( dark_color_3 , 0 , default_margin_size / 2 , 0 , default_margin_size / 2 , corner_width ) ) ;
theme - > set_stylebox ( " grabber_area " , " HSlider " , make_flat_stylebox ( contrast_color_1 , 0 , default_margin_size / 2 , 0 , default_margin_size / 2 , corner_width ) ) ;
theme - > set_stylebox ( " grabber_area_highlight " , " HSlider " , make_flat_stylebox ( contrast_color_1 , 0 , default_margin_size / 2 , 0 , default_margin_size / 2 ) ) ;
2017-05-02 22:13:12 +02:00
// VSlider
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " grabber " , " VSlider " , theme - > get_icon ( SNAME ( " GuiSliderGrabber " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " grabber_highlight " , " VSlider " , theme - > get_icon ( SNAME ( " GuiSliderGrabberHl " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_stylebox ( " slider " , " VSlider " , make_flat_stylebox ( dark_color_3 , default_margin_size / 2 , 0 , default_margin_size / 2 , 0 , corner_width ) ) ;
theme - > set_stylebox ( " grabber_area " , " VSlider " , make_flat_stylebox ( contrast_color_1 , default_margin_size / 2 , 0 , default_margin_size / 2 , 0 , corner_width ) ) ;
theme - > set_stylebox ( " grabber_area_highlight " , " VSlider " , make_flat_stylebox ( contrast_color_1 , default_margin_size / 2 , 0 , default_margin_size / 2 , 0 ) ) ;
2017-05-02 22:13:12 +02:00
2019-03-23 01:57:28 +01:00
// RichTextLabel
2022-02-08 10:14:58 +01:00
theme - > set_color ( " default_color " , " RichTextLabel " , font_color ) ;
theme - > set_color ( " font_shadow_color " , " RichTextLabel " , Color ( 0 , 0 , 0 , 0 ) ) ;
theme - > set_constant ( " shadow_offset_x " , " RichTextLabel " , 1 * EDSCALE ) ;
theme - > set_constant ( " shadow_offset_y " , " RichTextLabel " , 1 * EDSCALE ) ;
theme - > set_constant ( " shadow_outline_size " , " RichTextLabel " , 1 * EDSCALE ) ;
theme - > set_stylebox ( " focus " , " RichTextLabel " , make_empty_stylebox ( ) ) ;
theme - > set_stylebox ( " normal " , " RichTextLabel " , style_tree_bg ) ;
2017-09-28 23:21:44 +02:00
2022-01-18 21:01:30 +01:00
// Editor help.
2022-02-08 10:14:58 +01:00
theme - > set_color ( " title_color " , " EditorHelp " , accent_color ) ;
theme - > set_color ( " headline_color " , " EditorHelp " , mono_color ) ;
theme - > set_color ( " text_color " , " EditorHelp " , font_color ) ;
theme - > set_color ( " comment_color " , " EditorHelp " , font_color * Color ( 1 , 1 , 1 , 0.6 ) ) ;
theme - > set_color ( " symbol_color " , " EditorHelp " , font_color * Color ( 1 , 1 , 1 , 0.6 ) ) ;
theme - > set_color ( " value_color " , " EditorHelp " , font_color * Color ( 1 , 1 , 1 , 0.6 ) ) ;
theme - > set_color ( " qualifier_color " , " EditorHelp " , font_color * Color ( 1 , 1 , 1 , 0.8 ) ) ;
theme - > set_color ( " type_color " , " EditorHelp " , accent_color . lerp ( font_color , 0.5 ) ) ;
theme - > set_color ( " selection_color " , " EditorHelp " , accent_color * Color ( 1 , 1 , 1 , 0.4 ) ) ;
theme - > set_color ( " link_color " , " EditorHelp " , accent_color . lerp ( mono_color , 0.8 ) ) ;
theme - > set_color ( " code_color " , " EditorHelp " , accent_color . lerp ( mono_color , 0.6 ) ) ;
theme - > set_color ( " kbd_color " , " EditorHelp " , accent_color . lerp ( property_color , 0.6 ) ) ;
theme - > set_constant ( " line_separation " , " EditorHelp " , Math : : round ( 6 * EDSCALE ) ) ;
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " table_h_separation " , " EditorHelp " , 16 * EDSCALE ) ;
theme - > set_constant ( " table_v_separation " , " EditorHelp " , 6 * EDSCALE ) ;
2017-09-14 02:56:37 +02:00
2017-06-07 06:11:13 +02:00
// Panel
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " panel " , " Panel " , make_flat_stylebox ( dark_color_1 , 6 , 4 , 6 , 4 , corner_width ) ) ;
theme - > set_stylebox ( " PanelForeground " , " EditorStyles " , style_default ) ;
2017-06-07 06:11:13 +02:00
2017-08-15 19:30:53 +02:00
// Label
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " normal " , " Label " , style_empty ) ;
theme - > set_color ( " font_color " , " Label " , font_color ) ;
theme - > set_color ( " font_shadow_color " , " Label " , Color ( 0 , 0 , 0 , 0 ) ) ;
theme - > set_constant ( " shadow_offset_x " , " Label " , 1 * EDSCALE ) ;
theme - > set_constant ( " shadow_offset_y " , " Label " , 1 * EDSCALE ) ;
theme - > set_constant ( " shadow_outline_size " , " Label " , 1 * EDSCALE ) ;
theme - > set_constant ( " line_spacing " , " Label " , 3 * EDSCALE ) ;
2017-08-15 19:30:53 +02:00
2018-05-05 22:19:44 +02:00
// LinkButton
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " focus " , " LinkButton " , style_empty ) ;
theme - > set_color ( " font_color " , " LinkButton " , font_color ) ;
theme - > set_color ( " font_hover_color " , " LinkButton " , font_hover_color ) ;
theme - > set_color ( " font_focus_color " , " LinkButton " , font_focus_color ) ;
theme - > set_color ( " font_pressed_color " , " LinkButton " , accent_color ) ;
theme - > set_color ( " font_disabled_color " , " LinkButton " , font_disabled_color ) ;
2018-05-05 22:19:44 +02:00
2022-06-09 22:23:11 +02:00
// TooltipPanel + TooltipLabel
// TooltipPanel is also used for custom tooltips, while TooltipLabel
// is only relevant for default tooltips.
2017-09-08 08:06:02 +02:00
Ref < StyleBoxFlat > style_tooltip = style_popup - > duplicate ( ) ;
2019-03-23 01:57:28 +01:00
style_tooltip - > set_shadow_size ( 0 ) ;
2021-09-02 02:40:19 +02:00
style_tooltip - > set_default_margin ( SIDE_LEFT , default_margin_size * EDSCALE * 0.5 ) ;
2019-03-23 01:57:28 +01:00
style_tooltip - > set_default_margin ( SIDE_TOP , default_margin_size * EDSCALE * 0.5 ) ;
2021-09-02 02:40:19 +02:00
style_tooltip - > set_default_margin ( SIDE_RIGHT , default_margin_size * EDSCALE * 0.5 ) ;
2019-03-23 01:57:28 +01:00
style_tooltip - > set_default_margin ( SIDE_BOTTOM , default_margin_size * EDSCALE * 0.5 ) ;
2021-09-02 02:40:19 +02:00
style_tooltip - > set_bg_color ( dark_color_3 * Color ( 0.8 , 0.8 , 0.8 , 0.9 ) ) ;
2019-03-23 01:57:28 +01:00
style_tooltip - > set_border_width_all ( 0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " font_color " , " TooltipLabel " , font_hover_color ) ;
theme - > set_color ( " font_color_shadow " , " TooltipLabel " , Color ( 0 , 0 , 0 , 0 ) ) ;
theme - > set_stylebox ( " panel " , " TooltipPanel " , style_tooltip ) ;
2017-05-02 22:13:12 +02:00
// PopupPanel
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " panel " , " PopupPanel " , style_popup ) ;
2017-05-02 22:13:12 +02:00
// SpinBox
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " updown " , " SpinBox " , theme - > get_icon ( SNAME ( " GuiSpinboxUpdown " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " updown_disabled " , " SpinBox " , theme - > get_icon ( SNAME ( " GuiSpinboxUpdownDisabled " ) , SNAME ( " EditorIcons " ) ) ) ;
2017-07-15 06:40:17 +02:00
// ProgressBar
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " bg " , " ProgressBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiProgressBar " ) , SNAME ( " EditorIcons " ) ) , 4 , 4 , 4 , 4 , 0 , 0 , 0 , 0 ) ) ;
theme - > set_stylebox ( " fg " , " ProgressBar " , make_stylebox ( theme - > get_icon ( SNAME ( " GuiProgressFill " ) , SNAME ( " EditorIcons " ) ) , 6 , 6 , 6 , 6 , 2 , 1 , 2 , 1 ) ) ;
theme - > set_color ( " font_color " , " ProgressBar " , font_color ) ;
2017-07-15 06:40:17 +02:00
// GraphEdit
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " bg " , " GraphEdit " , style_tree_bg ) ;
2019-08-30 10:56:45 +02:00
if ( dark_theme ) {
2022-02-08 10:14:58 +01:00
theme - > set_color ( " grid_major " , " GraphEdit " , Color ( 1.0 , 1.0 , 1.0 , 0.15 ) ) ;
theme - > set_color ( " grid_minor " , " GraphEdit " , Color ( 1.0 , 1.0 , 1.0 , 0.07 ) ) ;
2019-08-30 10:56:45 +02:00
} else {
2022-02-08 10:14:58 +01:00
theme - > set_color ( " grid_major " , " GraphEdit " , Color ( 0.0 , 0.0 , 0.0 , 0.15 ) ) ;
theme - > set_color ( " grid_minor " , " GraphEdit " , Color ( 0.0 , 0.0 , 0.0 , 0.07 ) ) ;
2019-08-30 10:56:45 +02:00
}
2022-02-08 10:14:58 +01:00
theme - > set_color ( " selection_fill " , " GraphEdit " , theme - > get_color ( SNAME ( " box_selection_fill_color " ) , SNAME ( " Editor " ) ) ) ;
theme - > set_color ( " selection_stroke " , " GraphEdit " , theme - > get_color ( SNAME ( " box_selection_stroke_color " ) , SNAME ( " Editor " ) ) ) ;
theme - > set_color ( " activity " , " GraphEdit " , accent_color ) ;
theme - > set_icon ( " minus " , " GraphEdit " , theme - > get_icon ( SNAME ( " ZoomLess " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " more " , " GraphEdit " , theme - > get_icon ( SNAME ( " ZoomMore " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " reset " , " GraphEdit " , theme - > get_icon ( SNAME ( " ZoomReset " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " snap " , " GraphEdit " , theme - > get_icon ( SNAME ( " SnapGrid " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " minimap " , " GraphEdit " , theme - > get_icon ( SNAME ( " GridMinimap " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " layout " , " GraphEdit " , theme - > get_icon ( SNAME ( " GridLayout " ) , SNAME ( " EditorIcons " ) ) ) ;
2017-05-02 22:13:12 +02:00
2020-11-06 20:16:45 +01:00
// GraphEditMinimap
2021-01-25 15:37:05 +01:00
Ref < StyleBoxFlat > style_minimap_bg = make_flat_stylebox ( dark_color_1 , 0 , 0 , 0 , 0 ) ;
style_minimap_bg - > set_border_color ( dark_color_3 ) ;
style_minimap_bg - > set_border_width_all ( 1 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " bg " , " GraphEditMinimap " , style_minimap_bg ) ;
2021-01-25 15:37:05 +01:00
2020-11-06 20:16:45 +01:00
Ref < StyleBoxFlat > style_minimap_camera ;
Ref < StyleBoxFlat > style_minimap_node ;
if ( dark_theme ) {
style_minimap_camera = make_flat_stylebox ( Color ( 0.65 , 0.65 , 0.65 , 0.2 ) , 0 , 0 , 0 , 0 ) ;
style_minimap_camera - > set_border_color ( Color ( 0.65 , 0.65 , 0.65 , 0.45 ) ) ;
style_minimap_node = make_flat_stylebox ( Color ( 1 , 1 , 1 ) , 0 , 0 , 0 , 0 ) ;
} else {
style_minimap_camera = make_flat_stylebox ( Color ( 0.38 , 0.38 , 0.38 , 0.2 ) , 0 , 0 , 0 , 0 ) ;
style_minimap_camera - > set_border_color ( Color ( 0.38 , 0.38 , 0.38 , 0.45 ) ) ;
style_minimap_node = make_flat_stylebox ( Color ( 0 , 0 , 0 ) , 0 , 0 , 0 , 0 ) ;
}
style_minimap_camera - > set_border_width_all ( 1 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " camera " , " GraphEditMinimap " , style_minimap_camera ) ;
theme - > set_stylebox ( " node " , " GraphEditMinimap " , style_minimap_node ) ;
2020-11-06 20:16:45 +01:00
2022-02-06 15:53:53 +01:00
Ref < Texture2D > minimap_resizer_icon = theme - > get_icon ( SNAME ( " GuiResizer " ) , SNAME ( " EditorIcons " ) ) ;
2021-01-25 15:37:05 +01:00
Color minimap_resizer_color ;
if ( dark_theme ) {
minimap_resizer_color = Color ( 1 , 1 , 1 , 0.65 ) ;
} else {
minimap_resizer_color = Color ( 0 , 0 , 0 , 0.65 ) ;
}
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " resizer " , " GraphEditMinimap " , flip_icon ( minimap_resizer_icon , true , true ) ) ;
theme - > set_color ( " resizer_color " , " GraphEditMinimap " , minimap_resizer_color ) ;
2017-09-08 08:06:02 +02:00
2020-11-06 20:16:45 +01:00
// GraphNode
2022-04-30 03:56:57 +02:00
const int gn_margin_side = 2 ;
const int gn_margin_bottom = 2 ;
2019-03-23 01:57:28 +01:00
2022-06-03 19:59:00 +02:00
// StateMachine
const int sm_margin_side = 10 ;
2022-04-30 03:56:57 +02:00
Color graphnode_bg = dark_color_3 ;
if ( ! dark_theme ) {
graphnode_bg = prop_section_color ;
}
Ref < StyleBoxFlat > graphsb = make_flat_stylebox ( graphnode_bg . lerp ( style_tree_bg - > get_bg_color ( ) , 0.3 ) , gn_margin_side , 24 , gn_margin_side , gn_margin_bottom , corner_width ) ;
2017-06-10 20:40:45 +02:00
graphsb - > set_border_width_all ( border_width ) ;
2022-04-30 03:56:57 +02:00
graphsb - > set_border_color ( graphnode_bg ) ;
Ref < StyleBoxFlat > graphsbselected = make_flat_stylebox ( graphnode_bg * Color ( 1 , 1 , 1 , 1 ) , gn_margin_side , 24 , gn_margin_side , gn_margin_bottom , corner_width ) ;
2019-03-23 01:57:28 +01:00
graphsbselected - > set_border_width_all ( 2 * EDSCALE + border_width ) ;
2022-04-30 03:56:57 +02:00
graphsbselected - > set_border_color ( Color ( accent_color . r , accent_color . g , accent_color . b , 0.6 ) ) ;
Ref < StyleBoxFlat > graphsbcomment = make_flat_stylebox ( graphnode_bg * Color ( 1 , 1 , 1 , 0.3 ) , gn_margin_side , 24 , gn_margin_side , gn_margin_bottom , corner_width ) ;
2017-06-10 20:40:45 +02:00
graphsbcomment - > set_border_width_all ( border_width ) ;
2022-04-30 03:56:57 +02:00
graphsbcomment - > set_border_color ( graphnode_bg ) ;
Ref < StyleBoxFlat > graphsbcommentselected = make_flat_stylebox ( graphnode_bg * Color ( 1 , 1 , 1 , 0.4 ) , gn_margin_side , 24 , gn_margin_side , gn_margin_bottom , corner_width ) ;
2017-06-10 20:40:45 +02:00
graphsbcommentselected - > set_border_width_all ( border_width ) ;
2022-04-30 03:56:57 +02:00
graphsbcommentselected - > set_border_color ( graphnode_bg ) ;
2017-09-27 21:44:48 +02:00
Ref < StyleBoxFlat > graphsbbreakpoint = graphsbselected - > duplicate ( ) ;
graphsbbreakpoint - > set_draw_center ( false ) ;
2019-03-19 10:32:13 +01:00
graphsbbreakpoint - > set_border_color ( warning_color ) ;
2017-09-27 21:44:48 +02:00
graphsbbreakpoint - > set_shadow_color ( warning_color * Color ( 1.0 , 1.0 , 1.0 , 0.1 ) ) ;
Ref < StyleBoxFlat > graphsbposition = graphsbselected - > duplicate ( ) ;
graphsbposition - > set_draw_center ( false ) ;
2019-03-19 10:32:13 +01:00
graphsbposition - > set_border_color ( error_color ) ;
2017-09-27 21:44:48 +02:00
graphsbposition - > set_shadow_color ( error_color * Color ( 1.0 , 1.0 , 1.0 , 0.2 ) ) ;
2022-04-30 03:56:57 +02:00
Ref < StyleBoxEmpty > graphsbslot = make_empty_stylebox ( 12 , 0 , 12 , 0 ) ;
2022-06-03 19:59:00 +02:00
Ref < StyleBoxFlat > smgraphsb = make_flat_stylebox ( dark_color_3 * Color ( 1 , 1 , 1 , 0.7 ) , sm_margin_side , 24 , sm_margin_side , gn_margin_bottom , corner_width ) ;
2018-12-30 09:03:59 +01:00
smgraphsb - > set_border_width_all ( border_width ) ;
2022-04-30 03:56:57 +02:00
smgraphsb - > set_border_color ( graphnode_bg ) ;
2022-06-03 19:59:00 +02:00
Ref < StyleBoxFlat > smgraphsbselected = make_flat_stylebox ( graphnode_bg * Color ( 1 , 1 , 1 , 0.9 ) , sm_margin_side , 24 , sm_margin_side , gn_margin_bottom , corner_width ) ;
2019-03-23 01:57:28 +01:00
smgraphsbselected - > set_border_width_all ( 2 * EDSCALE + border_width ) ;
2019-03-19 10:32:13 +01:00
smgraphsbselected - > set_border_color ( Color ( accent_color . r , accent_color . g , accent_color . b , 0.9 ) ) ;
2018-12-30 09:03:59 +01:00
smgraphsbselected - > set_shadow_size ( 8 * EDSCALE ) ;
smgraphsbselected - > set_shadow_color ( shadow_color ) ;
2017-09-14 07:45:00 +02:00
2019-03-23 01:57:28 +01:00
graphsb - > set_border_width ( SIDE_TOP , 24 * EDSCALE ) ;
graphsbselected - > set_border_width ( SIDE_TOP , 24 * EDSCALE ) ;
graphsbcomment - > set_border_width ( SIDE_TOP , 24 * EDSCALE ) ;
graphsbcommentselected - > set_border_width ( SIDE_TOP , 24 * EDSCALE ) ;
2017-09-14 07:45:00 +02:00
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " frame " , " GraphNode " , graphsb ) ;
2022-04-14 23:20:28 +02:00
theme - > set_stylebox ( " selected_frame " , " GraphNode " , graphsbselected ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " comment " , " GraphNode " , graphsbcomment ) ;
2022-04-14 23:20:28 +02:00
theme - > set_stylebox ( " comment_focus " , " GraphNode " , graphsbcommentselected ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " breakpoint " , " GraphNode " , graphsbbreakpoint ) ;
theme - > set_stylebox ( " position " , " GraphNode " , graphsbposition ) ;
2022-04-30 03:56:57 +02:00
theme - > set_stylebox ( " slot " , " GraphNode " , graphsbslot ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " state_machine_frame " , " GraphNode " , smgraphsb ) ;
2022-04-14 23:20:28 +02:00
theme - > set_stylebox ( " state_machine_selected_frame " , " GraphNode " , smgraphsbselected ) ;
2017-12-24 20:08:53 +01:00
2022-04-30 03:56:57 +02:00
Color node_decoration_color = dark_color_1 . inverted ( ) ;
theme - > set_color ( " title_color " , " GraphNode " , node_decoration_color ) ;
node_decoration_color . a = 0.7 ;
theme - > set_color ( " close_color " , " GraphNode " , node_decoration_color ) ;
theme - > set_color ( " resizer_color " , " GraphNode " , node_decoration_color ) ;
2017-12-24 20:08:53 +01:00
2022-04-30 03:56:57 +02:00
theme - > set_constant ( " port_offset " , " GraphNode " , 0 ) ;
theme - > set_constant ( " title_h_offset " , " GraphNode " , 12 * EDSCALE ) ;
theme - > set_constant ( " title_offset " , " GraphNode " , 21 * EDSCALE ) ;
theme - > set_constant ( " close_h_offset " , " GraphNode " , - 2 * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " close_offset " , " GraphNode " , 20 * EDSCALE ) ;
theme - > set_constant ( " separation " , " GraphNode " , 1 * EDSCALE ) ;
2018-07-14 23:15:42 +02:00
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " close " , " GraphNode " , theme - > get_icon ( SNAME ( " GuiCloseCustomizable " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " resizer " , " GraphNode " , theme - > get_icon ( SNAME ( " GuiResizer " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " port " , " GraphNode " , theme - > get_icon ( SNAME ( " GuiGraphNodePort " ) , SNAME ( " EditorIcons " ) ) ) ;
2016-06-18 07:32:03 +02:00
2022-04-30 03:56:57 +02:00
theme - > set_font ( " title_font " , " GraphNode " , theme - > get_font ( SNAME ( " main_bold_msdf " ) , SNAME ( " EditorFonts " ) ) ) ;
2017-09-19 00:20:06 +02:00
// GridContainer
2022-04-14 23:20:28 +02:00
theme - > set_constant ( " v_separation " , " GridContainer " , Math : : round ( widget_default_margin . y - 2 * EDSCALE ) ) ;
2017-09-19 00:20:06 +02:00
2017-05-22 13:07:13 +02:00
// FileDialog
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " folder " , " FileDialog " , theme - > get_icon ( SNAME ( " Folder " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " parent_folder " , " FileDialog " , theme - > get_icon ( SNAME ( " ArrowUp " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " back_folder " , " FileDialog " , theme - > get_icon ( SNAME ( " Back " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " forward_folder " , " FileDialog " , theme - > get_icon ( SNAME ( " Forward " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " reload " , " FileDialog " , theme - > get_icon ( SNAME ( " Reload " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " toggle_hidden " , " FileDialog " , theme - > get_icon ( SNAME ( " GuiVisibilityVisible " ) , SNAME ( " EditorIcons " ) ) ) ;
2019-08-20 00:08:40 +02:00
// Use a different color for folder icons to make them easier to distinguish from files.
// On a light theme, the icon will be dark, so we need to lighten it before blending it with the accent color.
2022-02-08 10:14:58 +01:00
theme - > set_color ( " folder_icon_modulate " , " FileDialog " , ( dark_theme ? Color ( 1 , 1 , 1 ) : Color ( 4.25 , 4.25 , 4.25 ) ) . lerp ( accent_color , 0.7 ) ) ;
theme - > set_color ( " files_disabled " , " FileDialog " , font_disabled_color ) ;
2017-05-22 13:07:13 +02:00
2021-04-14 06:30:23 +02:00
// ColorPicker
2022-02-08 10:14:58 +01:00
theme - > set_constant ( " margin " , " ColorPicker " , popup_margin_size ) ;
theme - > set_constant ( " sv_width " , " ColorPicker " , 256 * EDSCALE ) ;
theme - > set_constant ( " sv_height " , " ColorPicker " , 256 * EDSCALE ) ;
theme - > set_constant ( " h_width " , " ColorPicker " , 30 * EDSCALE ) ;
theme - > set_constant ( " label_width " , " ColorPicker " , 10 * EDSCALE ) ;
theme - > set_icon ( " screen_picker " , " ColorPicker " , theme - > get_icon ( SNAME ( " ColorPick " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " add_preset " , " ColorPicker " , theme - > get_icon ( SNAME ( " Add " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " sample_bg " , " ColorPicker " , theme - > get_icon ( SNAME ( " GuiMiniCheckerboard " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " overbright_indicator " , " ColorPicker " , theme - > get_icon ( SNAME ( " OverbrightIndicator " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " bar_arrow " , " ColorPicker " , theme - > get_icon ( SNAME ( " ColorPickerBarArrow " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " picker_cursor " , " ColorPicker " , theme - > get_icon ( SNAME ( " PickerCursor " ) , SNAME ( " EditorIcons " ) ) ) ;
2017-09-27 21:44:48 +02:00
2021-04-14 06:30:23 +02:00
// ColorPickerButton
2022-02-08 10:14:58 +01:00
theme - > set_icon ( " bg " , " ColorPickerButton " , theme - > get_icon ( SNAME ( " GuiMiniCheckerboard " ) , SNAME ( " EditorIcons " ) ) ) ;
2017-09-27 21:44:48 +02:00
2021-08-18 02:09:48 +02:00
// ColorPresetButton
Ref < StyleBoxFlat > preset_sb = make_flat_stylebox ( Color ( 1 , 1 , 1 ) , 2 , 2 , 2 , 2 , 2 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " preset_fg " , " ColorPresetButton " , preset_sb ) ;
theme - > set_icon ( " preset_bg " , " ColorPresetButton " , theme - > get_icon ( SNAME ( " GuiMiniCheckerboard " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " overbright_indicator " , " ColorPresetButton " , theme - > get_icon ( SNAME ( " OverbrightIndicator " ) , SNAME ( " EditorIcons " ) ) ) ;
2021-08-18 02:09:48 +02:00
2017-12-17 13:06:21 +01:00
// Information on 3D viewport
Ref < StyleBoxFlat > style_info_3d_viewport = style_default - > duplicate ( ) ;
style_info_3d_viewport - > set_bg_color ( style_info_3d_viewport - > get_bg_color ( ) * Color ( 1 , 1 , 1 , 0.5 ) ) ;
style_info_3d_viewport - > set_border_width_all ( 0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " Information3dViewport " , " EditorStyles " , style_info_3d_viewport ) ;
2017-12-17 13:06:21 +01:00
2022-01-19 02:37:38 +01:00
// Asset Library.
2022-03-16 00:40:46 +01:00
theme - > set_stylebox ( " bg " , " AssetLib " , style_empty ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " panel " , " AssetLib " , style_content_panel ) ;
theme - > set_color ( " status_color " , " AssetLib " , Color ( 0.5 , 0.5 , 0.5 ) ) ;
theme - > set_icon ( " dismiss " , " AssetLib " , theme - > get_icon ( SNAME ( " Close " ) , SNAME ( " EditorIcons " ) ) ) ;
2022-01-19 02:37:38 +01:00
2021-03-13 20:30:26 +01:00
// Theme editor.
2022-02-08 10:14:58 +01:00
theme - > set_color ( " preview_picker_overlay_color " , " ThemeEditor " , Color ( 0.1 , 0.1 , 0.1 , 0.25 ) ) ;
2021-03-13 20:30:26 +01:00
Color theme_preview_picker_bg_color = accent_color ;
theme_preview_picker_bg_color . a = 0.2 ;
Ref < StyleBoxFlat > theme_preview_picker_sb = make_flat_stylebox ( theme_preview_picker_bg_color , 0 , 0 , 0 , 0 ) ;
theme_preview_picker_sb - > set_border_color ( accent_color ) ;
theme_preview_picker_sb - > set_border_width_all ( 1.0 * EDSCALE ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " preview_picker_overlay " , " ThemeEditor " , theme_preview_picker_sb ) ;
2021-07-16 20:32:58 +02:00
Color theme_preview_picker_label_bg_color = accent_color ;
theme_preview_picker_label_bg_color . set_v ( 0.5 ) ;
Ref < StyleBoxFlat > theme_preview_picker_label_sb = make_flat_stylebox ( theme_preview_picker_label_bg_color , 4.0 , 1.0 , 4.0 , 3.0 ) ;
2022-02-08 10:14:58 +01:00
theme - > set_stylebox ( " preview_picker_label " , " ThemeEditor " , theme_preview_picker_label_sb ) ;
2021-03-13 20:30:26 +01:00
2022-02-06 01:11:15 +01:00
// Dictionary editor add item.
2022-04-01 03:10:46 +02:00
// Expand to the left and right by 4px to compensate for the dictionary editor margins.
Ref < StyleBoxFlat > style_dictionary_add_item = make_flat_stylebox ( prop_subsection_color , 0 , 4 , 0 , 4 , corner_radius ) ;
style_dictionary_add_item - > set_expand_margin_size ( SIDE_LEFT , 4 * EDSCALE ) ;
style_dictionary_add_item - > set_expand_margin_size ( SIDE_RIGHT , 4 * EDSCALE ) ;
theme - > set_stylebox ( " DictionaryAddItem " , " EditorStyles " , style_dictionary_add_item ) ;
2022-02-06 01:11:15 +01:00
2022-08-01 20:01:48 +02:00
Ref < StyleBoxEmpty > vshader_label_style = make_empty_stylebox ( 2 , 1 , 2 , 1 ) ;
theme - > set_stylebox ( " label_style " , " VShaderEditor " , vshader_label_style ) ;
2017-09-15 03:02:05 +02:00
// adaptive script theme constants
// for comments and elements with lower relevance
const Color dim_color = Color ( font_color . r , font_color . g , font_color . b , 0.5 ) ;
const float mono_value = mono_color . r ;
2017-09-28 16:10:30 +02:00
const Color alpha1 = Color ( mono_value , mono_value , mono_value , 0.07 ) ;
const Color alpha2 = Color ( mono_value , mono_value , mono_value , 0.14 ) ;
2022-02-23 12:12:09 +01:00
const Color alpha3 = Color ( mono_value , mono_value , mono_value , 0.27 ) ;
2017-09-15 03:02:05 +02:00
2021-11-29 18:46:39 +01:00
const Color symbol_color = dark_theme ? Color ( 0.67 , 0.79 , 1 ) : Color ( 0 , 0 , 0.61 ) ;
const Color keyword_color = dark_theme ? Color ( 1.0 , 0.44 , 0.52 ) : Color ( 0.9 , 0.135 , 0.51 ) ;
const Color control_flow_keyword_color = dark_theme ? Color ( 1.0 , 0.55 , 0.8 ) : Color ( 0.743 , 0.12 , 0.8 ) ;
const Color base_type_color = dark_theme ? Color ( 0.26 , 1.0 , 0.76 ) : Color ( 0 , 0.6 , 0.2 ) ;
const Color engine_type_color = dark_theme ? Color ( 0.56 , 1 , 0.86 ) : Color ( 0.11 , 0.55 , 0.4 ) ;
const Color user_type_color = dark_theme ? Color ( 0.78 , 1 , 0.93 ) : Color ( 0.18 , 0.45 , 0.4 ) ;
const Color comment_color = dark_theme ? dim_color : Color ( 0.08 , 0.08 , 0.08 , 0.5 ) ;
const Color string_color = dark_theme ? Color ( 1 , 0.93 , 0.63 ) : Color ( 0.6 , 0.42 , 0 ) ;
2017-09-15 03:02:05 +02:00
2021-05-27 11:35:33 +02:00
// Use the brightest background color on a light theme (which generally uses a negative contrast rate).
const Color te_background_color = dark_theme ? background_color : dark_color_3 ;
2018-06-15 00:31:43 +02:00
const Color completion_background_color = dark_theme ? base_color : background_color ;
2017-09-15 03:02:05 +02:00
const Color completion_selected_color = alpha1 ;
const Color completion_existing_color = alpha2 ;
2022-02-14 14:41:22 +01:00
// Same opacity as the scroll grabber editor icon.
const Color completion_scroll_color = Color ( mono_value , mono_value , mono_value , 0.29 ) ;
2022-06-27 11:27:17 +02:00
const Color completion_scroll_hovered_color = Color ( mono_value , mono_value , mono_value , 0.4 ) ;
2017-09-15 03:02:05 +02:00
const Color completion_font_color = font_color ;
const Color text_color = font_color ;
const Color line_number_color = dim_color ;
2021-11-29 18:46:39 +01:00
const Color safe_line_number_color = dark_theme ? ( dim_color * Color ( 1 , 1.2 , 1 , 1.5 ) ) : Color ( 0 , 0.4 , 0 , 0.75 ) ;
2017-09-15 03:02:05 +02:00
const Color caret_color = mono_color ;
const Color caret_background_color = mono_color . inverted ( ) ;
const Color text_selected_color = dark_color_3 ;
2021-11-29 18:46:39 +01:00
const Color brace_mismatch_color = dark_theme ? error_color : Color ( 1 , 0.08 , 0 , 1 ) ;
2017-09-15 03:02:05 +02:00
const Color current_line_color = alpha1 ;
2018-06-15 00:31:43 +02:00
const Color line_length_guideline_color = dark_theme ? base_color : background_color ;
2017-09-15 03:02:05 +02:00
const Color word_highlighted_color = alpha1 ;
2021-11-29 18:46:39 +01:00
const Color number_color = dark_theme ? Color ( 0.63 , 1 , 0.88 ) : Color ( 0 , 0.55 , 0.28 , 1 ) ;
const Color function_color = dark_theme ? Color ( 0.34 , 0.7 , 1.0 ) : Color ( 0 , 0.225 , 0.9 , 1 ) ;
const Color member_variable_color = dark_theme ? Color ( 0.34 , 0.7 , 1.0 ) . lerp ( mono_color , 0.6 ) : Color ( 0 , 0.4 , 0.68 , 1 ) ;
2017-09-15 03:02:05 +02:00
const Color mark_color = Color ( error_color . r , error_color . g , error_color . b , 0.3 ) ;
2019-04-20 01:51:25 +02:00
const Color bookmark_color = Color ( 0.08 , 0.49 , 0.98 ) ;
2021-11-29 18:46:39 +01:00
const Color breakpoint_color = dark_theme ? error_color : Color ( 1 , 0.27 , 0.2 , 1 ) ;
2020-07-26 16:57:23 +02:00
const Color executing_line_color = Color ( 0.98 , 0.89 , 0.27 ) ;
2018-09-27 12:07:59 +02:00
const Color code_folding_color = alpha3 ;
2017-09-15 03:02:05 +02:00
const Color search_result_color = alpha1 ;
2021-11-29 18:46:39 +01:00
const Color search_result_border_color = dark_theme ? Color ( 0.41 , 0.61 , 0.91 , 0.38 ) : Color ( 0 , 0.4 , 1 , 0.38 ) ;
2017-09-15 03:02:05 +02:00
2017-12-26 20:41:08 +01:00
EditorSettings * setting = EditorSettings : : get_singleton ( ) ;
String text_editor_color_theme = setting - > get ( " text_editor/theme/color_theme " ) ;
2021-05-27 10:22:36 +02:00
if ( text_editor_color_theme = = " Default " ) {
2021-08-15 19:14:46 +02:00
setting - > set_initial_value ( " text_editor/theme/highlighting/symbol_color " , symbol_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/keyword_color " , keyword_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/control_flow_keyword_color " , control_flow_keyword_color , true ) ;
2021-11-29 18:46:39 +01:00
setting - > set_initial_value ( " text_editor/theme/highlighting/base_type_color " , base_type_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/engine_type_color " , engine_type_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/user_type_color " , user_type_color , true ) ;
2021-08-15 19:14:46 +02:00
setting - > set_initial_value ( " text_editor/theme/highlighting/comment_color " , comment_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/string_color " , string_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/background_color " , te_background_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/completion_background_color " , completion_background_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/completion_selected_color " , completion_selected_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/completion_existing_color " , completion_existing_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/completion_scroll_color " , completion_scroll_color , true ) ;
2022-06-27 11:27:17 +02:00
setting - > set_initial_value ( " text_editor/theme/highlighting/completion_scroll_hovered_color " , completion_scroll_hovered_color , true ) ;
2021-08-15 19:14:46 +02:00
setting - > set_initial_value ( " text_editor/theme/highlighting/completion_font_color " , completion_font_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/text_color " , text_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/line_number_color " , line_number_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/safe_line_number_color " , safe_line_number_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/caret_color " , caret_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/caret_background_color " , caret_background_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/text_selected_color " , text_selected_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/selection_color " , selection_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/brace_mismatch_color " , brace_mismatch_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/current_line_color " , current_line_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/line_length_guideline_color " , line_length_guideline_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/word_highlighted_color " , word_highlighted_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/number_color " , number_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/function_color " , function_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/member_variable_color " , member_variable_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/mark_color " , mark_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/bookmark_color " , bookmark_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/breakpoint_color " , breakpoint_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/executing_line_color " , executing_line_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/code_folding_color " , code_folding_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/search_result_color " , search_result_color , true ) ;
setting - > set_initial_value ( " text_editor/theme/highlighting/search_result_border_color " , search_result_border_color , true ) ;
2021-05-27 10:22:36 +02:00
} else if ( text_editor_color_theme = = " Godot 2 " ) {
2018-06-10 16:30:49 +02:00
setting - > load_text_editor_theme ( ) ;
2017-12-26 20:41:08 +01:00
}
2017-09-15 03:02:05 +02:00
2021-08-13 17:32:11 +02:00
// Now theme is loaded, apply it to CodeEdit.
2022-05-24 06:01:09 +02:00
theme - > set_font ( " font " , " CodeEdit " , theme - > get_font ( SNAME ( " source " ) , SNAME ( " EditorFonts " ) ) ) ;
theme - > set_font_size ( " font_size " , " CodeEdit " , theme - > get_font_size ( SNAME ( " source_size " ) , SNAME ( " EditorFonts " ) ) ) ;
2022-02-23 12:12:09 +01:00
2022-05-24 06:01:09 +02:00
Ref < StyleBoxFlat > code_edit_stylebox = make_flat_stylebox ( EDITOR_GET ( " text_editor/theme/highlighting/background_color " ) , widget_default_margin . x , widget_default_margin . y , widget_default_margin . x , widget_default_margin . y , corner_radius ) ;
theme - > set_stylebox ( " normal " , " CodeEdit " , code_edit_stylebox ) ;
theme - > set_stylebox ( " read_only " , " CodeEdit " , code_edit_stylebox ) ;
theme - > set_stylebox ( " focus " , " CodeEdit " , Ref < StyleBoxEmpty > ( memnew ( StyleBoxEmpty ) ) ) ;
2022-02-23 12:12:09 +01:00
2022-05-24 06:01:09 +02:00
theme - > set_icon ( " tab " , " CodeEdit " , theme - > get_icon ( SNAME ( " GuiTab " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " space " , " CodeEdit " , theme - > get_icon ( SNAME ( " GuiSpace " ) , SNAME ( " EditorIcons " ) ) ) ;
2022-02-23 12:12:09 +01:00
theme - > set_icon ( " folded " , " CodeEdit " , theme - > get_icon ( SNAME ( " CodeFoldedRightArrow " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " can_fold " , " CodeEdit " , theme - > get_icon ( SNAME ( " CodeFoldDownArrow " ) , SNAME ( " EditorIcons " ) ) ) ;
theme - > set_icon ( " executing_line " , " CodeEdit " , theme - > get_icon ( SNAME ( " TextEditorPlay " ) , SNAME ( " EditorIcons " ) ) ) ;
2022-05-24 06:01:09 +02:00
theme - > set_icon ( " breakpoint " , " CodeEdit " , theme - > get_icon ( SNAME ( " Breakpoint " ) , SNAME ( " EditorIcons " ) ) ) ;
2022-02-23 12:12:09 +01:00
2022-05-24 06:01:09 +02:00
theme - > set_constant ( " line_spacing " , " CodeEdit " , EDITOR_GET ( " text_editor/appearance/whitespace/line_spacing " ) ) ;
2022-02-23 12:12:09 +01:00
2022-05-24 06:01:09 +02:00
theme - > set_color ( " background_color " , " CodeEdit " , Color ( 0 , 0 , 0 , 0 ) ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " completion_background_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/completion_background_color " ) ) ;
theme - > set_color ( " completion_selected_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/completion_selected_color " ) ) ;
theme - > set_color ( " completion_existing_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/completion_existing_color " ) ) ;
theme - > set_color ( " completion_scroll_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/completion_scroll_color " ) ) ;
2022-06-27 11:27:17 +02:00
theme - > set_color ( " completion_scroll_hovered_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/completion_scroll_hovered_color " ) ) ;
2022-02-08 10:14:58 +01:00
theme - > set_color ( " completion_font_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/completion_font_color " ) ) ;
theme - > set_color ( " font_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/text_color " ) ) ;
theme - > set_color ( " line_number_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/line_number_color " ) ) ;
theme - > set_color ( " caret_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/caret_color " ) ) ;
theme - > set_color ( " font_selected_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/text_selected_color " ) ) ;
theme - > set_color ( " selection_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/selection_color " ) ) ;
theme - > set_color ( " brace_mismatch_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/brace_mismatch_color " ) ) ;
theme - > set_color ( " current_line_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/current_line_color " ) ) ;
theme - > set_color ( " line_length_guideline_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/line_length_guideline_color " ) ) ;
theme - > set_color ( " word_highlighted_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/word_highlighted_color " ) ) ;
theme - > set_color ( " bookmark_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/bookmark_color " ) ) ;
theme - > set_color ( " breakpoint_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/breakpoint_color " ) ) ;
theme - > set_color ( " executing_line_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/executing_line_color " ) ) ;
theme - > set_color ( " code_folding_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/code_folding_color " ) ) ;
theme - > set_color ( " search_result_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/search_result_color " ) ) ;
theme - > set_color ( " search_result_border_color " , " CodeEdit " , EDITOR_GET ( " text_editor/theme/highlighting/search_result_border_color " ) ) ;
2021-08-13 17:32:11 +02:00
2016-06-18 07:32:03 +02:00
return theme ;
}
2017-11-11 18:57:54 +01:00
Ref < Theme > create_custom_theme ( const Ref < Theme > p_theme ) {
2021-08-14 01:01:15 +02:00
Ref < Theme > theme = create_editor_theme ( p_theme ) ;
2018-03-04 00:46:36 +01:00
2021-08-14 01:01:15 +02:00
const String custom_theme_path = EditorSettings : : get_singleton ( ) - > get ( " interface/theme/custom_theme " ) ;
2021-12-09 10:42:46 +01:00
if ( ! custom_theme_path . is_empty ( ) ) {
2021-08-14 01:01:15 +02:00
Ref < Theme > custom_theme = ResourceLoader : : load ( custom_theme_path ) ;
if ( custom_theme . is_valid ( ) ) {
theme - > merge_with ( custom_theme ) ;
}
2016-06-18 07:32:03 +02:00
}
return theme ;
}
2021-03-20 10:32:38 +01:00
Ref < ImageTexture > create_unscaled_default_project_icon ( ) {
# ifdef MODULE_SVG_ENABLED
for ( int i = 0 ; i < editor_icons_count ; i + + ) {
// ESCALE should never affect size of the icon
if ( strcmp ( editor_icons_names [ i ] , " DefaultProjectIcon " ) = = 0 ) {
return editor_generate_icon ( i , false , 1.0 ) ;
}
}
# endif
return Ref < ImageTexture > ( memnew ( ImageTexture ) ) ;
}