From 2e7c2da2a08ba49b9025cdcc3a9b3d640198d840 Mon Sep 17 00:00:00 2001 From: kleonc <9283098+kleonc@users.noreply.github.com> Date: Thu, 13 Nov 2025 00:46:18 +0100 Subject: [PATCH] Allow drag setting flags in layers property editor --- editor/inspector/editor_properties.cpp | 18 +++++++++++++++++- editor/inspector/editor_properties.h | 2 ++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/editor/inspector/editor_properties.cpp b/editor/inspector/editor_properties.cpp index e7c119abfac..643c31959fd 100644 --- a/editor/inspector/editor_properties.cpp +++ b/editor/inspector/editor_properties.cpp @@ -1067,6 +1067,9 @@ void EditorPropertyLayersGrid::_on_hover_exit() { hovered_index = HOVERED_INDEX_NONE; queue_redraw(); } + if (dragging) { + dragging = false; + } } void EditorPropertyLayersGrid::_update_flag(bool p_replace) { @@ -1103,13 +1106,26 @@ void EditorPropertyLayersGrid::gui_input(const Ref &p_ev) { const Ref mm = p_ev; if (mm.is_valid()) { _update_hovered(mm->get_position()); + if (dragging && hovered_index != HOVERED_INDEX_NONE && dragging_value_to_set != bool(value & (1u << hovered_index))) { + value ^= 1u << hovered_index; + emit_signal(SNAME("flag_changed"), value); + queue_redraw(); + } return; } const Ref mb = p_ev; if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) { _update_hovered(mb->get_position()); - _update_flag(mb->is_command_or_control_pressed()); + bool replace_mode = mb->is_command_or_control_pressed(); + _update_flag(replace_mode); + if (!replace_mode && hovered_index != HOVERED_INDEX_NONE) { + dragging = true; + dragging_value_to_set = bool(value & (1u << hovered_index)); + } + } + if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && !mb->is_pressed()) { + dragging = false; } if (mb.is_valid() && mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) { if (hovered_index != HOVERED_INDEX_NONE) { diff --git a/editor/inspector/editor_properties.h b/editor/inspector/editor_properties.h index 65b760c609d..f117b1ad15d 100644 --- a/editor/inspector/editor_properties.h +++ b/editor/inspector/editor_properties.h @@ -306,6 +306,8 @@ private: int expansion_rows = 0; const uint32_t HOVERED_INDEX_NONE = UINT32_MAX; uint32_t hovered_index = HOVERED_INDEX_NONE; + bool dragging = false; + bool dragging_value_to_set = false; bool read_only = false; int renamed_layer_index = -1; PopupMenu *layer_rename = nullptr;