Browse Source

Redesign InputEvent editor plugin
- Use vertical layout and add text wrapping
- Fix Window.popup_centered() rect calculation

FireForge 3 years ago
parent
commit
0b0a74e135

+ 4 - 6
editor/action_map_editor.cpp

@@ -589,8 +589,6 @@ void InputEventConfigurationDialog::_notification(int p_what) {
 			icon_cache.joypad_button = get_theme_icon(SNAME("JoyButton"), SNAME("EditorIcons"));
 			icon_cache.joypad_axis = get_theme_icon(SNAME("JoyAxis"), SNAME("EditorIcons"));
 
-			mouse_detection_rect->set_color(get_theme_color(SNAME("dark_color_2"), SNAME("Editor")));
-
 			_update_input_list();
 		} break;
 	}
@@ -624,7 +622,7 @@ void InputEventConfigurationDialog::popup_and_configure(const Ref<InputEvent> &p
 		device_id_option->select(0);
 	}
 
-	popup_centered();
+	popup_centered(Size2(0, 400) * EDSCALE);
 }
 
 Ref<InputEvent> InputEventConfigurationDialog::get_event() const {
@@ -656,8 +654,8 @@ InputEventConfigurationDialog::InputEventConfigurationDialog() {
 	event_as_text = memnew(Label);
 	event_as_text->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
 	vb->add_child(event_as_text);
-	// Mouse button detection rect (Mouse button event outside this ColorRect will be ignored)
-	mouse_detection_rect = memnew(ColorRect);
+	// Mouse button detection rect (Mouse button event outside this rect will be ignored)
+	mouse_detection_rect = memnew(Panel);
 	mouse_detection_rect->set_v_size_flags(Control::SIZE_EXPAND_FILL);
 	vb->add_child(mouse_detection_rect);
 	tab_container->add_child(vb);
@@ -1171,7 +1169,7 @@ void ActionMapEditor::update_action_list(const Vector<ActionInfo> &p_action_info
 
 void ActionMapEditor::show_message(const String &p_message) {
 	message->set_text(p_message);
-	message->popup_centered(Size2(300, 100) * EDSCALE);
+	message->popup_centered();
 }
 
 void ActionMapEditor::use_external_search_box(LineEdit *p_searchbox) {

+ 1 - 1
editor/action_map_editor.h

@@ -67,7 +67,7 @@ private:
 
 	// Listening for input
 	Label *event_as_text = nullptr;
-	ColorRect *mouse_detection_rect = nullptr;
+	Panel *mouse_detection_rect = nullptr;
 
 	// List of All Key/Mouse/Joypad input options.
 	int allowed_input_types;

+ 20 - 18
editor/plugins/input_event_editor_plugin.cpp

@@ -33,6 +33,15 @@
 void InputEventConfigContainer::_bind_methods() {
 }
 
+void InputEventConfigContainer::_notification(int p_what) {
+	switch (p_what) {
+		case NOTIFICATION_ENTER_TREE:
+		case NOTIFICATION_THEME_CHANGED: {
+			open_config_button->set_icon(get_theme_icon(SNAME("Edit"), SNAME("EditorIcons")));
+		} break;
+	}
+}
+
 void InputEventConfigContainer::_configure_pressed() {
 	config_dialog->popup_and_configure(input_event);
 }
@@ -47,12 +56,6 @@ void InputEventConfigContainer::_config_dialog_confirmed() {
 	_event_changed();
 }
 
-Size2 InputEventConfigContainer::get_minimum_size() const {
-	// Don't bother with a minimum x size for the control - we don't want the inspector
-	// to jump in size if a long text is placed in the label (e.g. Joypad Axis description)
-	return Size2(0, HBoxContainer::get_minimum_size().y);
-}
-
 void InputEventConfigContainer::set_event(const Ref<InputEvent> &p_event) {
 	Ref<InputEventKey> k = p_event;
 	Ref<InputEventMouseButton> m = p_event;
@@ -75,29 +78,26 @@ void InputEventConfigContainer::set_event(const Ref<InputEvent> &p_event) {
 }
 
 InputEventConfigContainer::InputEventConfigContainer() {
-	MarginContainer *mc = memnew(MarginContainer);
-	mc->add_theme_constant_override("margin_left", 10);
-	mc->add_theme_constant_override("margin_right", 10);
-	mc->add_theme_constant_override("margin_top", 10);
-	mc->add_theme_constant_override("margin_bottom", 10);
-	add_child(mc);
-
-	HBoxContainer *hb = memnew(HBoxContainer);
-	mc->add_child(hb);
+	input_event_text = memnew(Label);
+	input_event_text->set_h_size_flags(SIZE_EXPAND_FILL);
+	input_event_text->set_autowrap_mode(Label::AutowrapMode::AUTOWRAP_WORD_SMART);
+	input_event_text->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
+	add_child(input_event_text);
 
 	open_config_button = memnew(Button);
 	open_config_button->set_text(TTR("Configure"));
 	open_config_button->connect("pressed", callable_mp(this, &InputEventConfigContainer::_configure_pressed));
-	hb->add_child(open_config_button);
+	add_child(open_config_button);
 
-	input_event_text = memnew(Label);
-	hb->add_child(input_event_text);
+	add_child(memnew(Control));
 
 	config_dialog = memnew(InputEventConfigurationDialog);
 	config_dialog->connect("confirmed", callable_mp(this, &InputEventConfigContainer::_config_dialog_confirmed));
 	add_child(config_dialog);
 }
 
+///////////////////////
+
 bool EditorInspectorPluginInputEvent::can_handle(Object *p_object) {
 	Ref<InputEventKey> k = Ref<InputEventKey>(p_object);
 	Ref<InputEventMouseButton> m = Ref<InputEventMouseButton>(p_object);
@@ -115,6 +115,8 @@ void EditorInspectorPluginInputEvent::parse_begin(Object *p_object) {
 	add_custom_control(picker_controls);
 }
 
+///////////////////////
+
 InputEventEditorPlugin::InputEventEditorPlugin() {
 	Ref<EditorInspectorPluginInputEvent> plugin;
 	plugin.instantiate();

+ 3 - 3
editor/plugins/input_event_editor_plugin.h

@@ -35,8 +35,8 @@
 #include "editor/editor_inspector.h"
 #include "editor/editor_plugin.h"
 
-class InputEventConfigContainer : public HBoxContainer {
-	GDCLASS(InputEventConfigContainer, HBoxContainer);
+class InputEventConfigContainer : public VBoxContainer {
+	GDCLASS(InputEventConfigContainer, VBoxContainer);
 
 	Label *input_event_text = nullptr;
 	Button *open_config_button = nullptr;
@@ -50,10 +50,10 @@ class InputEventConfigContainer : public HBoxContainer {
 	void _event_changed();
 
 protected:
+	void _notification(int p_what);
 	static void _bind_methods();
 
 public:
-	virtual Size2 get_minimum_size() const override;
 	void set_event(const Ref<InputEvent> &p_event);
 
 	InputEventConfigContainer();

+ 3 - 5
scene/main/window.cpp

@@ -1066,11 +1066,9 @@ void Window::popup_centered(const Size2i &p_minsize) {
 	}
 
 	Rect2i popup_rect;
-	if (p_minsize == Size2i()) {
-		popup_rect.size = _get_contents_minimum_size();
-	} else {
-		popup_rect.size = p_minsize;
-	}
+	Size2 contents_minsize = _get_contents_minimum_size();
+	popup_rect.size.x = MAX(p_minsize.x, contents_minsize.x);
+	popup_rect.size.y = MAX(p_minsize.y, contents_minsize.y);
 	popup_rect.position = parent_rect.position + (parent_rect.size - popup_rect.size) / 2;
 
 	popup(popup_rect);