Tilemap editor - prevent changing tool when mouse buttons pressed

Changing tool when painting prevented the corresponding commit of undo action when the mouse button was released. This led to undo actions getting out of sync and the undo system breaking the editor.

This PR simply prevents changing tool while mouse buttons are pressed, and prevents the above scenario.
This commit is contained in:
lawnjelly 2024-02-26 15:27:31 +00:00
parent 354404db60
commit 6a31048dbc
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;