Merge pull request #106164 from lodetrick/refactor-bottom-panel

Refactor editor `EditorBottomPanel` to be a `TabContainer`
This commit is contained in:
Thaddeus Crews
2025-11-07 10:32:35 -06:00
18 changed files with 272 additions and 358 deletions

View File

@@ -1617,8 +1617,33 @@ void ThemeModern::populate_editor_styles(const Ref<EditorTheme> &p_theme, Editor
// Bottom panel.
Ref<StyleBoxFlat> style_bottom_panel = p_config.content_panel_style->duplicate();
style_bottom_panel->set_border_width(SIDE_BOTTOM, 0);
style_bottom_panel->set_corner_radius_all(p_config.corner_radius * EDSCALE);
style_bottom_panel->set_corner_radius(CORNER_BOTTOM_LEFT, 0);
style_bottom_panel->set_corner_radius(CORNER_BOTTOM_RIGHT, 0);
Ref<StyleBoxFlat> style_bottom_panel_hidden = style_bottom_panel->duplicate();
style_bottom_panel_hidden->set_content_margin(SIDE_TOP, 0);
Ref<StyleBoxFlat> style_bottom_panel_tabbar = p_config.content_panel_style->duplicate();
style_bottom_panel_tabbar->set_content_margin(SIDE_TOP, 0);
Ref<StyleBoxEmpty> style_bottom_tab = p_config.base_empty_style->duplicate();
style_bottom_tab->set_content_margin_individual(p_config.base_margin * 2 * EDSCALE, p_config.base_margin * 1.2 * EDSCALE, p_config.base_margin * 2 * EDSCALE, p_config.base_margin * 1.2 * EDSCALE);
Ref<StyleBoxFlat> bottom_panel_button_hover = p_config.flat_button_hover->duplicate();
bottom_panel_button_hover->set_content_margin_individual(p_config.base_margin * 2 * EDSCALE, p_config.base_margin * 1.2 * EDSCALE, p_config.base_margin * 2 * EDSCALE, p_config.base_margin * 1.2 * EDSCALE);
p_theme->set_stylebox("BottomPanel", EditorStringName(EditorStyles), style_bottom_panel);
p_theme->set_type_variation("BottomPanel", "TabContainer");
p_theme->set_stylebox(SceneStringName(panel), "BottomPanel", style_bottom_panel_hidden);
p_theme->set_stylebox("tabbar_background", "BottomPanel", style_bottom_panel_tabbar);
p_theme->set_stylebox("tab_selected", "BottomPanel", bottom_panel_button_hover);
p_theme->set_stylebox("tab_hovered", "BottomPanel", bottom_panel_button_hover);
p_theme->set_stylebox("tab_focus", "BottomPanel", p_config.base_empty_style);
p_theme->set_stylebox("tab_unselected", "BottomPanel", style_bottom_tab);
p_theme->set_color("font_unselected_color", "BottomPanel", p_config.font_color);
p_theme->set_color("font_hovered_color", "BottomPanel", p_config.font_hover_color);
p_theme->set_color("font_selected_color", "BottomPanel", p_config.font_hover_color);
p_theme->set_constant("tab_separation", "BottomPanel", p_config.separation_margin);
p_theme->set_type_variation("BottomPanelButton", "FlatMenuButton");
@@ -1627,8 +1652,6 @@ void ThemeModern::populate_editor_styles(const Ref<EditorTheme> &p_theme, Editor
bottom_panel_button->set_content_margin_individual(p_config.base_margin * 2 * EDSCALE, p_config.base_margin * 1.2 * EDSCALE, p_config.base_margin * 2 * EDSCALE, p_config.base_margin * 1.2 * EDSCALE);
p_theme->set_stylebox(CoreStringName(normal), "BottomPanelButton", bottom_panel_button);
Ref<StyleBoxFlat> bottom_panel_button_hover = p_config.flat_button_hover->duplicate();
bottom_panel_button_hover->set_content_margin_individual(p_config.base_margin * 2 * EDSCALE, p_config.base_margin * 1.2 * EDSCALE, p_config.base_margin * 2 * EDSCALE, p_config.base_margin * 1.2 * EDSCALE);
p_theme->set_stylebox(SceneStringName(hover), "BottomPanelButton", bottom_panel_button_hover);
p_theme->set_stylebox(SceneStringName(pressed), "BottomPanelButton", bottom_panel_button_hover);
@@ -1640,8 +1663,11 @@ void ThemeModern::populate_editor_styles(const Ref<EditorTheme> &p_theme, Editor
p_theme->set_color("icon_pressed_color", "BottomPanelButton", Color(1, 1, 1, 1));
Color icon_hover_color = p_config.icon_normal_color * (p_config.dark_icon_and_font ? 1.15 : 1.0);
icon_hover_color.a = 1.0;
p_theme->set_color("icon_hover_color", "BottomPanel", icon_hover_color);
p_theme->set_color("icon_hover_pressed_color", "BottomPanel", icon_hover_color);
p_theme->set_color("icon_hover_color", "BottomPanelButton", icon_hover_color);
p_theme->set_color("icon_hover_pressed_color", "BottomPanelButton", icon_hover_color);
p_theme->set_color("icon_hover_pressed_color", "BottomPanelButton", p_config.accent_color);
p_theme->set_color("icon_pressed_color", "BottomPanelButton", p_config.accent_color);
// Audio bus.
Ref<StyleBoxFlat> audio_bus = p_config.base_style->duplicate();