summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-08-17 15:42:27 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-08-17 15:42:27 +0200
commit16b5cd9a27550ddd9c9dc4caa8fc029d19f0926e (patch)
tree36ab6138a9ba365e9a7465c19ba87d873eed2752
parent0aa3c2da17c37ce0cead6525da1b3f3b13da0f4d (diff)
parent81d603ad0ef0ee40890a60d32271d61ab88dafad (diff)
downloadredot-engine-16b5cd9a27550ddd9c9dc4caa8fc029d19f0926e.tar.gz
Merge pull request #39364 from Calinou/editor-flags-solo-mode
Replace all flags with one value when holding Cmd in the layers editor
-rw-r--r--editor/editor_properties.cpp40
-rw-r--r--editor/editor_properties.h6
2 files changed, 29 insertions, 17 deletions
diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp
index d6af7107a3..ee020223e6 100644
--- a/editor/editor_properties.cpp
+++ b/editor/editor_properties.cpp
@@ -809,7 +809,7 @@ EditorPropertyFlags::EditorPropertyFlags() {
void EditorPropertyLayersGrid::_rename_pressed(int p_menu) {
// Show rename popup for active layer.
- if (renamed_layer_index == -1) {
+ if (renamed_layer_index == INT32_MAX) {
return;
}
String name = names[renamed_layer_index];
@@ -902,8 +902,8 @@ void EditorPropertyLayersGrid::_update_hovered(const Vector2 &p_position) {
}
// Remove highlight when no square is hovered.
- if (hovered_index != -1) {
- hovered_index = -1;
+ if (hovered_index != INT32_MAX) {
+ hovered_index = INT32_MAX;
queue_redraw();
}
}
@@ -913,20 +913,32 @@ void EditorPropertyLayersGrid::_on_hover_exit() {
expand_hovered = false;
queue_redraw();
}
- if (hovered_index != -1) {
- hovered_index = -1;
+ if (hovered_index != INT32_MAX) {
+ hovered_index = INT32_MAX;
queue_redraw();
}
}
-void EditorPropertyLayersGrid::_update_flag() {
- if (hovered_index >= 0) {
+void EditorPropertyLayersGrid::_update_flag(bool p_replace) {
+ if (hovered_index != INT32_MAX) {
// Toggle the flag.
// We base our choice on the hovered flag, so that it always matches the hovered flag.
- if (value & (1 << hovered_index)) {
- value &= ~(1 << hovered_index);
+ if (p_replace) {
+ // Replace all flags with the hovered flag ("solo mode"),
+ // instead of toggling the hovered flags while preserving other flags' state.
+ if (value == uint32_t(1 << hovered_index)) {
+ // If the flag is already enabled, enable all other items and disable the current flag.
+ // This allows for quicker toggling.
+ value = INT32_MAX - (1 << hovered_index);
+ } else {
+ value = 1 << hovered_index;
+ }
} else {
- value |= (1 << hovered_index);
+ if (value & (1 << hovered_index)) {
+ value &= ~(1 << hovered_index);
+ } else {
+ value |= (1 << hovered_index);
+ }
}
emit_signal(SNAME("flag_changed"), value);
@@ -951,10 +963,10 @@ void EditorPropertyLayersGrid::gui_input(const Ref<InputEvent> &p_ev) {
const Ref<InputEventMouseButton> mb = p_ev;
if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT && mb->is_pressed()) {
_update_hovered(mb->get_position());
- _update_flag();
+ _update_flag(mb->is_command_or_control_pressed());
}
if (mb.is_valid() && mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) {
- if (hovered_index >= 0) {
+ if (hovered_index != INT32_MAX) {
renamed_layer_index = hovered_index;
layer_rename->set_position(get_screen_position() + mb->get_position());
layer_rename->reset_size();
@@ -987,7 +999,7 @@ void EditorPropertyLayersGrid::_notification(int p_what) {
const int vofs = (grid_size.height - h) / 2;
- int layer_index = 0;
+ uint32_t layer_index = 0;
Point2 arrow_pos;
@@ -1242,7 +1254,7 @@ void EditorPropertyLayers::_button_pressed() {
}
void EditorPropertyLayers::_menu_pressed(int p_menu) {
- if (p_menu == grid->layer_count) {
+ if (uint32_t(p_menu) == grid->layer_count) {
ProjectSettingsEditor::get_singleton()->popup_project_settings(true);
ProjectSettingsEditor::get_singleton()->set_general_page(basename);
} else {
diff --git a/editor/editor_properties.h b/editor/editor_properties.h
index 33e325bd42..281ab03986 100644
--- a/editor/editor_properties.h
+++ b/editor/editor_properties.h
@@ -264,7 +264,7 @@ private:
bool expand_hovered = false;
bool expanded = false;
int expansion_rows = 0;
- int hovered_index = -1;
+ uint32_t hovered_index = INT32_MAX; // Nothing is hovered.
bool read_only = false;
int renamed_layer_index = -1;
PopupMenu *layer_rename = nullptr;
@@ -275,7 +275,7 @@ private:
void _rename_operation_confirm();
void _update_hovered(const Vector2 &p_position);
void _on_hover_exit();
- void _update_flag();
+ void _update_flag(bool p_replace);
Size2 get_grid_size() const;
protected:
@@ -285,7 +285,7 @@ protected:
public:
uint32_t value = 0;
int layer_group_size = 0;
- int layer_count = 0;
+ uint32_t layer_count = 0;
Vector<String> names;
Vector<String> tooltips;