summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Enad <m22mail@comcast.net>2024-03-06 22:00:10 -0500
committerMatt Enad <m22mail@comcast.net>2024-03-13 15:38:09 -0400
commitd4ac3fabac437ab194b5666392db97f34e1306a0 (patch)
tree2b99b90b0dc5196a8416d0a067d2de7376393ddf
parent006f5bc11c8538fe6c512db2f16ec5cbcd049709 (diff)
downloadredot-engine-d4ac3fabac437ab194b5666392db97f34e1306a0.tar.gz
Fix main button margins in custom themes
Defined more theme variations and styleboxes for those variations to work around an issue where external editor themes would apply incorrect margins to certain buttons. This should eliminate clipping/alignment issues while a custom theme is in use. Also simplified the step where margins are copied over thanks to @Rindbee 's suggestion
-rw-r--r--editor/editor_node.cpp5
-rw-r--r--editor/gui/editor_bottom_panel.cpp6
-rw-r--r--editor/themes/editor_theme_manager.cpp41
3 files changed, 29 insertions, 23 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 89e5e3f3b0..3abf0582bc 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -517,9 +517,8 @@ void EditorNode::_update_theme(bool p_skip_creation) {
scene_root_parent->add_theme_style_override("panel", theme->get_stylebox(SNAME("Content"), EditorStringName(EditorStyles)));
bottom_panel->add_theme_style_override("panel", theme->get_stylebox(SNAME("BottomPanel"), EditorStringName(EditorStyles)));
- main_menu->add_theme_style_override("pressed", theme->get_stylebox(SNAME("MenuTransparent"), EditorStringName(EditorStyles)));
distraction_free->set_icon(theme->get_icon(SNAME("DistractionFree"), EditorStringName(EditorIcons)));
- distraction_free->add_theme_style_override("pressed", theme->get_stylebox(SNAME("MenuTransparent"), EditorStringName(EditorStyles)));
+ distraction_free->add_theme_style_override("pressed", theme->get_stylebox("normal", "FlatMenuButton"));
help_menu->set_item_icon(help_menu->get_item_index(HELP_SEARCH), theme->get_icon(SNAME("HelpSearch"), EditorStringName(EditorIcons)));
help_menu->set_item_icon(help_menu->get_item_index(HELP_COPY_SYSTEM_INFO), theme->get_icon(SNAME("ActionCopy"), EditorStringName(EditorIcons)));
@@ -6638,7 +6637,7 @@ EditorNode::EditorNode() {
main_menu = memnew(MenuBar);
title_bar->add_child(main_menu);
- main_menu->set_theme_type_variation("FlatMenuButton");
+ main_menu->set_theme_type_variation("MainMenuBar");
main_menu->set_start_index(0); // Main menu, add to the start of global menu.
main_menu->set_prefer_global_menu(global_menu);
main_menu->set_switch_on_hover(true);
diff --git a/editor/gui/editor_bottom_panel.cpp b/editor/gui/editor_bottom_panel.cpp
index e567e42bdb..1c95b546f4 100644
--- a/editor/gui/editor_bottom_panel.cpp
+++ b/editor/gui/editor_bottom_panel.cpp
@@ -50,10 +50,6 @@ void EditorBottomPanel::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_THEME_CHANGED: {
expand_button->set_icon(get_editor_theme_icon(SNAME("ExpandBottomDock")));
- for (int i = 0; i < items.size(); i++) {
- items.write[i].button->add_theme_style_override("pressed", get_theme_stylebox(SNAME("MenuTransparent"), EditorStringName(EditorStyles)));
- items.write[i].button->add_theme_style_override("hover_pressed", get_theme_stylebox(SNAME("MenuHover"), EditorStringName(EditorStyles)));
- }
} break;
}
}
@@ -160,7 +156,7 @@ void EditorBottomPanel::load_layout_from_config(Ref<ConfigFile> p_config_file, c
Button *EditorBottomPanel::add_item(String p_text, Control *p_item, const Ref<Shortcut> &p_shortcut, bool p_at_front) {
Button *tb = memnew(Button);
- tb->set_theme_type_variation("FlatMenuButton");
+ tb->set_theme_type_variation("BottomPanelButton");
tb->connect("toggled", callable_mp(this, &EditorBottomPanel::_switch_by_control).bind(p_item));
tb->set_drag_forwarding(Callable(), callable_mp(this, &EditorBottomPanel::_button_drag_hover).bind(tb, p_item), Callable());
tb->set_text(p_text);
diff --git a/editor/themes/editor_theme_manager.cpp b/editor/themes/editor_theme_manager.cpp
index 1f451487cb..bb4dce808c 100644
--- a/editor/themes/editor_theme_manager.cpp
+++ b/editor/themes/editor_theme_manager.cpp
@@ -1742,29 +1742,40 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme
p_theme->set_stylebox("ScriptEditorPanelFloating", EditorStringName(EditorStyles), make_empty_stylebox(0, 0, 0, 0));
p_theme->set_stylebox("ScriptEditor", EditorStringName(EditorStyles), make_empty_stylebox(0, 0, 0, 0));
- // Bottom panel.
- Ref<StyleBoxFlat> style_bottom_panel = p_config.content_panel_style->duplicate();
- style_bottom_panel->set_corner_radius_all(p_config.corner_radius * EDSCALE);
- p_theme->set_stylebox("BottomPanel", EditorStringName(EditorStyles), style_bottom_panel);
-
// Main menu.
Ref<StyleBoxFlat> menu_transparent_style = p_config.button_style->duplicate();
menu_transparent_style->set_bg_color(Color(1, 1, 1, 0));
menu_transparent_style->set_border_width_all(0);
- Ref<StyleBoxFlat> main_screen_button_transparent = menu_transparent_style->duplicate();
+ Ref<StyleBoxFlat> main_screen_button_hover = p_config.button_style_hover->duplicate();
for (int i = 0; i < 4; i++) {
- menu_transparent_style->set_content_margin((Side)i, p_config.button_style->get_margin((Side)i) + p_config.button_style->get_border_width((Side)i));
+ menu_transparent_style->set_content_margin((Side)i, p_config.button_style->get_content_margin((Side)i));
+ main_screen_button_hover->set_content_margin((Side)i, p_config.button_style_hover->get_content_margin((Side)i));
}
- p_theme->set_stylebox("MenuTransparent", EditorStringName(EditorStyles), menu_transparent_style);
- p_theme->set_stylebox("MenuHover", EditorStringName(EditorStyles), p_config.button_style_hover);
- p_theme->set_stylebox("normal", "MainScreenButton", main_screen_button_transparent);
- p_theme->set_stylebox("pressed", "MainScreenButton", main_screen_button_transparent);
- p_theme->set_stylebox("hover_pressed", "MainScreenButton", p_config.button_style_hover);
+ p_theme->set_stylebox("normal", "MainScreenButton", menu_transparent_style);
+ p_theme->set_stylebox("pressed", "MainScreenButton", menu_transparent_style);
+ p_theme->set_stylebox("hover", "MainScreenButton", main_screen_button_hover);
+ p_theme->set_stylebox("hover_pressed", "MainScreenButton", main_screen_button_hover);
+
+ p_theme->set_type_variation("MainMenuBar", "FlatMenuButton");
+ p_theme->set_stylebox("normal", "MainMenuBar", menu_transparent_style);
+ p_theme->set_stylebox("pressed", "MainMenuBar", main_screen_button_hover);
+ p_theme->set_stylebox("hover", "MainMenuBar", main_screen_button_hover);
+ p_theme->set_stylebox("hover_pressed", "MainMenuBar", main_screen_button_hover);
// Run bar.
p_theme->set_type_variation("RunBarButton", "FlatMenuButton");
p_theme->set_stylebox("disabled", "RunBarButton", menu_transparent_style);
p_theme->set_stylebox("pressed", "RunBarButton", menu_transparent_style);
+
+ // Bottom panel.
+ Ref<StyleBoxFlat> style_bottom_panel = p_config.content_panel_style->duplicate();
+ style_bottom_panel->set_corner_radius_all(p_config.corner_radius * EDSCALE);
+ p_theme->set_stylebox("BottomPanel", EditorStringName(EditorStyles), style_bottom_panel);
+ p_theme->set_type_variation("BottomPanelButton", "FlatMenuButton");
+ p_theme->set_stylebox("normal", "BottomPanelButton", menu_transparent_style);
+ p_theme->set_stylebox("pressed", "BottomPanelButton", menu_transparent_style);
+ p_theme->set_stylebox("hover_pressed", "BottomPanelButton", main_screen_button_hover);
+ p_theme->set_stylebox("hover", "BottomPanelButton", main_screen_button_hover);
}
// Editor GUI widgets.
@@ -1821,9 +1832,9 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme
Ref<StyleBoxFlat> style_flat_button_pressed = p_config.button_style_pressed->duplicate();
for (int i = 0; i < 4; i++) {
- style_flat_button->set_content_margin((Side)i, p_config.button_style->get_margin((Side)i) + p_config.button_style->get_border_width((Side)i));
- style_flat_button_hover->set_content_margin((Side)i, p_config.button_style->get_margin((Side)i) + p_config.button_style->get_border_width((Side)i));
- style_flat_button_pressed->set_content_margin((Side)i, p_config.button_style->get_margin((Side)i) + p_config.button_style->get_border_width((Side)i));
+ style_flat_button->set_content_margin((Side)i, p_config.button_style->get_content_margin((Side)i));
+ style_flat_button_hover->set_content_margin((Side)i, p_config.button_style->get_content_margin((Side)i));
+ style_flat_button_pressed->set_content_margin((Side)i, p_config.button_style->get_content_margin((Side)i));
}
Color flat_pressed_color = p_config.dark_color_1.lightened(0.24).lerp(p_config.accent_color, 0.2) * Color(0.8, 0.8, 0.8, 0.85);
if (p_config.dark_theme) {