Merge pull request #88871 from lawnjelly/fix_tilemap_undo2

[3.x] Tilemap editor - prevent changing tool when mouse buttons pressed
This commit is contained in:
Rémi Verschelde 2024-04-25 13:28:27 +02:00 committed by GitHub
commit 49e533a765
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 0 deletions

View File

@ -150,6 +150,13 @@ void TileMapEditor::_update_button_tool() {
}
void TileMapEditor::_button_tool_select(int p_tool) {
if (_mouse_buttons_pressed) {
// Disallow changing tool when drawing,
// to prevent undo actions getting messed up
// and out of sync.
return;
}
tool = (Tool)p_tool;
_update_button_tool();
switch (tool) {
@ -1160,6 +1167,14 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
// Keep track internally of which mouse buttons are pressed
// so we can disallow changing tool.
if (mb->is_pressed()) {
_mouse_buttons_pressed |= mb->get_button_index();
} else {
_mouse_buttons_pressed &= ~mb->get_button_index();
}
if (mb->get_button_index() == BUTTON_LEFT) {
if (mb->is_pressed()) {
if (Input::get_singleton()->is_key_pressed(KEY_SPACE)) {

View File

@ -105,6 +105,7 @@ class TileMapEditor : public VBoxContainer {
Tool tool;
Tool last_tool;
uint32_t _mouse_buttons_pressed = 0;
bool selection_active;
bool mouse_over;