@@ -8,8 +8,7 @@ static var base_color: Color
88static var accent_color : Color
99static var is_theme_dark : bool
1010
11- static var max_contrast_color : Color
12- static var min_contrast_color : Color
11+ static var max_contrast_color : Color # White on dark theme, black on light theme.
1312static var extreme_theme_color : Color # Black on dark theme, white on light theme.
1413static var tinted_contrast_color : Color # Base color used to derive icon colors and other UI elements.
1514static var gray_color : Color # Light gray on dark theme, darker gray on light theme.
@@ -18,8 +17,8 @@ static var black_or_white_counter_accent_color: Color
1817
1918static var warning_icon_color : Color
2019static var info_icon_color : Color
21- static var folder_color : Color = Color . BLUE
22- static var text_file_color : Color = Color . DARK_GRAY
20+ static var folder_color : Color
21+ static var text_file_color : Color
2322
2423static var hover_selected_inspector_frame_inner_color : Color
2524static var hover_selected_inspector_frame_title_color : Color
@@ -87,26 +86,24 @@ static var icon_normal_color: Color
8786static var icon_hover_color : Color
8887static var icon_pressed_color : Color
8988
90- static var translucent_button_color_disabled : Color
9189static var flat_button_color_disabled : Color
9290static var context_button_color_disabled : Color
9391
9492static var subtle_flat_panel_color : Color
9593static var contrast_flat_panel_color : Color
9694static var overlay_panel_inner_color : Color
97- static var overlay_panel_subtler_inner_color : Color
95+ static var overlay_panel_border_color : Color
9896
9997static var scrollbar_pressed_color : Color
10098
10199static var line_edit_focus_color : Color
102100static var line_edit_inner_color : Color
103101static var line_edit_normal_border_color : Color
102+ static var mini_line_edit_inner_color : Color
104103static var mini_line_edit_normal_border_color : Color
105104static var line_edit_inner_color_disabled : Color
106105static var line_edit_border_color_disabled : Color
107106
108- static var tab_container_panel_inner_color : Color
109- static var tab_container_panel_border_color : Color
110107static var text_edit_alternative_inner_color : Color
111108
112109static var selected_tab_color : Color
@@ -115,23 +112,23 @@ static var selected_tab_border_color: Color
115112static func color_difference (color1 : Color , color2 : Color ) -> float :
116113 return (absf (color1 .r - color2 .r ) + absf (color1 .g - color2 .g ) + absf (color1 .b - color2 .b )) / 3.0
117114
118-
119115static func recalculate_colors () -> void :
120116 base_color = Configs .savedata .base_color
121117 accent_color = Configs .savedata .accent_color
122- is_theme_dark = base_color .get_luminance () < 0.5
123-
124- extreme_theme_color = Color .BLACK if is_theme_dark else Color .WHITE
125- max_contrast_color = Color (1 , 1 , 1 , 0.94 ) if is_theme_dark else Color (0 , 0 , 0 , 0.87 )
126- min_contrast_color = Color (1 , 1 , 1 , 0.24 ) if is_theme_dark else Color (0 , 0 , 0 , 0.24 )
127-
128- tinted_contrast_color = accent_color .lerp (max_contrast_color , 0.4 )
129- gray_color = base_color .lerp (max_contrast_color , 0.5 )
118+ is_theme_dark = (base_color .get_luminance () < 0.5 )
119+
120+ max_contrast_color = Color ("#fff" ) if is_theme_dark else Color ("000" )
121+ extreme_theme_color = Color ("#000" ) if is_theme_dark else Color ("fff" )
122+ tinted_contrast_color = Color ("#def" ) if is_theme_dark else Color ("061728" )
123+ gray_color = Color ("808080" ) if is_theme_dark else Color ("666" )
130124 tinted_gray_color = tinted_contrast_color .blend (Color (extreme_theme_color , 0.475 ))
131- black_or_white_counter_accent_color = extreme_theme_color if is_theme_dark else max_contrast_color
125+ black_or_white_counter_accent_color = Color ("#000" ) if accent_color .get_luminance () > 0.625 else Color ("fff" )
126+
127+ warning_icon_color = Color ("fca" ) if is_theme_dark else Color ("96592c" )
128+ info_icon_color = Color ("acf" ) if is_theme_dark else Color ("3a6ab0" )
132129 folder_color = Color ("88b6dd" ) if is_theme_dark else Color ("528fcc" )
133130 text_file_color = Color ("fec" ) if is_theme_dark else Color ("cc9629" )
134-
131+
135132 hover_selected_inspector_frame_inner_color = Color .from_hsv (0.625 , 0.48 , 0.27 ) if ThemeUtils .is_theme_dark else Color .from_hsv (0.625 , 0.27 , 0.925 )
136133 hover_selected_inspector_frame_title_color = hover_selected_inspector_frame_inner_color .lerp (max_contrast_color , 0.02 )
137134 selected_inspector_frame_inner_color = Color .from_hsv (0.625 , 0.5 , 0.25 ) if ThemeUtils .is_theme_dark else Color .from_hsv (0.625 , 0.23 , 0.925 )
@@ -143,98 +140,96 @@ static func recalculate_colors() -> void:
143140 inspector_frame_inner_color = Color .from_hsv (0.625 , 0.6 , 0.16 ) if ThemeUtils .is_theme_dark else Color .from_hsv (0.625 , 0.12 , 0.9 )
144141 inspector_frame_title_color = inspector_frame_inner_color .lerp (max_contrast_color , 0.02 )
145142 inspector_frame_border_color = Color .from_hsv (0.6 , 0.5 , 0.35 ) if ThemeUtils .is_theme_dark else Color .from_hsv (0.6 , 0.5 , 0.875 )
146-
147- # Icons
148- warning_icon_color = Color ("#FFD54F" )
149- info_icon_color = Color ("#64B5F6" )
150- var icon_base = accent_color .lerp (max_contrast_color , 0.4 )
143+
144+ intermediate_color = base_color
151145 if is_theme_dark :
152- icon_normal_color = icon_base .lightened (0.1 )
153- icon_hover_color = icon_base .lightened (0.2 )
154- icon_pressed_color = icon_base .darkened (0.1 )
146+ intermediate_color .s *= 0.96
147+ intermediate_color .v = 0.25 + 0.4 * sqrt (intermediate_color .v )
148+ if is_zero_approx (base_color .s ):
149+ intermediate_color .h = accent_color .h
150+ elif base_color .h <= 5 / 6.0 and base_color .h > 1 / 6.0 :
151+ intermediate_color .h = move_toward (intermediate_color .h , 1 / 6.0 , 0.05 )
155152 else :
156- icon_normal_color = icon_base .darkened (0.05 )
157- icon_hover_color = icon_base
158- icon_pressed_color = icon_base .darkened (0.15 )
159-
160- # Intermediate/neutral variants
161- intermediate_color = accent_color .lerp (extreme_theme_color , 0.6 )
153+ intermediate_color .s = 0.3 + 0.4 * sqrt (intermediate_color .s )
154+ intermediate_color .v *= 0.92
155+ if is_zero_approx (base_color .s ):
156+ if not is_zero_approx (accent_color .s ):
157+ intermediate_color .h = accent_color .h
158+ else :
159+ intermediate_color .s = 0
160+ intermediate_color .v *= 0.9
161+
162162 desaturated_color = intermediate_color .lerp (gray_color , 0.3 ).lerp (extreme_theme_color , 0.08 )
163+ if not is_theme_dark :
164+ desaturated_color .v *= 0.9
163165 disabled_color = intermediate_color .lerp (gray_color , 0.8 )
164-
165- # Base/accent soft tones
166- soft_base_color = base_color .lerp (max_contrast_color , 0.015 )
167- softer_base_color = base_color .lerp (max_contrast_color , 0.04 )
166+
167+ soft_base_color = base_color .lerp (max_contrast_color , 0.015 if is_theme_dark else 0.03 )
168+ softer_base_color = base_color .lerp (max_contrast_color , 0.04 if is_theme_dark else 0.08 )
168169 soft_accent_color = accent_color .lerp (extreme_theme_color , 0.1 )
169-
170- # Overlay layers
171- hover_overlay_color = Color (max_contrast_color , 0.08 )
170+ hover_overlay_color = Color (tinted_contrast_color , 0.08 )
172171 pressed_overlay_color = Color (tinted_contrast_color .lerp (soft_accent_color , 0.6 ), 0.24 )
173172 hover_pressed_overlay_color = hover_overlay_color .blend (pressed_overlay_color )
174-
175- soft_hover_overlay_color = Color (max_contrast_color , 0.06 )
173+
174+ soft_hover_overlay_color = Color (tinted_contrast_color , 0.06 )
176175 soft_pressed_overlay_color = Color (tinted_contrast_color .lerp (soft_accent_color , 0.4 ), 0.18 )
177- soft_hover_pressed_overlay_color = soft_hover_overlay_color .blend (soft_pressed_overlay_color )
178-
179- strong_hover_overlay_color = Color (max_contrast_color , 0.12 )
180- stronger_hover_overlay_color = Color (max_contrast_color , 0.16 )
181-
182- # Intermediate overlays
183- intermediate_hover_color = intermediate_color .blend (hover_overlay_color )
184- soft_intermediate_color = intermediate_color .lerp (extreme_theme_color , 0.36 )
185- soft_intermediate_hover_color = soft_intermediate_color .blend (soft_hover_overlay_color )
186- softer_intermediate_color = intermediate_color .lerp (extreme_theme_color , 0.48 )
187- softer_intermediate_hover_color = softer_intermediate_color .blend (soft_hover_overlay_color )
188-
189- # Text
176+ var softer_hover_overlay_color := soft_hover_overlay_color
177+ softer_hover_overlay_color .a *= 0.5
178+ soft_hover_pressed_overlay_color = softer_hover_overlay_color .blend (soft_pressed_overlay_color )
179+
180+ strong_hover_overlay_color = Color (tinted_contrast_color , 0.12 )
181+ stronger_hover_overlay_color = Color (tinted_contrast_color , 0.16 )
182+
183+ intermediate_hover_color = intermediate_color .blend (strong_hover_overlay_color if is_theme_dark else stronger_hover_overlay_color )
184+ soft_intermediate_color = intermediate_color .lerp (extreme_theme_color , 0.36 if is_theme_dark else 0.48 )
185+ soft_intermediate_hover_color = soft_intermediate_color .blend (soft_hover_overlay_color if is_theme_dark else hover_overlay_color )
186+ softer_intermediate_color = intermediate_color .lerp (extreme_theme_color , 0.44 )
187+ if not is_theme_dark :
188+ softer_intermediate_color .s *= 0.8
189+ softer_intermediate_hover_color = softer_intermediate_color .blend (soft_hover_overlay_color if is_theme_dark else hover_overlay_color )
190+
190191 text_color = Color (max_contrast_color , 0.875 )
191192 highlighted_text_color = Color (max_contrast_color )
192193 dim_text_color = Color (max_contrast_color , 0.75 )
193194 dimmer_text_color = Color (max_contrast_color , 0.5 )
194195 subtle_text_color = Color (max_contrast_color , 0.375 )
195196 editable_text_color = tinted_contrast_color
196-
197- # Panels
197+
198198 basic_panel_inner_color = softer_base_color
199199 basic_panel_border_color = base_color .lerp (max_contrast_color , 0.24 )
200200 basic_panel_border_color .s = minf (basic_panel_border_color .s * 2.0 , lerpf (basic_panel_border_color .s , 1.0 , 0.2 ))
201- subtle_panel_border_color = basic_panel_border_color .lerp (basic_panel_inner_color , 0.4 )
202- subtle_panel_border_color .s = minf (subtle_panel_border_color .s * 2.0 , lerpf (subtle_panel_border_color .s , 1.0 , 0.2 ))
203-
204- overlay_panel_inner_color = base_color .lerp (extreme_theme_color , 0.15 )
205- overlay_panel_subtler_inner_color = base_color .lerp (extreme_theme_color , 0.08 )
206-
207- tab_container_panel_inner_color = base_color .lerp (extreme_theme_color , 0.12 )
208- tab_container_panel_border_color = max_contrast_color .lerp (base_color , 0.9 )
209-
210- subtle_flat_panel_color = base_color .lerp (max_contrast_color , 0.05 )
211- contrast_flat_panel_color = Color (tinted_contrast_color , 0.1 )
212-
213- # Selection
201+ subtle_panel_border_color = basic_panel_border_color .lerp (extreme_theme_color , 0.24 )
202+
214203 caret_color = Color (tinted_contrast_color , 0.875 )
215204 selection_color = Color (accent_color , 0.375 )
216205 disabled_selection_color = Color (gray_color , 0.4 )
217-
218- # Buttons
206+
219207 common_button_inner_color_pressed = intermediate_color .lerp (accent_color , 0.64 ).lerp (extreme_theme_color , 0.4 )
220208 common_button_border_color_pressed = intermediate_color .lerp (accent_color , 0.8 )
221209 common_button_inner_color_disabled = desaturated_color .lerp (gray_color , 0.4 ).lerp (extreme_theme_color , 0.72 )
222210 common_button_border_color_disabled = desaturated_color .lerp (gray_color , 0.4 ).lerp (extreme_theme_color , 0.56 )
223-
224- flat_button_color_disabled = base_color .lerp (max_contrast_color , 0.08 )
225- translucent_button_color_disabled = base_color .lerp (max_contrast_color , 0.1 )
211+
212+ icon_normal_color = tinted_contrast_color .lerp (extreme_theme_color , 0.2 )
213+ icon_hover_color = tinted_contrast_color
214+ icon_pressed_color = max_contrast_color
215+
216+ flat_button_color_disabled = Color (disabled_color .lerp (extreme_theme_color , 0.4 ), 0.18 )
226217 context_button_color_disabled = Color (Color .BLACK , maxf (0.16 , 0.48 - color_difference (Color .BLACK , basic_panel_inner_color ) * 2 )) if is_theme_dark \
227218 else Color (Color .BLACK , 0.055 )
228219
229220 subtle_flat_panel_color = base_color
230221 contrast_flat_panel_color = Color (tinted_contrast_color , 0.1 )
231222 overlay_panel_inner_color = base_color .lerp (extreme_theme_color , 0.1 )
223+ overlay_panel_border_color = base_color .lerp (max_contrast_color , 0.32 )
224+ overlay_panel_border_color .s = minf (overlay_panel_border_color .s * 4.0 , lerpf (overlay_panel_border_color .s , 1.0 , 0.6 ))
225+ overlay_panel_border_color .v = lerpf (overlay_panel_border_color .v , 1.0 , 0.125 )
232226
233227 scrollbar_pressed_color = intermediate_color .blend (Color (tinted_contrast_color .lerp (accent_color .lerp (max_contrast_color , 0.1 ), 0.2 ), 0.4 ))
234228
235229 line_edit_focus_color = Color (accent_color , 0.4 )
236230 line_edit_inner_color = desaturated_color .lerp (extreme_theme_color , 0.74 )
237231 line_edit_normal_border_color = desaturated_color .lerp (extreme_theme_color , 0.42 if is_theme_dark else 0.35 )
232+ mini_line_edit_inner_color = desaturated_color .lerp (extreme_theme_color , 0.78 )
238233 mini_line_edit_normal_border_color = desaturated_color .lerp (max_contrast_color , 0.04 )
239234 line_edit_inner_color_disabled = desaturated_color .lerp (gray_color , 0.4 ).lerp (extreme_theme_color , 0.88 )
240235 line_edit_border_color_disabled = desaturated_color .lerp (gray_color , 0.4 ).lerp (extreme_theme_color , 0.68 )
@@ -246,19 +241,7 @@ static func recalculate_colors() -> void:
246241 connected_button_border_color_hover = line_edit_normal_border_color .blend (strong_hover_overlay_color )
247242 connected_button_inner_color_pressed = line_edit_inner_color .lerp (common_button_inner_color_pressed , 0.8 )
248243 connected_button_border_color_pressed = line_edit_normal_border_color .lerp (common_button_border_color_pressed , 0.6 )
249-
250- # Scrollbars
251- scrollbar_pressed_color = accent_color .lerp (max_contrast_color , 0.4 )
252-
253- # LineEdits
254- line_edit_focus_color = Color (accent_color , 0.4 )
255- line_edit_inner_color = desaturated_color .lerp (extreme_theme_color , 0.74 )
256- line_edit_normal_border_color = desaturated_color .lerp (extreme_theme_color , 0.42 )
257- mini_line_edit_normal_border_color = desaturated_color .lerp (extreme_theme_color , 0.225 )
258- line_edit_inner_color_disabled = desaturated_color .lerp (gray_color , 0.4 ).lerp (extreme_theme_color , 0.88 )
259- line_edit_border_color_disabled = desaturated_color .lerp (gray_color , 0.4 ).lerp (extreme_theme_color , 0.68 )
260-
261- # Tabs
244+
262245 selected_tab_color = softer_intermediate_hover_color .lerp (accent_color , 0.2 )
263246 selected_tab_border_color = accent_color
264247
@@ -375,7 +358,8 @@ static func _setup_panelcontainer(theme: Theme) -> void:
375358 tab_stylebox .content_margin_right = 12.0
376359 tab_stylebox .content_margin_top = 10.0
377360 tab_stylebox .content_margin_bottom = 10.0
378- tab_stylebox .bg_color = subtle_flat_panel_color
361+ tab_stylebox .bg_color = basic_panel_inner_color
362+ tab_stylebox .border_color = basic_panel_border_color
379363 theme .set_stylebox ("panel" , "TabItem" , tab_stylebox )
380364
381365 theme .add_type ("TabItemActive" )
@@ -402,8 +386,8 @@ static func _setup_panelcontainer(theme: Theme) -> void:
402386 theme .add_type ("SideBarContent" )
403387 theme .set_type_variation ("SideBarContent" , "PanelContainer" )
404388 var panel_stylebox := StyleBoxFlat .new ()
405- panel_stylebox .bg_color = tab_container_panel_inner_color
406- panel_stylebox .border_color = tab_container_panel_border_color
389+ panel_stylebox .bg_color = soft_base_color . lerp ( softer_base_color , 0.6 )
390+ panel_stylebox .border_color = subtle_panel_border_color
407391 panel_stylebox .set_border_width_all (1 )
408392 panel_stylebox .set_corner_radius_all (8 )
409393 panel_stylebox .content_margin_left = 16
@@ -699,7 +683,7 @@ static func _setup_button(theme: Theme) -> void:
699683 theme .set_stylebox ("pressed" , "TranslucentButton" , pressed_translucent_button_stylebox )
700684
701685 var disabled_translucent_button_stylebox := normal_translucent_button_stylebox .duplicate ()
702- disabled_translucent_button_stylebox .bg_color = translucent_button_color_disabled
686+ disabled_translucent_button_stylebox .bg_color = context_button_color_disabled
703687 theme .set_stylebox ("disabled" , "TranslucentButton" , disabled_translucent_button_stylebox )
704688
705689 theme .add_type ("FlatButton" )
@@ -1250,8 +1234,8 @@ static func _setup_tabcontainer(theme: Theme) -> void:
12501234 theme .set_font_size ("font_size" , "TabContainer" , 14 )
12511235
12521236 var panel_stylebox := StyleBoxFlat .new ()
1253- panel_stylebox .bg_color = tab_container_panel_inner_color
1254- panel_stylebox .border_color = tab_container_panel_border_color
1237+ panel_stylebox .bg_color = soft_base_color . lerp ( softer_base_color , 0.5 )
1238+ panel_stylebox .border_color = subtle_panel_border_color
12551239 panel_stylebox .border_width_left = 2
12561240 panel_stylebox .border_width_right = 2
12571241 panel_stylebox .border_width_bottom = 2
0 commit comments