mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 21:51:22 +00:00 
			
		
		
		
	Fix PopupPanel menu style
This commit is contained in:
		
							parent
							
								
									61598c5c88
								
							
						
					
					
						commit
						549bffdcbc
					
				
					 5 changed files with 19 additions and 37 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Giganzo
						Giganzo