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:
parent
354404db60
commit
6a31048dbc
2 changed files with 16 additions and 0 deletions
|
@ -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)) {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue