mirror of
https://github.com/godotengine/godot.git
synced 2024-11-21 19:42:43 +00:00
Fix PopupPanel menu style
This commit is contained in:
parent
61598c5c88
commit
549bffdcbc
@ -534,7 +534,6 @@ ControlEditorPopupButton::ControlEditorPopupButton() {
|
|||||||
set_focus_mode(FOCUS_NONE);
|
set_focus_mode(FOCUS_NONE);
|
||||||
|
|
||||||
popup_panel = memnew(PopupPanel);
|
popup_panel = memnew(PopupPanel);
|
||||||
popup_panel->set_theme_type_variation("ControlEditorPopupPanel");
|
|
||||||
add_child(popup_panel);
|
add_child(popup_panel);
|
||||||
popup_panel->connect("about_to_popup", callable_mp(this, &ControlEditorPopupButton::_popup_visibility_changed).bind(true));
|
popup_panel->connect("about_to_popup", callable_mp(this, &ControlEditorPopupButton::_popup_visibility_changed).bind(true));
|
||||||
popup_panel->connect("popup_hide", callable_mp(this, &ControlEditorPopupButton::_popup_visibility_changed).bind(false));
|
popup_panel->connect("popup_hide", callable_mp(this, &ControlEditorPopupButton::_popup_visibility_changed).bind(false));
|
||||||
|
@ -633,6 +633,16 @@ void EditorThemeManager::_create_shared_styles(const Ref<EditorTheme> &p_theme,
|
|||||||
// in 4.0, and even if it was, it may not always work in practice (e.g. running with compositing disabled).
|
// in 4.0, and even if it was, it may not always work in practice (e.g. running with compositing disabled).
|
||||||
p_config.popup_style->set_corner_radius_all(0);
|
p_config.popup_style->set_corner_radius_all(0);
|
||||||
|
|
||||||
|
p_config.popup_border_style = p_config.popup_style->duplicate();
|
||||||
|
p_config.popup_border_style->set_content_margin_all(MAX(Math::round(EDSCALE), p_config.border_width) + 2 + (p_config.base_margin * 1.5) * EDSCALE);
|
||||||
|
// Always display a border for popups like PopupMenus so they can be distinguished from their background.
|
||||||
|
p_config.popup_border_style->set_border_width_all(MAX(Math::round(EDSCALE), p_config.border_width));
|
||||||
|
if (p_config.draw_extra_borders) {
|
||||||
|
p_config.popup_border_style->set_border_color(p_config.extra_border_color_2);
|
||||||
|
} else {
|
||||||
|
p_config.popup_border_style->set_border_color(p_config.dark_color_2);
|
||||||
|
}
|
||||||
|
|
||||||
p_config.window_style = p_config.popup_style->duplicate();
|
p_config.window_style = p_config.popup_style->duplicate();
|
||||||
p_config.window_style->set_border_color(p_config.base_color);
|
p_config.window_style->set_border_color(p_config.base_color);
|
||||||
p_config.window_style->set_border_width(SIDE_TOP, 24 * EDSCALE);
|
p_config.window_style->set_border_width(SIDE_TOP, 24 * EDSCALE);
|
||||||
@ -707,7 +717,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PopupPanel
|
// PopupPanel
|
||||||
p_theme->set_stylebox(SceneStringName(panel), "PopupPanel", p_config.popup_style);
|
p_theme->set_stylebox(SceneStringName(panel), "PopupPanel", p_config.popup_border_style);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Buttons.
|
// Buttons.
|
||||||
@ -1310,18 +1320,11 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the
|
|||||||
|
|
||||||
// PopupMenu.
|
// PopupMenu.
|
||||||
{
|
{
|
||||||
Ref<StyleBoxFlat> style_popup_menu = p_config.popup_style->duplicate();
|
Ref<StyleBoxFlat> style_popup_menu = p_config.popup_border_style->duplicate();
|
||||||
// Use 1 pixel for the sides, since if 0 is used, the highlight of hovered items is drawn
|
// 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,
|
// 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.
|
// and it looks weird. 1px solves this.
|
||||||
style_popup_menu->set_content_margin_individual(EDSCALE, 2 * EDSCALE, EDSCALE, 2 * EDSCALE);
|
style_popup_menu->set_content_margin_individual(Math::round(EDSCALE), 2 * EDSCALE, Math::round(EDSCALE), 2 * EDSCALE);
|
||||||
// Always display a border for PopupMenus so they can be distinguished from their background.
|
|
||||||
style_popup_menu->set_border_width_all(EDSCALE);
|
|
||||||
if (p_config.draw_extra_borders) {
|
|
||||||
style_popup_menu->set_border_color(p_config.extra_border_color_2);
|
|
||||||
} else {
|
|
||||||
style_popup_menu->set_border_color(p_config.dark_color_2);
|
|
||||||
}
|
|
||||||
p_theme->set_stylebox(SceneStringName(panel), "PopupMenu", style_popup_menu);
|
p_theme->set_stylebox(SceneStringName(panel), "PopupMenu", style_popup_menu);
|
||||||
|
|
||||||
Ref<StyleBoxFlat> style_menu_hover = p_config.button_style_hover->duplicate();
|
Ref<StyleBoxFlat> style_menu_hover = p_config.button_style_hover->duplicate();
|
||||||
@ -1331,17 +1334,17 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the
|
|||||||
|
|
||||||
Ref<StyleBoxLine> style_popup_separator(memnew(StyleBoxLine));
|
Ref<StyleBoxLine> style_popup_separator(memnew(StyleBoxLine));
|
||||||
style_popup_separator->set_color(p_config.separator_color);
|
style_popup_separator->set_color(p_config.separator_color);
|
||||||
style_popup_separator->set_grow_begin(p_config.popup_margin - MAX(Math::round(EDSCALE), p_config.border_width));
|
style_popup_separator->set_grow_begin(Math::round(EDSCALE) - MAX(Math::round(EDSCALE), p_config.border_width));
|
||||||
style_popup_separator->set_grow_end(p_config.popup_margin - MAX(Math::round(EDSCALE), p_config.border_width));
|
style_popup_separator->set_grow_end(Math::round(EDSCALE) - MAX(Math::round(EDSCALE), p_config.border_width));
|
||||||
style_popup_separator->set_thickness(MAX(Math::round(EDSCALE), p_config.border_width));
|
style_popup_separator->set_thickness(MAX(Math::round(EDSCALE), p_config.border_width));
|
||||||
|
|
||||||
Ref<StyleBoxLine> style_popup_labeled_separator_left(memnew(StyleBoxLine));
|
Ref<StyleBoxLine> style_popup_labeled_separator_left(memnew(StyleBoxLine));
|
||||||
style_popup_labeled_separator_left->set_grow_begin(p_config.popup_margin - MAX(Math::round(EDSCALE), p_config.border_width));
|
style_popup_labeled_separator_left->set_grow_begin(Math::round(EDSCALE) - MAX(Math::round(EDSCALE), p_config.border_width));
|
||||||
style_popup_labeled_separator_left->set_color(p_config.separator_color);
|
style_popup_labeled_separator_left->set_color(p_config.separator_color);
|
||||||
style_popup_labeled_separator_left->set_thickness(MAX(Math::round(EDSCALE), p_config.border_width));
|
style_popup_labeled_separator_left->set_thickness(MAX(Math::round(EDSCALE), p_config.border_width));
|
||||||
|
|
||||||
Ref<StyleBoxLine> style_popup_labeled_separator_right(memnew(StyleBoxLine));
|
Ref<StyleBoxLine> style_popup_labeled_separator_right(memnew(StyleBoxLine));
|
||||||
style_popup_labeled_separator_right->set_grow_end(p_config.popup_margin - MAX(Math::round(EDSCALE), p_config.border_width));
|
style_popup_labeled_separator_right->set_grow_end(Math::round(EDSCALE) - MAX(Math::round(EDSCALE), p_config.border_width));
|
||||||
style_popup_labeled_separator_right->set_color(p_config.separator_color);
|
style_popup_labeled_separator_right->set_color(p_config.separator_color);
|
||||||
style_popup_labeled_separator_right->set_thickness(MAX(Math::round(EDSCALE), p_config.border_width));
|
style_popup_labeled_separator_right->set_thickness(MAX(Math::round(EDSCALE), p_config.border_width));
|
||||||
|
|
||||||
@ -2114,21 +2117,6 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme
|
|||||||
|
|
||||||
// EditorValidationPanel.
|
// EditorValidationPanel.
|
||||||
p_theme->set_stylebox(SceneStringName(panel), "EditorValidationPanel", p_config.tree_panel_style);
|
p_theme->set_stylebox(SceneStringName(panel), "EditorValidationPanel", p_config.tree_panel_style);
|
||||||
|
|
||||||
// ControlEditor.
|
|
||||||
{
|
|
||||||
p_theme->set_type_variation("ControlEditorPopupPanel", "PopupPanel");
|
|
||||||
|
|
||||||
Ref<StyleBoxFlat> control_editor_popup_style = p_config.popup_style->duplicate();
|
|
||||||
control_editor_popup_style->set_shadow_size(0);
|
|
||||||
control_editor_popup_style->set_content_margin(SIDE_LEFT, p_config.base_margin * EDSCALE);
|
|
||||||
control_editor_popup_style->set_content_margin(SIDE_TOP, p_config.base_margin * EDSCALE);
|
|
||||||
control_editor_popup_style->set_content_margin(SIDE_RIGHT, p_config.base_margin * EDSCALE);
|
|
||||||
control_editor_popup_style->set_content_margin(SIDE_BOTTOM, p_config.base_margin * EDSCALE);
|
|
||||||
control_editor_popup_style->set_border_width_all(0);
|
|
||||||
|
|
||||||
p_theme->set_stylebox(SceneStringName(panel), "ControlEditorPopupPanel", control_editor_popup_style);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Editor inspector.
|
// Editor inspector.
|
||||||
|
@ -135,6 +135,7 @@ class EditorThemeManager {
|
|||||||
Ref<StyleBoxFlat> button_style_hover;
|
Ref<StyleBoxFlat> button_style_hover;
|
||||||
|
|
||||||
Ref<StyleBoxFlat> popup_style;
|
Ref<StyleBoxFlat> popup_style;
|
||||||
|
Ref<StyleBoxFlat> popup_border_style;
|
||||||
Ref<StyleBoxFlat> window_style;
|
Ref<StyleBoxFlat> window_style;
|
||||||
Ref<StyleBoxFlat> dialog_style;
|
Ref<StyleBoxFlat> dialog_style;
|
||||||
Ref<StyleBoxFlat> panel_container_style;
|
Ref<StyleBoxFlat> panel_container_style;
|
||||||
|
@ -391,7 +391,6 @@ void ScreenSelect::_notification(int p_what) {
|
|||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_THEME_CHANGED: {
|
case NOTIFICATION_THEME_CHANGED: {
|
||||||
set_icon(get_editor_theme_icon("MakeFloating"));
|
set_icon(get_editor_theme_icon("MakeFloating"));
|
||||||
popup_background->add_theme_style_override(SceneStringName(panel), get_theme_stylebox("PanelForeground", EditorStringName(EditorStyles)));
|
|
||||||
|
|
||||||
const real_t popup_height = real_t(get_theme_font_size(SceneStringName(font_size))) * 2.0;
|
const real_t popup_height = real_t(get_theme_font_size(SceneStringName(font_size))) * 2.0;
|
||||||
popup->set_min_size(Size2(0, popup_height * 3));
|
popup->set_min_size(Size2(0, popup_height * 3));
|
||||||
@ -454,14 +453,10 @@ ScreenSelect::ScreenSelect() {
|
|||||||
// Create the popup.
|
// Create the popup.
|
||||||
const Size2 borders = Size2(4, 4) * EDSCALE;
|
const Size2 borders = Size2(4, 4) * EDSCALE;
|
||||||
|
|
||||||
popup = memnew(Popup);
|
popup = memnew(PopupPanel);
|
||||||
popup->connect("popup_hide", callable_mp(static_cast<BaseButton *>(this), &ScreenSelect::set_pressed).bind(false));
|
popup->connect("popup_hide", callable_mp(static_cast<BaseButton *>(this), &ScreenSelect::set_pressed).bind(false));
|
||||||
add_child(popup);
|
add_child(popup);
|
||||||
|
|
||||||
popup_background = memnew(Panel);
|
|
||||||
popup_background->set_anchors_and_offsets_preset(PRESET_FULL_RECT);
|
|
||||||
popup->add_child(popup_background);
|
|
||||||
|
|
||||||
MarginContainer *popup_root = memnew(MarginContainer);
|
MarginContainer *popup_root = memnew(MarginContainer);
|
||||||
popup_root->add_theme_constant_override("margin_right", borders.width);
|
popup_root->add_theme_constant_override("margin_right", borders.width);
|
||||||
popup_root->add_theme_constant_override("margin_top", borders.height);
|
popup_root->add_theme_constant_override("margin_top", borders.height);
|
||||||
|
@ -88,7 +88,6 @@ class ScreenSelect : public Button {
|
|||||||
GDCLASS(ScreenSelect, Button);
|
GDCLASS(ScreenSelect, Button);
|
||||||
|
|
||||||
Popup *popup = nullptr;
|
Popup *popup = nullptr;
|
||||||
Panel *popup_background = nullptr;
|
|
||||||
HBoxContainer *screen_list = nullptr;
|
HBoxContainer *screen_list = nullptr;
|
||||||
|
|
||||||
void _build_advanced_menu();
|
void _build_advanced_menu();
|
||||||
|
Loading…
Reference in New Issue
Block a user