Compare commits

..

No commits in common. "main" and "2.4.0" have entirely different histories.
main ... 2.4.0

2 changed files with 193 additions and 277 deletions

@ -4,9 +4,6 @@
# Godot Minimal Theme # Godot Minimal Theme
> [!NOTE]
> This theme has been ported to Godot natively and is the new default theme starting with Godot 4.6. You don't need to install it anymore. All of the future UI improvements will happen in the [Godot repository](https://github.com/godotengine/godot).
## Installation ## Installation
1. Download the `minimal_theme.tres` file of the [latest theme version](https://github.com/passivestar/godot-minimal-theme/releases/latest). 1. Download the `minimal_theme.tres` file of the [latest theme version](https://github.com/passivestar/godot-minimal-theme/releases/latest).
@ -19,9 +16,9 @@ Minimal theme supports all editor settings. My recommendations are:
`Editor Settings -> Interface -> Theme`: `Editor Settings -> Interface -> Theme`:
- Base Color: `#272727` - Base Color: `#252525`
- Accent Color: `#569eff` - Accent Color: `#569eff`
- Contrast: `0.3-0.35` - Contrast: `0.25-0.3`
- Icon Saturation: `2` - Icon Saturation: `2`
- Corner Radius: `4-5` - Corner Radius: `4-5`

@ -51,60 +51,24 @@ func _init() -> void:
var increased_margin : float = base_spacing + extra_spacing * 0.75 var increased_margin : float = base_spacing + extra_spacing * 0.75
var popup_margin : float = maxf(base_margin * 2.4, 4.0 * scale) var popup_margin : float = maxf(base_margin * 2.4, 4.0 * scale)
# Colors
dark_theme = base_color.get_luminance() < 0.5 dark_theme = base_color.get_luminance() < 0.5
var dark_theme_icon_and_font : bool = dark_theme var dark_theme_icon_and_font : bool = dark_theme
if icon_and_font_color != 0: # ColorMode.AUTO_COLOR if icon_and_font_color != 0: # ColorMode.AUTO_COLOR
dark_theme_icon_and_font = icon_and_font_color == 2 # ColorMode.LIGHT dark_theme_icon_and_font = icon_and_font_color == 2 # ColorMode.LIGHT
var color_mono : Color = Color.WHITE if dark_theme else Color.BLACK var mono_color : Color = Color.WHITE if dark_theme else Color.BLACK
var color_mono_inv : Color = Color.BLACK if dark_theme else Color.WHITE var mono_color_inv : Color = Color.BLACK if dark_theme else Color.WHITE
var color_mono_font : Color = Color.WHITE if dark_theme_icon_and_font else Color.BLACK var mono_color_icon_and_font : Color = Color.WHITE if dark_theme_icon_and_font else Color.BLACK
var extra_border_color_1 : Color = Color(1, 1, 1, 0.4) if dark_theme else Color(0, 0, 0, 0.4)
var extra_border_color_2 : Color = Color(1, 1, 1, 0.2) if dark_theme else Color(0, 0, 0, 0.2)
# Ensure minimum contrast with the light theme. The default # Ensure minimum contrast with the light theme. The default
# contrast makes it hard to see the UI elements # contrast makes it hard to see the UI elements
if not dark_theme and contrast < 0 and contrast > -0.4: if not dark_theme and contrast < 0 and contrast > -0.4:
contrast = -0.4 contrast = -0.4
# Surface colors
var color_surface_lowest : Color = _get_base_color(-1.3 if dark_theme else -2.2, 0.9)
var color_surface_lower : Color = _get_base_color(-0.95 if dark_theme else -1.8, 0.9)
var color_surface_low : Color = _get_base_color(-0.6 if dark_theme else -0.9)
var color_surface_base : Color = _get_base_color(-0.2)
var color_surface_high : Color = _get_base_color(0.2, 0.8)
var color_surface_higher : Color = _get_base_color(0.35, 0.8)
var color_surface_highest : Color = _get_base_color(0.55, 0.6)
# Font colors
var color_font_normal : Color = color_mono_font * Color(1, 1, 1, 0.7)
var color_font_secondary : Color = color_mono_font * Color(1, 1, 1, 0.45)
var color_font_highlighted : Color = color_mono_font
var color_font_dimmed : Color = color_mono_font * Color(1, 1, 1, 0.35 if dark_theme_icon_and_font else 0.5)
# Icon colors
var color_icon_normal : Color = Color(1, 1, 1, 0.7 if dark_theme_icon_and_font else 0.95)
var color_icon_secondary : Color = Color(1, 1, 1, 0.45 if dark_theme_icon_and_font else 0.6)
var color_icon_focus : Color = Color(1, 1, 1)
var color_icon_hover : Color = Color(1, 1, 1)
var color_icon_pressed : Color = accent_color * (1.15 if dark_theme_icon_and_font else 3.5)
color_icon_pressed.a = 1.0
var color_icon_disabled : Color = Color(1, 1, 1, 0.35 if dark_theme_icon_and_font else 0.5)
# Button colors
var color_button_normal : Color = _get_base_color(0.35, 0.85)
var color_button_hover : Color = _get_base_color(0.55, 0.75)
var color_button_pressed : Color = _get_base_color(0.75, 0.75)
var color_button_disabled : Color = _get_base_color(0.2, 0.75)
var color_button_border : Color = _get_base_color(0.45, 0.75)
var color_button_border_hover : Color = _get_base_color(0.65, 0.75)
var color_button_border_pressed : Color = _get_base_color(0.85, 0.75)
# Extra border colors
var color_extra_border : Color = color_mono * Color(1, 1, 1, 0.4)
var color_extra_border_dimmed : Color = color_mono * Color(1, 1, 1, 0.2)
# Main stylebox that most styleboxes duplicate # Main stylebox that most styleboxes duplicate
var base_sb : StyleBoxFlat = StyleBoxFlat.new() var base_sb : StyleBoxFlat = StyleBoxFlat.new()
base_sb.bg_color = base_color base_sb.bg_color = base_color
@ -115,45 +79,45 @@ func _init() -> void:
# than transparent ones, however this is currently only noticeable on the Close # than transparent ones, however this is currently only noticeable on the Close
# button of editor settings, and it probably shouldn't even exist # button of editor settings, and it probably shouldn't even exist
var button_sb : StyleBoxFlat = base_sb.duplicate() var button_sb : StyleBoxFlat = base_sb.duplicate()
button_sb.bg_color = color_button_normal button_sb.bg_color = _get_base_color(0.3, 0.8)
button_sb.shadow_color = color_mono_inv * Color(1, 1, 1, 0.005) button_sb.shadow_color = Color(0, 0, 0, 0.005) if dark_theme else Color(1, 1, 1, 0.005)
button_sb.shadow_size = int(ceilf(8 * scale)) button_sb.shadow_size = int(ceilf(8 * scale))
button_sb.shadow_offset = Vector2(0, 4) * scale button_sb.shadow_offset = Vector2(0, 4) * scale
if draw_extra_borders: if draw_extra_borders:
_set_border(button_sb, color_extra_border, 1) _set_border(button_sb, extra_border_color_1, 1)
else: else:
_set_border(button_sb, color_button_border, 1) _set_border(button_sb, _get_base_color(0.425, 0.7), 1)
_set_margin(button_sb, base_margin * 2, base_margin * 1.5, base_margin * 2, base_margin * 1.5) _set_margin(button_sb, base_margin * 2, base_margin * 1.5, base_margin * 2, base_margin * 1.5)
var button_hover_sb : StyleBoxFlat = button_sb.duplicate() var button_hover_sb : StyleBoxFlat = button_sb.duplicate()
button_hover_sb.bg_color = color_button_hover button_hover_sb.bg_color = _get_base_color(0.5, 0.7)
if draw_extra_borders: if draw_extra_borders:
_set_border(button_hover_sb, color_extra_border, 1) _set_border(button_hover_sb, extra_border_color_1, 1)
else: else:
_set_border(button_hover_sb, color_button_border_hover, 1) _set_border(button_hover_sb, _get_base_color(0.625, 0.7), 1)
var button_pressed_sb : StyleBoxFlat = button_sb.duplicate() var button_pressed_sb : StyleBoxFlat = button_sb.duplicate()
button_pressed_sb.bg_color = color_button_pressed button_pressed_sb.bg_color = _get_base_color(0.7, 0.7)
if draw_extra_borders: if draw_extra_borders:
_set_border(button_pressed_sb, color_extra_border, 1) _set_border(button_pressed_sb, extra_border_color_1, 1)
else: else:
_set_border(button_pressed_sb, color_button_border_pressed, 1) _set_border(button_pressed_sb, _get_base_color(0.825, 0.7), 1)
var button_disabled_sb : StyleBoxFlat = button_sb.duplicate() var button_disabled_sb : StyleBoxFlat = button_sb.duplicate()
button_disabled_sb.set_border_width_all(0) button_disabled_sb.set_border_width_all(0)
button_disabled_sb.bg_color = color_button_disabled button_disabled_sb.bg_color = _get_base_color(0.2, 0.7)
if draw_extra_borders: if draw_extra_borders:
_set_border(button_disabled_sb, color_extra_border_dimmed * Color(1, 1, 1, 0.5), 1) _set_border(button_disabled_sb, extra_border_color_2 * Color(1, 1, 1, 0.5), 1)
var flat_button_hover_sb : StyleBoxFlat = base_sb.duplicate() var flat_button_hover_sb : StyleBoxFlat = base_sb.duplicate()
# This affects buttons in Tree so top and bottom margins should be kept low # This affects buttons in Tree so top and bottom margins should be kept low
_set_margin(flat_button_hover_sb, base_margin * 1.5, base_margin * 0.9, base_margin * 1.5, base_margin * 0.9) _set_margin(flat_button_hover_sb, base_margin * 1.5, base_margin * 0.9, base_margin * 1.5, base_margin * 0.9)
flat_button_hover_sb.bg_color = color_button_normal flat_button_hover_sb.bg_color = _get_base_color(0.3, 0.7)
if draw_extra_borders: if draw_extra_borders:
_set_border(flat_button_hover_sb, color_extra_border, 1) _set_border(flat_button_hover_sb, extra_border_color_1, 1)
var flat_button_pressed_sb : StyleBoxFlat = flat_button_hover_sb.duplicate() var flat_button_pressed_sb : StyleBoxFlat = flat_button_hover_sb.duplicate()
flat_button_pressed_sb.bg_color = color_button_hover flat_button_pressed_sb.bg_color = _get_base_color(0.5, 0.7)
var flat_button_normal_sb : StyleBoxFlat = flat_button_hover_sb.duplicate() var flat_button_normal_sb : StyleBoxFlat = flat_button_hover_sb.duplicate()
flat_button_normal_sb.draw_center = false flat_button_normal_sb.draw_center = false
@ -171,15 +135,15 @@ func _init() -> void:
# Animation editor # Animation editor
set_color('focus_color', 'AnimationBezierTrackEdit', Color.TRANSPARENT) set_color('focus_color', 'AnimationBezierTrackEdit', Color.TRANSPARENT)
set_color('h_line_color', 'AnimationBezierTrackEdit', color_mono * Color(1, 1, 1, 0.12)) set_color('h_line_color', 'AnimationBezierTrackEdit', mono_color * Color(1, 1, 1, 0.12))
set_color('track_focus_color', 'AnimationBezierTrackEdit', color_mono * Color(1, 1, 1, 0.1)) set_color('track_focus_color', 'AnimationBezierTrackEdit', mono_color * Color(1, 1, 1, 0.1))
set_color('v_line_color', 'AnimationBezierTrackEdit', Color.TRANSPARENT) set_color('v_line_color', 'AnimationBezierTrackEdit', Color.TRANSPARENT)
set_color('font_primary_color', 'AnimationTimelineEdit', color_font_normal) set_color('font_primary_color', 'AnimationTimelineEdit', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('font_secondary_color', 'AnimationTimelineEdit', color_font_dimmed) set_color('font_secondary_color', 'AnimationTimelineEdit', mono_color_icon_and_font * Color(1, 1, 1, 0.4))
set_color('h_line_color', 'AnimationTimelineEdit', Color.TRANSPARENT) set_color('h_line_color', 'AnimationTimelineEdit', Color.TRANSPARENT)
set_color('v_line_primary_color', 'AnimationTimelineEdit', color_mono * Color(1, 1, 1, 0.4)) set_color('v_line_primary_color', 'AnimationTimelineEdit', mono_color * Color(1, 1, 1, 0.4))
set_color('v_line_secondary_color', 'AnimationTimelineEdit', color_mono * Color(1, 1, 1, 0.08)) set_color('v_line_secondary_color', 'AnimationTimelineEdit', mono_color * Color(1, 1, 1, 0.08))
set_constant('text_primary_margin', 'AnimationTimelineEdit', int(base_margin * 0.75 * scale)) set_constant('text_primary_margin', 'AnimationTimelineEdit', int(base_margin * 0.75 * scale))
set_constant('text_secondary_margin', 'AnimationTimelineEdit', int(base_margin * 0.5 * scale)) set_constant('text_secondary_margin', 'AnimationTimelineEdit', int(base_margin * 0.5 * scale))
@ -189,13 +153,13 @@ func _init() -> void:
set_constant('v_line_secondary_width', 'AnimationTimelineEdit', int(ceilf(scale))) set_constant('v_line_secondary_width', 'AnimationTimelineEdit', int(ceilf(scale)))
var sb : StyleBoxFlat = base_sb.duplicate() var sb : StyleBoxFlat = base_sb.duplicate()
sb.bg_color = color_surface_highest sb.bg_color = _get_base_color(0.55, 0.7)
if draw_extra_borders: if draw_extra_borders:
_set_border(sb, color_extra_border, 1) _set_border(sb, extra_border_color_1, 1)
set_stylebox('time_available', 'AnimationTimelineEdit', sb) set_stylebox('time_available', 'AnimationTimelineEdit', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_high sb.bg_color = _get_base_color(0.2, 0.8)
set_stylebox('time_unavailable', 'AnimationTimelineEdit', sb) set_stylebox('time_unavailable', 'AnimationTimelineEdit', sb)
set_color('h_line_color', 'AnimationTrackEdit', Color.TRANSPARENT) set_color('h_line_color', 'AnimationTrackEdit', Color.TRANSPARENT)
@ -203,25 +167,25 @@ func _init() -> void:
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.draw_center = false sb.draw_center = false
_set_border(sb, color_surface_high, 2) _set_border(sb, _get_base_color(0.3, 0.6), 2)
_set_margin(sb, base_margin * 1.5, base_margin, base_margin * 1.5, base_margin) _set_margin(sb, base_margin * 1.5, base_margin, base_margin * 1.5, base_margin)
set_stylebox('focus', 'AnimationTrackEdit', sb) set_stylebox('focus', 'AnimationTrackEdit', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_high sb.bg_color = _get_base_color(0.2, 0.9)
set_stylebox('hover', 'AnimationTrackEdit', sb) set_stylebox('hover', 'AnimationTrackEdit', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_base sb.bg_color = _get_base_color(-0.2)
set_stylebox('odd', 'AnimationTrackEdit', sb) set_stylebox('odd', 'AnimationTrackEdit', sb)
set_color('bg_color', 'AnimationTrackEditGroup', color_surface_base) set_color('bg_color', 'AnimationTrackEditGroup', _get_base_color(-0.2))
set_color('h_line_color', 'AnimationTrackEditGroup', Color.TRANSPARENT) set_color('h_line_color', 'AnimationTrackEditGroup', Color.TRANSPARENT)
set_color('v_line_color', 'AnimationTrackEditGroup', Color.TRANSPARENT) set_color('v_line_color', 'AnimationTrackEditGroup', Color.TRANSPARENT)
set_constant('h_separation', 'AnimationTrackEditGroup', int(base_margin * 2 * scale)) set_constant('h_separation', 'AnimationTrackEditGroup', int(base_margin * 2 * scale))
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_low sb.bg_color = _get_base_color(-0.6)
_set_margin(sb, base_margin * 4, base_margin, 0, base_margin) _set_margin(sb, base_margin * 4, base_margin, 0, base_margin)
set_stylebox('header', 'AnimationTrackEditGroup', sb) set_stylebox('header', 'AnimationTrackEditGroup', sb)
@ -244,27 +208,23 @@ func _init() -> void:
# Audio Bus # Audio Bus
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_high sb.bg_color = _get_base_color(0.2, 0.7)
set_stylebox('normal', 'EditorAudioBus', sb) set_stylebox('normal', 'EditorAudioBus', sb)
set_stylebox('focus', 'EditorAudioBus', sb) set_stylebox('focus', 'EditorAudioBus', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_higher sb.bg_color = _get_base_color(0.35, 0.7)
set_stylebox('master', 'EditorAudioBus', sb) set_stylebox('master', 'EditorAudioBus', sb)
# Button # Button
set_color('font_color', 'Button', color_font_normal) set_color('font_color', 'Button', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('font_disabled_color', 'Button', color_font_dimmed) set_color('font_disabled_color', 'Button', mono_color_icon_and_font * Color(1, 1, 1, 0.3))
set_color('font_focus_color', 'Button', color_font_highlighted) set_color('font_focus_color', 'Button', mono_color_icon_and_font)
set_color('font_hover_color', 'Button', color_font_highlighted) set_color('font_hover_color', 'Button', mono_color_icon_and_font)
set_color('font_hover_pressed_color', 'Button', color_font_highlighted) set_color('font_hover_pressed_color', 'Button', mono_color_icon_and_font)
set_color('font_pressed_color', 'Button', color_font_highlighted) set_color('font_pressed_color', 'Button', mono_color_icon_and_font)
set_color('icon_disabled_color', 'Button', color_icon_disabled) set_color('icon_disabled_color', 'Button', mono_color_icon_and_font * Color(1, 1, 1, 0.3))
set_color('icon_focus_color', 'Button', color_icon_focus) set_color('icon_normal_color', 'Button', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('icon_hover_color', 'Button', color_icon_hover)
set_color('icon_hover_pressed_color', 'Button', color_icon_hover)
set_color('icon_normal_color', 'Button', color_icon_normal)
set_color('icon_pressed_color', 'Button', color_icon_pressed)
set_constant('outline_size', 'Button', 0) set_constant('outline_size', 'Button', 0)
set_stylebox('disabled', 'Button', button_disabled_sb) set_stylebox('disabled', 'Button', button_disabled_sb)
set_stylebox('disabled_mirrored', 'Button', button_disabled_sb) set_stylebox('disabled_mirrored', 'Button', button_disabled_sb)
@ -280,8 +240,8 @@ func _init() -> void:
# Checkbox # Checkbox
set_color('font_hover_pressed_color', 'CheckBox', color_font_highlighted) set_color('font_hover_pressed_color', 'CheckBox', mono_color_icon_and_font)
set_color('font_pressed_color', 'CheckBox', color_font_normal) set_color('font_pressed_color', 'CheckBox', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.draw_center = false sb.draw_center = false
@ -291,24 +251,24 @@ func _init() -> void:
# CheckButton # CheckButton
set_color('font_focus_color', 'CheckButton', color_font_normal) set_color('font_focus_color', 'CheckButton', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('font_hover_pressed_color', 'CheckButton', color_font_highlighted) set_color('font_hover_pressed_color', 'CheckButton', mono_color_icon_and_font)
set_color('font_pressed_color', 'CheckButton', color_font_normal) set_color('font_pressed_color', 'CheckButton', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
# Editor # Editor
set_color('background', 'Editor', color_surface_low) set_color('background', 'Editor', _get_base_color(-0.6))
set_color('box_selection_fill_color', 'Editor', color_mono * Color(1, 1, 1, 0.12)) set_color('box_selection_fill_color', 'Editor', mono_color * Color(1, 1, 1, 0.12))
set_color('box_selection_stroke_color', 'Editor', color_mono * Color(1, 1, 1, 0.4)) set_color('box_selection_stroke_color', 'Editor', mono_color * Color(1, 1, 1, 0.4))
# Ruler in 2D view: # Ruler in 2D view:
set_color('dark_color_2', 'Editor', base_color.lerp(color_mono_inv, 0.3) * Color(1, 1, 1, 0.8)) set_color('dark_color_2', 'Editor', Color(0, 0, 0, 0.3) if dark_theme else Color(1, 1, 1, 0.3))
# Shortcut tree cell background: # Shortcut tree cell background:
set_color('dark_color_3', 'Editor', color_surface_lower) set_color('dark_color_3', 'Editor', _get_base_color(-0.6))
set_color('forward_plus_color', 'Editor', Color(0.54902, 0.752941, 0.392157)) set_color('forward_plus_color', 'Editor', Color(0.54902, 0.752941, 0.392157))
set_color('gl_compatibility_color', 'Editor', Color(0.447059, 0.698039, 0.890196)) set_color('gl_compatibility_color', 'Editor', Color(0.447059, 0.698039, 0.890196))
set_color('mobile_color', 'Editor', Color(0.862745, 0.482353, 0.584314)) set_color('mobile_color', 'Editor', Color(0.862745, 0.482353, 0.584314))
set_color('property_color_w', 'Editor', color_font_normal) set_color('property_color_w', 'Editor', mono_color_icon_and_font * Color(1, 1, 1, 0.8))
set_color('property_color_x', 'Editor', Color('#E16277') if dark_theme_icon_and_font else Color('#670A18')) set_color('property_color_x', 'Editor', Color('#E16277') if dark_theme_icon_and_font else Color('#670A18'))
set_color('property_color_y', 'Editor', Color('#C3EF65') if dark_theme_icon_and_font else Color('#455E10')) set_color('property_color_y', 'Editor', Color('#C3EF65') if dark_theme_icon_and_font else Color('#455E10'))
set_color('property_color_z', 'Editor', Color('#6AABF6') if dark_theme_icon_and_font else Color('#143862')) set_color('property_color_z', 'Editor', Color('#6AABF6') if dark_theme_icon_and_font else Color('#143862'))
@ -327,17 +287,17 @@ func _init() -> void:
sb.corner_radius_bottom_right = int(corner_radius * scale) sb.corner_radius_bottom_right = int(corner_radius * scale)
sb.corner_radius_bottom_left = int(corner_radius * scale) sb.corner_radius_bottom_left = int(corner_radius * scale)
if draw_extra_borders: if draw_extra_borders:
_set_border(sb, color_extra_border_dimmed, 1) _set_border(sb, extra_border_color_2, 1)
set_stylebox('normal', 'EditorHelpBitContent', sb) set_stylebox('normal', 'EditorHelpBitContent', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_low sb.bg_color = _get_base_color(-0.55 if dark_theme else -0.9) # Same as secondary tree
_set_margin(sb, base_margin * 2, base_margin, base_margin * 2, base_margin) _set_margin(sb, base_margin * 2, base_margin, base_margin * 2, base_margin)
sb.set_corner_radius_all(0) sb.set_corner_radius_all(0)
sb.corner_radius_top_right = int(corner_radius * scale) sb.corner_radius_top_right = int(corner_radius * scale)
sb.corner_radius_top_left = int(corner_radius * scale) sb.corner_radius_top_left = int(corner_radius * scale)
if draw_extra_borders: if draw_extra_borders:
_set_border(sb, color_extra_border_dimmed, 1) _set_border(sb, extra_border_color_2, 1)
set_stylebox('normal', 'EditorHelpBitTitle', sb) set_stylebox('normal', 'EditorHelpBitTitle', sb)
# EditorInspector # EditorInspector
@ -347,10 +307,10 @@ func _init() -> void:
set_stylebox('panel', 'EditorInspector', empty_sb) set_stylebox('panel', 'EditorInspector', empty_sb)
set_constant('v_separation', 'EditorInspector', int(base_margin * 0.5 * scale)) set_constant('v_separation', 'EditorInspector', int(base_margin * 0.5 * scale))
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_high sb.bg_color = _get_base_color(0.2, 0.8)
_set_margin(sb, 0, base_margin * 1.2, 0, base_margin * 1.2) _set_margin(sb, 0, base_margin * 1.2, 0, base_margin * 1.2)
if draw_extra_borders: if draw_extra_borders:
_set_border(sb, color_extra_border_dimmed, 1) _set_border(sb, extra_border_color_2, 1)
set_stylebox('bg', 'EditorInspectorCategory', sb) set_stylebox('bg', 'EditorInspectorCategory', sb)
set_constant('h_separation', 'EditorInspectorSection', int(base_margin * scale)) set_constant('h_separation', 'EditorInspectorSection', int(base_margin * scale))
@ -364,7 +324,7 @@ func _init() -> void:
# EditorProperty # EditorProperty
set_color('property_color', 'EditorProperty', color_font_normal) set_color('property_color', 'EditorProperty', mono_color_icon_and_font * Color(1, 1, 1, 0.6))
set_color('warning_color', 'EditorProperty', get_color('warning_color', 'Editor')) set_color('warning_color', 'EditorProperty', get_color('warning_color', 'Editor'))
set_stylebox('bg', 'EditorProperty', base_empty_sb) set_stylebox('bg', 'EditorProperty', base_empty_sb)
@ -373,35 +333,27 @@ func _init() -> void:
# bindings editor relies on it for property removal # bindings editor relies on it for property removal
sb = base_sb.duplicate() sb = base_sb.duplicate()
# Transparent background to make sure it blends with subresource editors # Transparent background to make sure it blends with subresource editors
sb.bg_color = color_mono * Color(1, 1, 1, 0.03) sb.bg_color = mono_color * Color(1, 1, 1, 0.03)
set_stylebox('bg_selected', 'EditorProperty', sb) set_stylebox('bg_selected', 'EditorProperty', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_lower sb.bg_color = _get_base_color(-0.8) # Same as LineEdit normal
sb.set_content_margin_all(base_margin * scale) sb.set_content_margin_all(base_margin * scale)
set_stylebox('child_bg', 'EditorProperty', sb) set_stylebox('child_bg', 'EditorProperty', sb)
# EditorSpinSlider # EditorSpinSlider
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_lower sb.bg_color = _get_base_color(-0.8)
sb.set_content_margin_all(base_margin * scale) sb.set_content_margin_all(base_margin * scale)
set_stylebox('label_bg', 'EditorSpinSlider', sb) set_stylebox('label_bg', 'EditorSpinSlider', sb)
# EditorNode
sb = base_sb.duplicate()
sb.set_content_margin_all(0)
sb.set_corner_radius_all(0)
sb.bg_color = color_surface_lowest
set_stylebox('Background', 'EditorStyles', sb)
# Viewport # Viewport
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.draw_center = false sb.draw_center = false
sb.set_corner_radius_all(0) sb.set_corner_radius_all(0)
_set_border(sb, color_mono * Color(1, 1, 1, 0.07), 2, false) _set_border(sb, mono_color * Color(1, 1, 1, 0.07), 2, false)
set_stylebox('FocusViewport', 'EditorStyles', sb) set_stylebox('FocusViewport', 'EditorStyles', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
@ -412,15 +364,17 @@ func _init() -> void:
# Contextual Toolbar # Contextual Toolbar
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_higher sb.bg_color = _get_base_color(0.25)
sb.set_content_margin_all(0) sb.set_content_margin_all(0)
set_stylebox('ContextualToolbar', 'EditorStyles', sb) set_stylebox('ContextualToolbar', 'EditorStyles', sb)
# LaunchPad # LaunchPad
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = accent_color * Color(1, 1, 1, 0.2) sb.bg_color = _get_base_color(-0.5)
_set_border(sb, accent_color * Color(1, 1, 1, 0.8), 2) _set_margin(sb, base_margin * 1.5, base_margin, base_margin * 1.5, base_margin)
sb.set_expand_margin_all(scale)
sb.set_border_width_all(0)
set_stylebox('LaunchPadMovieMode', 'EditorStyles', sb) set_stylebox('LaunchPadMovieMode', 'EditorStyles', sb)
sb = sb.duplicate() sb = sb.duplicate()
@ -429,25 +383,20 @@ func _init() -> void:
set_stylebox('LaunchPadNormal', 'EditorStyles', sb) set_stylebox('LaunchPadNormal', 'EditorStyles', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = accent_color * Color(1, 1, 1, 0.8) sb.bg_color = _get_base_color(0.5)
sb.set_content_margin_all(0) sb.set_content_margin_all(0)
set_stylebox('MovieWriterButtonPressed', 'EditorStyles', sb) set_stylebox('MovieWriterButtonPressed', 'EditorStyles', sb)
sb = base_sb.duplicate()
sb.bg_color = color_mono * Color(1, 1, 1, 0.1)
sb.set_content_margin_all(0)
set_stylebox('hover', 'RunBarButton', sb)
# Godot 4.5: # Godot 4.5:
set_color('icon_normal_color', 'RunBarButtonMovieMakerDisabled', color_font_normal) set_color('icon_normal_color', 'RunBarButtonMovieMakerDisabled', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('icon_pressed_color', 'RunBarButtonMovieMakerDisabled', color_font_highlighted) set_color('icon_pressed_color', 'RunBarButtonMovieMakerDisabled', mono_color_icon_and_font)
set_color('icon_hover_color', 'RunBarButtonMovieMakerDisabled', color_font_highlighted) set_color('icon_hover_color', 'RunBarButtonMovieMakerDisabled', mono_color_icon_and_font)
set_color('icon_hover_pressed_color', 'RunBarButtonMovieMakerDisabled', color_font_highlighted) set_color('icon_hover_pressed_color', 'RunBarButtonMovieMakerDisabled', mono_color_icon_and_font)
set_color('icon_normal_color', 'RunBarButtonMovieMakerEnabled', color_font_normal) set_color('icon_normal_color', 'RunBarButtonMovieMakerEnabled', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('icon_pressed_color', 'RunBarButtonMovieMakerEnabled', color_font_highlighted) set_color('icon_pressed_color', 'RunBarButtonMovieMakerEnabled', mono_color_icon_and_font)
set_color('icon_hover_color', 'RunBarButtonMovieMakerEnabled', color_font_highlighted) set_color('icon_hover_color', 'RunBarButtonMovieMakerEnabled', mono_color_icon_and_font)
set_color('icon_hover_pressed_color', 'RunBarButtonMovieMakerEnabled', color_font_highlighted) set_color('icon_hover_pressed_color', 'RunBarButtonMovieMakerEnabled', mono_color_icon_and_font)
# Godot 4.4 and earlier: # Godot 4.4 and earlier:
set_color('movie_writer_icon_hover', 'EditorStyles', Color(1, 1, 1, 0.8)) set_color('movie_writer_icon_hover', 'EditorStyles', Color(1, 1, 1, 0.8))
@ -458,24 +407,20 @@ func _init() -> void:
# EditorValidationPanel # EditorValidationPanel
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_low sb.bg_color = _get_base_color(-0.5)
_set_margin(sb, base_margin, base_margin * 0.5, base_margin, base_margin * 0.5) _set_margin(sb, base_margin, base_margin * 0.5, base_margin, base_margin * 0.5)
set_stylebox('panel', 'EditorValidationPanel', sb) set_stylebox('panel', 'EditorValidationPanel', sb)
# FlatButton # FlatButton
set_color('font_color', 'FlatButton', color_font_normal) set_color('font_color', 'FlatButton', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('font_disabled_color', 'FlatButton', color_font_dimmed) set_color('font_disabled_color', 'FlatButton', mono_color_icon_and_font * Color(1, 1, 1, 0.3))
set_color('font_focus_color', 'FlatButton', color_font_highlighted) set_color('font_focus_color', 'FlatButton', mono_color_icon_and_font)
set_color('font_hover_color', 'FlatButton', color_font_highlighted) set_color('font_hover_color', 'FlatButton', mono_color_icon_and_font)
set_color('font_hover_pressed_color', 'FlatButton', color_font_highlighted) set_color('font_hover_pressed_color', 'FlatButton', mono_color_icon_and_font)
set_color('font_pressed_color', 'FlatButton', color_font_highlighted) set_color('font_pressed_color', 'FlatButton', mono_color_icon_and_font)
set_color('icon_disabled_color', 'FlatButton', color_icon_disabled) set_color('icon_disabled_color', 'FlatButton', mono_color_icon_and_font * Color(1, 1, 1, 0.3))
set_color('icon_focus_color', 'FlatButton', color_icon_focus) set_color('icon_normal_color', 'FlatButton', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('icon_hover_color', 'FlatButton', color_icon_hover)
set_color('icon_hover_pressed_color', 'FlatButton', color_icon_hover)
set_color('icon_normal_color', 'FlatButton', color_icon_normal)
set_color('icon_pressed_color', 'FlatButton', color_icon_pressed)
set_stylebox('disabled', 'FlatButton', base_empty_wide_sb) set_stylebox('disabled', 'FlatButton', base_empty_wide_sb)
set_stylebox('disabled_mirrored', 'FlatButton', base_empty_wide_sb) set_stylebox('disabled_mirrored', 'FlatButton', base_empty_wide_sb)
@ -490,19 +435,19 @@ func _init() -> void:
# FlatMenuButton # FlatMenuButton
set_color('font_color', 'FlatMenuButton', color_font_normal) set_color('font_color', 'FlatMenuButton', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('font_disabled_color', 'FlatMenuButton', color_font_dimmed) set_color('font_disabled_color', 'FlatMenuButton', mono_color_icon_and_font * Color(1, 1, 1, 0.3))
set_color('font_focus_color', 'FlatMenuButton', color_font_highlighted) set_color('font_focus_color', 'FlatMenuButton', mono_color_icon_and_font)
set_color('font_hover_color', 'FlatMenuButton', color_font_highlighted) set_color('font_hover_color', 'FlatMenuButton', mono_color_icon_and_font)
set_color('font_hover_pressed_color', 'FlatMenuButton', color_font_highlighted) set_color('font_hover_pressed_color', 'FlatMenuButton', mono_color_icon_and_font)
set_color('font_pressed_color', 'FlatMenuButton', color_font_highlighted) set_color('font_pressed_color', 'FlatMenuButton', mono_color_icon_and_font)
set_color('icon_disabled_color', 'FlatMenuButton', color_icon_disabled) set_color('icon_normal_color', 'FlatMenuButton', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('icon_focus_color', 'FlatMenuButton', color_icon_focus) set_color('icon_disabled_color', 'FlatMenuButton', mono_color_icon_and_font * Color(1, 1, 1, 0.3))
set_color('icon_hover_color', 'FlatMenuButton', color_icon_hover) set_color('icon_focus_color', 'FlatMenuButton', mono_color_icon_and_font)
set_color('icon_hover_pressed_color', 'FlatMenuButton', color_icon_hover) set_color('icon_hover_color', 'FlatMenuButton', mono_color_icon_and_font)
set_color('icon_normal_color', 'FlatMenuButton', color_icon_normal) set_color('icon_hover_pressed_color', 'FlatMenuButton', mono_color_icon_and_font)
set_color('icon_pressed_color', 'FlatMenuButton', color_icon_pressed) set_color('icon_pressed_color', 'FlatMenuButton', mono_color_icon_and_font)
set_stylebox('disabled', 'FlatMenuButton', base_empty_wide_sb) set_stylebox('disabled', 'FlatMenuButton', base_empty_wide_sb)
set_stylebox('disabled_mirrored', 'FlatMenuButton', base_empty_wide_sb) set_stylebox('disabled_mirrored', 'FlatMenuButton', base_empty_wide_sb)
@ -520,7 +465,7 @@ func _init() -> void:
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.draw_center = false sb.draw_center = false
_set_border(sb, color_mono * Color(1, 1, 1, 0.3), 1) _set_border(sb, mono_color * Color(1, 1, 1, 0.3), 1)
set_stylebox('sample_focus', 'ColorPicker', sb) set_stylebox('sample_focus', 'ColorPicker', sb)
set_stylebox('picker_focus_rectangle', 'ColorPicker', sb) set_stylebox('picker_focus_rectangle', 'ColorPicker', sb)
@ -535,7 +480,7 @@ func _init() -> void:
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.draw_center = false sb.draw_center = false
_set_border(sb, color_mono * Color(1, 1, 1, 0.07), 2) _set_border(sb, mono_color * Color(1, 1, 1, 0.07), 2)
set_stylebox('panel_focus', 'GraphEdit', sb) set_stylebox('panel_focus', 'GraphEdit', sb)
# GraphStateMachine # GraphStateMachine
@ -575,7 +520,7 @@ func _init() -> void:
set_constant('v_separation', 'ItemList', int(base_margin * 1.5 * scale)) set_constant('v_separation', 'ItemList', int(base_margin * 1.5 * scale))
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_mono * Color(1, 1, 1, 0.04) sb.bg_color = mono_color * Color(1, 1, 1, 0.04)
set_stylebox('cursor', 'ItemList', sb) set_stylebox('cursor', 'ItemList', sb)
set_stylebox('cursor_unfocused', 'ItemList', sb) set_stylebox('cursor_unfocused', 'ItemList', sb)
set_stylebox('focus', 'ItemList', base_empty_sb) set_stylebox('focus', 'ItemList', base_empty_sb)
@ -592,7 +537,7 @@ func _init() -> void:
# Label # Label
set_color('font_color', 'Label', color_font_normal) set_color('font_color', 'Label', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
empty_sb = base_empty_sb.duplicate() empty_sb = base_empty_sb.duplicate()
# Keeping vertical margin low otherwise quick open looks bad # Keeping vertical margin low otherwise quick open looks bad
@ -601,18 +546,18 @@ func _init() -> void:
# LineEdit and TextEdit # LineEdit and TextEdit
set_color('font_placeholder_color', 'LineEdit', color_font_dimmed) set_color('font_placeholder_color', 'LineEdit', mono_color_icon_and_font * Color(1, 1, 1, 0.4))
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_lowest sb.bg_color = _get_base_color(-1.3 if dark_theme else -2.2)
if draw_extra_borders: if draw_extra_borders:
_set_border(sb, color_extra_border, 1) _set_border(sb, extra_border_color_1, 1)
_set_margin(sb, base_margin * 2, base_margin * 0.75, base_margin * 2, base_margin * 0.75) _set_margin(sb, base_margin * 2, base_margin * 0.75, base_margin * 2, base_margin * 0.75)
set_stylebox('focus', 'LineEdit', sb) set_stylebox('focus', 'LineEdit', sb)
set_stylebox('focus', 'TextEdit', sb) set_stylebox('focus', 'TextEdit', sb)
sb = sb.duplicate() sb = sb.duplicate()
sb.bg_color = color_surface_lower sb.bg_color = _get_base_color(-0.9 if dark_theme else -1.8)
set_stylebox('normal', 'LineEdit', sb) set_stylebox('normal', 'LineEdit', sb)
set_stylebox('normal', 'TextEdit', sb) set_stylebox('normal', 'TextEdit', sb)
@ -642,19 +587,19 @@ func _init() -> void:
# MenuButton # MenuButton
set_color('font_color', 'MenuButton', color_font_normal) set_color('font_color', 'MenuButton', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('font_disabled_color', 'MenuButton', color_font_dimmed) set_color('font_disabled_color', 'MenuButton', mono_color_icon_and_font * Color(1, 1, 1, 0.3))
set_color('font_focus_color', 'MenuButton', color_font_highlighted) set_color('font_focus_color', 'MenuButton', mono_color_icon_and_font)
set_color('font_hover_color', 'MenuButton', color_font_highlighted) set_color('font_hover_color', 'MenuButton', mono_color_icon_and_font)
set_color('font_hover_pressed_color', 'MenuButton', color_font_highlighted) set_color('font_hover_pressed_color', 'MenuButton', mono_color_icon_and_font)
set_color('font_pressed_color', 'MenuButton', color_font_highlighted) set_color('font_pressed_color', 'MenuButton', mono_color_icon_and_font)
set_color('icon_disabled_color', 'MenuButton', color_icon_disabled) set_color('icon_normal_color', 'MenuButton', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('icon_focus_color', 'MenuButton', color_icon_focus) set_color('icon_disabled_color', 'MenuButton', mono_color_icon_and_font * Color(1, 1, 1, 0.3))
set_color('icon_hover_color', 'MenuButton', color_icon_hover) set_color('icon_focus_color', 'MenuButton', mono_color_icon_and_font)
set_color('icon_hover_pressed_color', 'MenuButton', color_icon_hover) set_color('icon_hover_color', 'MenuButton', mono_color_icon_and_font)
set_color('icon_normal_color', 'MenuButton', color_icon_normal) set_color('icon_hover_pressed_color', 'MenuButton', mono_color_icon_and_font)
set_color('icon_pressed_color', 'MenuButton', color_icon_pressed) set_color('icon_pressed_color', 'MenuButton', mono_color_icon_and_font)
set_stylebox('disabled', 'MenuButton', base_empty_wide_sb) set_stylebox('disabled', 'MenuButton', base_empty_wide_sb)
set_stylebox('disabled_mirrored', 'MenuButton', base_empty_wide_sb) set_stylebox('disabled_mirrored', 'MenuButton', base_empty_wide_sb)
@ -672,18 +617,14 @@ func _init() -> void:
set_constant('arrow_margin', 'OptionButton', int(base_margin * 2 * scale)) set_constant('arrow_margin', 'OptionButton', int(base_margin * 2 * scale))
set_color('font_color', 'OptionButton', color_font_normal) set_color('font_color', 'OptionButton', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('font_disabled_color', 'OptionButton', color_font_dimmed) set_color('font_disabled_color', 'OptionButton', mono_color_icon_and_font * Color(1, 1, 1, 0.3))
set_color('font_focus_color', 'OptionButton', color_font_highlighted) set_color('font_focus_color', 'OptionButton', mono_color_icon_and_font)
set_color('font_hover_color', 'OptionButton', color_font_highlighted) set_color('font_hover_color', 'OptionButton', mono_color_icon_and_font)
set_color('font_hover_pressed_color', 'OptionButton', color_font_highlighted) set_color('font_hover_pressed_color', 'OptionButton', mono_color_icon_and_font)
set_color('font_pressed_color', 'OptionButton', color_font_highlighted) set_color('font_pressed_color', 'OptionButton', mono_color_icon_and_font)
set_color('icon_disabled_color', 'OptionButton', color_icon_disabled) set_color('icon_disabled_color', 'OptionButton', mono_color_icon_and_font * Color(1, 1, 1, 0.3))
set_color('icon_focus_color', 'OptionButton', color_icon_focus) set_color('icon_normal_color', 'OptionButton', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('icon_hover_color', 'OptionButton', color_icon_hover)
set_color('icon_hover_pressed_color', 'OptionButton', color_icon_hover)
set_color('icon_normal_color', 'OptionButton', color_icon_normal)
set_color('icon_pressed_color', 'OptionButton', color_icon_pressed)
set_stylebox('disabled', 'OptionButton', button_disabled_sb) set_stylebox('disabled', 'OptionButton', button_disabled_sb)
set_stylebox('disabled_mirrored', 'OptionButton', button_disabled_sb) set_stylebox('disabled_mirrored', 'OptionButton', button_disabled_sb)
@ -706,17 +647,17 @@ func _init() -> void:
set_stylebox('hover', 'PopupMenu', flat_button_hover_sb) set_stylebox('hover', 'PopupMenu', flat_button_hover_sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_lower sb.bg_color = _get_base_color(-0.8, 0.9)
sb.set_content_margin_all(int(popup_margin * scale)) sb.set_content_margin_all(int(popup_margin * scale))
sb.set_corner_radius_all(0) sb.set_corner_radius_all(0)
if draw_extra_borders: if draw_extra_borders:
_set_border(sb, color_extra_border_dimmed, 1) _set_border(sb, extra_border_color_2, 1)
set_stylebox('panel', 'PopupMenu', sb) set_stylebox('panel', 'PopupMenu', sb)
var line_sb : StyleBoxLine = StyleBoxLine.new() var line_sb : StyleBoxLine = StyleBoxLine.new()
line_sb.color = color_mono * Color(1, 1, 1, 0.075 if dark_theme else 0.125) line_sb.color = Color(0, 0, 0, 0.2)
line_sb.grow_begin = base_margin * -2.0 * scale line_sb.grow_begin = base_margin * -1.5 * scale
line_sb.grow_end = base_margin * -2.0 * scale line_sb.grow_end = base_margin * -1.5 * scale
line_sb.thickness = int(ceilf(scale * 2)) line_sb.thickness = int(ceilf(scale * 2))
set_stylebox('labeled_separator_left', 'PopupMenu', line_sb) set_stylebox('labeled_separator_left', 'PopupMenu', line_sb)
set_stylebox('labeled_separator_right', 'PopupMenu', line_sb) set_stylebox('labeled_separator_right', 'PopupMenu', line_sb)
@ -725,21 +666,21 @@ func _init() -> void:
set_stylebox('panel', 'PanelContainer', base_empty_wide_sb) set_stylebox('panel', 'PanelContainer', base_empty_wide_sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_lower sb.bg_color = _get_base_color(-0.8, 0.9)
sb.shadow_color = Color(0, 0, 0, 0.3) sb.shadow_color = Color(0, 0, 0, 0.3)
sb.shadow_size = int(base_margin * 0.75 * scale) sb.shadow_size = int(base_margin * 0.75 * scale)
sb.set_content_margin_all(int(popup_margin * scale)) sb.set_content_margin_all(int(popup_margin * scale))
sb.set_corner_radius_all(0) sb.set_corner_radius_all(0)
if draw_extra_borders: if draw_extra_borders:
_set_border(sb, color_extra_border_dimmed, 1) _set_border(sb, extra_border_color_2, 1)
set_stylebox('panel', 'PopupPanel', sb) set_stylebox('panel', 'PopupPanel', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_lower sb.bg_color = _get_base_color(-0.8, 0.9)
sb.set_content_margin_all(0) sb.set_content_margin_all(0)
sb.set_corner_radius_all(0) sb.set_corner_radius_all(0)
if draw_extra_borders: if draw_extra_borders:
_set_border(sb, color_extra_border_dimmed, 1) _set_border(sb, extra_border_color_2, 1)
set_stylebox('panel', 'TooltipPanel', sb) set_stylebox('panel', 'TooltipPanel', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
@ -749,7 +690,7 @@ func _init() -> void:
set_stylebox('panel', 'AcceptDialog', sb) set_stylebox('panel', 'AcceptDialog', sb)
sb = sb.duplicate() sb = sb.duplicate()
sb.bg_color = color_surface_lowest sb.bg_color = _get_base_color(-1.4)
set_stylebox('panel', 'EditorSettingsDialog', sb) set_stylebox('panel', 'EditorSettingsDialog', sb)
set_stylebox('panel', 'ProjectSettingsEditor', sb) set_stylebox('panel', 'ProjectSettingsEditor', sb)
set_stylebox('panel', 'ProjectExportDialog', sb) set_stylebox('panel', 'ProjectExportDialog', sb)
@ -760,24 +701,24 @@ func _init() -> void:
# ProgressBar # ProgressBar
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_lowest sb.bg_color = _get_base_color(-1.3, 0.9)
sb.expand_margin_top = base_margin * 0.5 * scale sb.expand_margin_top = base_margin * 0.5 * scale
sb.expand_margin_bottom = base_margin * 0.5 * scale sb.expand_margin_bottom = base_margin * 0.5 * scale
sb.set_content_margin_all(base_margin * scale) sb.set_content_margin_all(base_margin * scale)
if draw_extra_borders: if draw_extra_borders:
_set_border(sb, color_extra_border_dimmed, 1) _set_border(sb, extra_border_color_2, 1)
set_stylebox('background', 'ProgressBar', sb) set_stylebox('background', 'ProgressBar', sb)
sb = sb.duplicate() sb = sb.duplicate()
sb.bg_color = color_button_normal sb.bg_color = _get_base_color(0.4, 0.8)
if draw_extra_borders: if draw_extra_borders:
_set_border(sb, color_extra_border, 1) _set_border(sb, extra_border_color_1, 1)
set_stylebox('fill', 'ProgressBar', sb) set_stylebox('fill', 'ProgressBar', sb)
# RichTextLabel # RichTextLabel
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_low sb.bg_color = _get_base_color(-0.5)
sb.set_content_margin_all(base_margin * 2 * scale) sb.set_content_margin_all(base_margin * 2 * scale)
set_stylebox('normal', 'RichTextLabel', sb) set_stylebox('normal', 'RichTextLabel', sb)
@ -790,14 +731,14 @@ func _init() -> void:
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = _get_base_color(0.5, 0.6) sb.bg_color = _get_base_color(0.5, 0.6)
_set_border(sb, base_color * Color(1, 1, 1, 0), 3) _set_border(sb, _get_base_color() * Color(1, 1, 1, 0), 3)
set_stylebox('grabber', 'HScrollBar', sb) set_stylebox('grabber', 'HScrollBar', sb)
set_stylebox('grabber', 'VScrollBar', sb) set_stylebox('grabber', 'VScrollBar', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = _get_base_color(1.4, 0.5) sb.bg_color = _get_base_color(1.4, 0.5)
_set_border(sb, base_color * Color(1, 1, 1, 0), 2.5) _set_border(sb, _get_base_color() * Color(1, 1, 1, 0), 2.5)
set_stylebox('grabber_highlight', 'HScrollBar', sb) set_stylebox('grabber_highlight', 'HScrollBar', sb)
set_stylebox('grabber_highlight', 'VScrollBar', sb) set_stylebox('grabber_highlight', 'VScrollBar', sb)
@ -825,57 +766,34 @@ func _init() -> void:
# TabContainer # TabContainer
set_color('font_selected_color', 'TabBar', color_font_normal)
set_color('font_selected_color', 'TabContainer', color_font_normal)
set_color('font_hovered_color', 'TabBar', color_font_highlighted)
set_color('font_hovered_color', 'TabContainer', color_font_highlighted)
set_color('font_unselected_color', 'TabBar', color_font_secondary)
set_color('font_unselected_color', 'TabContainer', color_font_secondary)
set_color('font_disabled_color', 'TabBar', color_font_dimmed * Color(1, 1, 1, 0.55))
set_color('font_disabled_color', 'TabContainer', color_font_dimmed * Color(1, 1, 1, 0.55))
set_color('icon_selected_color', 'TabBar', color_font_normal)
set_color('icon_selected_color', 'TabContainer', color_font_normal)
set_color('icon_hovered_color', 'TabBar', color_font_highlighted)
set_color('icon_hovered_color', 'TabContainer', color_font_highlighted)
set_color('icon_unselected_color', 'TabBar', color_font_secondary)
set_color('icon_unselected_color', 'TabContainer', color_font_secondary)
set_color('icon_disabled_color', 'TabBar', color_font_dimmed * Color(1, 1, 1, 0.55))
set_color('icon_disabled_color', 'TabContainer', color_font_dimmed * Color(1, 1, 1, 0.55))
sb = base_sb.duplicate() sb = base_sb.duplicate()
_set_margin(sb, base_margin * 4, base_margin * 2.1, base_margin * 4, base_margin * 2.1) _set_margin(sb, base_margin * 4, base_margin * 2.3, base_margin * 4, base_margin * 2.3)
sb.set_corner_radius_all(0) sb.set_corner_radius_all(0)
sb.corner_radius_top_left = int(corner_radius * scale) sb.corner_radius_top_left = int(corner_radius * scale)
sb.corner_radius_top_right = int(corner_radius * scale) sb.corner_radius_top_right = int(corner_radius * scale)
set_stylebox('tab_selected', 'TabBar', sb) set_stylebox('tab_selected', 'TabBar', sb)
set_stylebox('tab_selected', 'TabContainer', sb) set_stylebox('tab_selected', 'TabContainer', sb)
set_stylebox('ThemeEditorPreviewFG', 'EditorStyles', sb)
sb = sb.duplicate() sb = sb.duplicate()
sb.bg_color = color_surface_base sb.bg_color = _get_base_color(-0.35)
set_stylebox('tab_selected', 'TabContainerOdd', sb) set_stylebox('tab_selected', 'TabContainerOdd', sb)
set_stylebox('tab_focus', 'TabBar', base_empty_sb) sb = sb.duplicate()
set_stylebox('tab_focus', 'TabContainer', base_empty_sb) sb.bg_color = base_color
set_stylebox('tab_focus', 'TabContainerOdd', base_empty_sb) sb.border_color = accent_color
set_stylebox('tab_focus', 'TabBar', sb)
set_stylebox('tab_focus', 'TabContainer', sb)
sb = sb.duplicate() sb = sb.duplicate()
sb.bg_color = color_surface_lowest sb.bg_color = Color.TRANSPARENT
sb.set_border_width_all(0) sb.set_border_width_all(0)
set_stylebox('tab_unselected', 'TabBar', sb) set_stylebox('tab_unselected', 'TabBar', sb)
set_stylebox('tab_unselected', 'TabContainer', sb) set_stylebox('tab_unselected', 'TabContainer', sb)
set_stylebox('tab_unselected', 'TabContainerOdd', sb)
set_stylebox('ThemeEditorPreviewBG', 'EditorStyles', sb)
set_stylebox('tab_disabled', 'TabBar', sb)
set_stylebox('tab_disabled', 'TabContainer', sb)
set_stylebox('tab_disabled', 'TabContainerOdd', sb)
sb = sb.duplicate() sb = sb.duplicate()
sb.bg_color = color_surface_base * Color(1, 1, 1, 0.8) sb.bg_color = _get_base_color(-0.4)
set_stylebox('tab_hovered', 'TabBar', sb) set_stylebox('tab_hovered', 'TabBar', sb)
set_stylebox('tab_hovered', 'TabContainer', sb) set_stylebox('tab_hovered', 'TabContainer', sb)
set_stylebox('tab_hovered', 'TabContainerOdd', sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.set_content_margin_all(increased_margin * 1.5 * scale) sb.set_content_margin_all(increased_margin * 1.5 * scale)
@ -884,24 +802,16 @@ func _init() -> void:
sb.corner_radius_bottom_left = int(corner_radius * scale) sb.corner_radius_bottom_left = int(corner_radius * scale)
set_stylebox('panel', 'TabContainer', sb) set_stylebox('panel', 'TabContainer', sb)
sb = sb.duplicate() sb = empty_sb.duplicate()
sb.bg_color = color_surface_base _set_margin(sb, 0, 0, base_margin * 2, 0)
set_stylebox('panel', 'TabContainerOdd', sb)
sb = base_sb.duplicate()
sb.bg_color = color_surface_lowest
sb.corner_radius_bottom_left = 0
sb.corner_radius_bottom_right = 0
_set_margin(sb, 0, base_margin * 0.25, base_margin, 0)
set_stylebox('tabbar_background', 'TabContainer', sb) set_stylebox('tabbar_background', 'TabContainer', sb)
set_stylebox('tabbar_background', 'TabContainerOdd', sb)
# Tree # Tree
set_color('drop_position_color', 'Tree', color_font_dimmed) set_color('drop_position_color', 'Tree', mono_color * Color(1, 1, 1, 0.4))
set_color('font_color', 'Tree', color_font_normal) set_color('font_color', 'Tree', mono_color_icon_and_font * Color(1, 1, 1, 0.7))
set_color('guide_color', 'Tree', Color.TRANSPARENT) set_color('guide_color', 'Tree', Color.TRANSPARENT)
set_color('parent_hl_line_color', 'Tree', color_mono * Color(1, 1, 1, relationship_line_opacity)) set_color('parent_hl_line_color', 'Tree', mono_color * Color(1, 1, 1, relationship_line_opacity))
set_constant('children_hl_line_width', 'Tree', 0) set_constant('children_hl_line_width', 'Tree', 0)
set_constant('draw_guides', 'Tree', 0) set_constant('draw_guides', 'Tree', 0)
set_constant('draw_relationship_lines', 'Tree', 1) set_constant('draw_relationship_lines', 'Tree', 1)
@ -926,7 +836,7 @@ func _init() -> void:
set_stylebox('focus', 'Tree', base_empty_sb) set_stylebox('focus', 'Tree', base_empty_sb)
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_lowest sb.bg_color = _get_base_color(-1.2 if dark_theme else -1.8)
# Using a transparent border to separate rounded column titles # Using a transparent border to separate rounded column titles
sb.border_width_left = int(ceilf(scale)) sb.border_width_left = int(ceilf(scale))
@ -939,7 +849,7 @@ func _init() -> void:
sb = flat_button_hover_sb.duplicate() sb = flat_button_hover_sb.duplicate()
sb.set_content_margin_all(0) sb.set_content_margin_all(0)
sb.bg_color = color_button_disabled sb.bg_color = _get_base_color(0.2, 0.7)
set_stylebox('button_hover', 'Tree', sb) set_stylebox('button_hover', 'Tree', sb)
set_stylebox('hover', 'Tree', sb) set_stylebox('hover', 'Tree', sb)
set_stylebox('hovered_dimmed', 'Tree', sb) set_stylebox('hovered_dimmed', 'Tree', sb)
@ -949,25 +859,23 @@ func _init() -> void:
set_stylebox('selected_focus', 'Tree', sb) set_stylebox('selected_focus', 'Tree', sb)
sb = sb.duplicate() sb = sb.duplicate()
sb.bg_color = color_button_normal sb.bg_color = _get_base_color(0.3, 0.7)
set_stylebox('hovered_selected', 'Tree', sb) set_stylebox('hovered_selected', 'Tree', sb)
set_stylebox('hovered_selected_focus', 'Tree', sb) set_stylebox('hovered_selected_focus', 'Tree', sb)
sb = flat_button_pressed_sb.duplicate() set_stylebox('button_pressed', 'Tree', flat_button_pressed_sb)
_set_margin(sb, base_margin, 0, base_margin, 0) set_stylebox('custom_button_pressed', 'Tree', flat_button_pressed_sb)
set_stylebox('button_pressed', 'Tree', sb)
set_stylebox('custom_button_pressed', 'Tree', sb)
# Cursor is drawn on top of the item so it needs to be transparent # Cursor is drawn on top of the item so it needs to be transparent
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_mono * Color(1, 1, 1, 0.04) sb.bg_color = mono_color * Color(1, 1, 1, 0.04)
set_stylebox('cursor', 'Tree', sb) set_stylebox('cursor', 'Tree', sb)
set_stylebox('cursor_unfocused', 'Tree', sb) set_stylebox('cursor_unfocused', 'Tree', sb)
# Separators # Separators
line_sb = StyleBoxLine.new() line_sb = StyleBoxLine.new()
line_sb.color = Color(0, 0, 0, 0.4) if dark_theme else Color(0, 0, 0, 0.2) line_sb.color = Color(0, 0, 0, 0.3) if dark_theme else Color(0, 0, 0, 0.1)
line_sb.grow_begin = base_margin * -1 * scale line_sb.grow_begin = base_margin * -1 * scale
line_sb.grow_end = base_margin * -1 * scale line_sb.grow_end = base_margin * -1 * scale
line_sb.thickness = int(ceilf(scale * 2)) line_sb.thickness = int(ceilf(scale * 2))
@ -983,7 +891,7 @@ func _init() -> void:
# Sliders # Sliders
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_mono_inv * Color(1, 1, 1, 0.35) sb.bg_color = mono_color_inv * Color(1, 1, 1, 0.35)
_set_margin(sb, 0, 2, 0, 2) _set_margin(sb, 0, 2, 0, 2)
set_stylebox('slider', 'HSlider', sb) set_stylebox('slider', 'HSlider', sb)
sb = sb.duplicate() sb = sb.duplicate()
@ -993,9 +901,9 @@ func _init() -> void:
# Sidebars # Sidebars
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_low sb.bg_color = _get_base_color(-0.55 if dark_theme else -0.9)
if draw_extra_borders: if draw_extra_borders:
_set_border(sb, color_extra_border_dimmed, 1) _set_border(sb, extra_border_color_2, 1)
set_stylebox('panel', 'TreeSecondary', sb) set_stylebox('panel', 'TreeSecondary', sb)
set_stylebox('panel', 'ItemListSecondary', sb) set_stylebox('panel', 'ItemListSecondary', sb)
# Use sidebar stylebox for EditorDebuggerInspector in StackTrace # Use sidebar stylebox for EditorDebuggerInspector in StackTrace
@ -1006,16 +914,9 @@ func _init() -> void:
# ProjectManager # ProjectManager
sb = base_sb.duplicate() sb = base_sb.duplicate()
sb.bg_color = color_surface_low sb.bg_color = _get_base_color(-0.7 if dark_theme else -0.9)
set_stylebox('project_list', 'ProjectManager', sb) set_stylebox('project_list', 'ProjectManager', sb)
# Asset Library
sb = base_sb.duplicate()
sb.set_content_margin_all(base_margin * 2 * scale)
sb.bg_color = color_surface_low
set_stylebox('panel', 'AssetLib', sb)
# HACKS # HACKS
# This section is for workarounds for unthemable UI # This section is for workarounds for unthemable UI
# These could be fixed on the engine side in the future # These could be fixed on the engine side in the future
@ -1035,7 +936,7 @@ func _init() -> void:
var quick_settings_dialog : AcceptDialog = root.find_children('', 'QuickSettingsDialog', true, false)[0] var quick_settings_dialog : AcceptDialog = root.find_children('', 'QuickSettingsDialog', true, false)[0]
var quick_settings_dialog_list_panel : PanelContainer = quick_settings_dialog.find_children('', 'PanelContainer', true, false)[0] var quick_settings_dialog_list_panel : PanelContainer = quick_settings_dialog.find_children('', 'PanelContainer', true, false)[0]
var panel_sb_quick_settings : StyleBoxFlat = base_sb.duplicate() var panel_sb_quick_settings : StyleBoxFlat = base_sb.duplicate()
panel_sb_quick_settings.bg_color = color_surface_low panel_sb_quick_settings.bg_color = _get_base_color(-0.7 if dark_theme else -0.9)
quick_settings_dialog_list_panel.add_theme_stylebox_override('panel', panel_sb_quick_settings) quick_settings_dialog_list_panel.add_theme_stylebox_override('panel', panel_sb_quick_settings)
var _error_quick_settings : int = quick_settings_dialog.theme_changed.connect(func() -> void: var _error_quick_settings : int = quick_settings_dialog.theme_changed.connect(func() -> void:
# Reapply the stylebox override on theme change # Reapply the stylebox override on theme change
@ -1090,6 +991,24 @@ func _init() -> void:
var game_view_toolbar_margin_container : Control = game_view.find_children('', 'MarginContainer', true, false)[0] var game_view_toolbar_margin_container : Control = game_view.find_children('', 'MarginContainer', true, false)[0]
game_view_toolbar_margin_container.add_theme_constant_override('margin_top', int(base_margin * 0.5 * scale)) game_view_toolbar_margin_container.add_theme_constant_override('margin_top', int(base_margin * 0.5 * scale))
game_view_toolbar_margin_container.add_theme_constant_override('margin_bottom', int(base_margin * 0.5 * scale)) game_view_toolbar_margin_container.add_theme_constant_override('margin_bottom', int(base_margin * 0.5 * scale))
# ThemeTypeEditor TabContainer
# Tabs of ThemeTypeEditor need to be custom because of lighter background of
# the bottom panel
var theme_type_editor : Control = EditorInterface.get_base_control().find_children('', 'ThemeTypeEditor', true, false)[0]
var theme_type_editor_tab_container : TabContainer = theme_type_editor.find_children('', 'TabContainer', true, false)[0]
var theme_type_editor_tab_container_sb : StyleBoxFlat = base_sb.duplicate()
theme_type_editor_tab_container_sb.bg_color = _get_base_color(-1.1)
theme_type_editor_tab_container_sb.set_content_margin_all(0)
theme_type_editor_tab_container_sb.content_margin_top = int(base_margin * scale)
theme_type_editor_tab_container_sb.corner_radius_bottom_left = 0
theme_type_editor_tab_container_sb.corner_radius_bottom_right = 0
theme_type_editor_tab_container.add_theme_stylebox_override('tabbar_background', theme_type_editor_tab_container_sb)
).call_deferred() ).call_deferred()
# Lighten base color in dark theme, darken in light theme, clamp # Lighten base color in dark theme, darken in light theme, clamp