From b58e11c7032d875f7603a1b1306185e6c97952e1 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Mon, 29 Sep 2025 15:15:16 +0300 Subject: [PATCH] Press escape to deselect, stop editing elements, and go back to edit tool --- src/DrawingProgram/DrawingProgram.cpp | 10 ++++++---- src/DrawingProgram/DrawingProgram.hpp | 4 +++- src/DrawingProgram/DrawingProgramSelection.cpp | 9 ++++++--- src/DrawingProgram/EditTool.cpp | 2 +- src/DrawingProgram/LassoSelectTool.cpp | 2 +- src/DrawingProgram/RectSelectTool.cpp | 2 +- src/InputManager.cpp | 6 ++---- src/InputManager.hpp | 6 +----- src/Toolbar.cpp | 2 +- 9 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index d6b5536..fb7ac9e 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -344,8 +344,6 @@ void DrawingProgram::update() { switch_to_tool(DrawingProgramToolType::EYEDROPPER); else if(world.main.input.key(InputManager::KEY_DRAW_TOOL_SCREENSHOT).pressed) switch_to_tool(DrawingProgramToolType::SCREENSHOT); - else if(world.main.input.key(InputManager::KEY_DRAW_TOOL_EDIT).pressed) - switch_to_tool(DrawingProgramToolType::EDIT); selection.update(); drawTool->tool_update(); @@ -366,13 +364,17 @@ void DrawingProgram::update() { compCache.test_rebuild(components.client_list()); } +bool DrawingProgram::is_selection_tool(DrawingProgramToolType typeToCheck) { + return typeToCheck == DrawingProgramToolType::RECTSELECT || typeToCheck == DrawingProgramToolType::LASSOSELECT || typeToCheck == DrawingProgramToolType::EDIT; +} + void DrawingProgram::switch_to_tool_ptr(std::unique_ptr newTool) { drawTool->switch_tool(newTool->get_type()); drawTool = std::move(newTool); } -void DrawingProgram::switch_to_tool(DrawingProgramToolType newToolType) { - if(newToolType != drawTool->get_type()) { +void DrawingProgram::switch_to_tool(DrawingProgramToolType newToolType, bool force) { + if(newToolType != drawTool->get_type() || force) { drawTool->switch_tool(newToolType); drawTool = DrawingProgramToolBase::allocate_tool_type(*this, newToolType); } diff --git a/src/DrawingProgram/DrawingProgram.hpp b/src/DrawingProgram/DrawingProgram.hpp index 4553eaa..a2c88a1 100644 --- a/src/DrawingProgram/DrawingProgram.hpp +++ b/src/DrawingProgram/DrawingProgram.hpp @@ -54,7 +54,7 @@ class DrawingProgram { Vector4f* get_foreground_color_ptr(); - void switch_to_tool(DrawingProgramToolType newToolType); + void switch_to_tool(DrawingProgramToolType newToolType, bool force = false); void switch_to_tool_ptr(std::unique_ptr newTool); void clear_draw_cache(); @@ -95,6 +95,8 @@ class DrawingProgram { bool temporaryPan = false; DrawingProgramToolType toolTypeAfterTempPan; + bool is_selection_tool(DrawingProgramToolType typeToCheck); + struct GlobalControls { float relativeWidth = 15.0f; diff --git a/src/DrawingProgram/DrawingProgramSelection.cpp b/src/DrawingProgram/DrawingProgramSelection.cpp index 022ab81..50454b3 100644 --- a/src/DrawingProgram/DrawingProgramSelection.cpp +++ b/src/DrawingProgram/DrawingProgramSelection.cpp @@ -2,6 +2,7 @@ #include "DrawingProgram.hpp" #include "../World.hpp" #include "../MainProgram.hpp" +#include "DrawingProgramToolBase.hpp" #include "Helpers/FixedPoint.hpp" #include #include @@ -368,13 +369,13 @@ void DrawingProgramSelection::update() { break; } - if(drawP.world.main.input.key(InputManager::KEY_DRAW_UNSELECT).pressed) + if(drawP.world.main.input.key(InputManager::KEY_GENERIC_ESCAPE).pressed) deselect_all(); else if(drawP.world.main.input.key(InputManager::KEY_DRAW_DELETE).pressed) delete_all(); - else if(drawP.world.main.input.key(InputManager::KEY_COPY).pressed && selectionTransformCoords == CoordSpaceHelperTransform()) + else if(drawP.world.main.input.key(InputManager::KEY_COPY).pressed && !is_being_transformed()) selection_to_clipboard(); - else if(drawP.world.main.input.key(InputManager::KEY_CUT).pressed && selectionTransformCoords == CoordSpaceHelperTransform()) { + else if(drawP.world.main.input.key(InputManager::KEY_CUT).pressed && !is_being_transformed()) { selection_to_clipboard(); delete_all(); } @@ -385,6 +386,8 @@ void DrawingProgramSelection::update() { } else if(drawP.world.main.input.key(InputManager::KEY_PASTE).pressed && !drawP.prevent_undo_or_redo()) paste_clipboard(); + else if(drawP.world.main.input.key(InputManager::KEY_GENERIC_ESCAPE).pressed) + drawP.switch_to_tool(DrawingProgramToolType::EDIT, true); } bool DrawingProgramSelection::is_being_transformed() { diff --git a/src/DrawingProgram/EditTool.cpp b/src/DrawingProgram/EditTool.cpp index a164cb7..2f26170 100644 --- a/src/DrawingProgram/EditTool.cpp +++ b/src/DrawingProgram/EditTool.cpp @@ -57,7 +57,7 @@ void EditTool::switch_tool(DrawingProgramToolType newTool) { controls.pointDragging = nullptr; controls.isEditing = false; - if(newTool != DrawingProgramToolType::RECTSELECT && newTool != DrawingProgramToolType::LASSOSELECT && newTool != DrawingProgramToolType::EDIT) + if(!drawP.is_selection_tool(newTool)) drawP.selection.deselect_all(); } diff --git a/src/DrawingProgram/LassoSelectTool.cpp b/src/DrawingProgram/LassoSelectTool.cpp index 0e457fb..68f6c4a 100644 --- a/src/DrawingProgram/LassoSelectTool.cpp +++ b/src/DrawingProgram/LassoSelectTool.cpp @@ -42,7 +42,7 @@ void LassoSelectTool::gui_toolbox() { } void LassoSelectTool::switch_tool(DrawingProgramToolType newTool) { - if(newTool != DrawingProgramToolType::RECTSELECT && newTool != DrawingProgramToolType::LASSOSELECT && newTool != DrawingProgramToolType::EDIT) + if(!drawP.is_selection_tool(newTool)) drawP.selection.deselect_all(); } diff --git a/src/DrawingProgram/RectSelectTool.cpp b/src/DrawingProgram/RectSelectTool.cpp index 6e05019..a65058b 100644 --- a/src/DrawingProgram/RectSelectTool.cpp +++ b/src/DrawingProgram/RectSelectTool.cpp @@ -21,7 +21,7 @@ void RectSelectTool::gui_toolbox() { } void RectSelectTool::switch_tool(DrawingProgramToolType newTool) { - if(newTool != DrawingProgramToolType::RECTSELECT && newTool != DrawingProgramToolType::LASSOSELECT && newTool != DrawingProgramToolType::EDIT) + if(!drawP.is_selection_tool(newTool)) drawP.selection.deselect_all(); } diff --git a/src/InputManager.cpp b/src/InputManager.cpp index 203a017..42c4fb1 100644 --- a/src/InputManager.cpp +++ b/src/InputManager.cpp @@ -23,7 +23,6 @@ InputManager::InputManager() { defaultKeyAssignments[{0, SDLK_W}] = KEY_CAMERA_ROTATE_COUNTERCLOCKWISE; defaultKeyAssignments[{0, SDLK_Q}] = KEY_CAMERA_ROTATE_CLOCKWISE; defaultKeyAssignments[{0, SDLK_DELETE}] = KEY_DRAW_DELETE; - defaultKeyAssignments[{0, SDLK_ESCAPE}] = KEY_DRAW_UNSELECT; defaultKeyAssignments[{CTRL_MOD, SDLK_Z}] = KEY_UNDO; defaultKeyAssignments[{CTRL_MOD, SDLK_R}] = KEY_REDO; defaultKeyAssignments[{0, SDLK_TAB}] = KEY_NOGUI; @@ -40,7 +39,6 @@ InputManager::InputManager() { defaultKeyAssignments[{0, SDLK_C}] = KEY_DRAW_TOOL_ELLIPSE; defaultKeyAssignments[{0, SDLK_X}] = KEY_DRAW_TOOL_RECTSELECT; defaultKeyAssignments[{0, SDLK_I}] = KEY_DRAW_TOOL_EYEDROPPER; - defaultKeyAssignments[{0, SDLK_S}] = KEY_DRAW_TOOL_EDIT; defaultKeyAssignments[{0, SDLK_P}] = KEY_DRAW_TOOL_SCREENSHOT; defaultKeyAssignments[{0, SDLK_F1}] = KEY_OPEN_CHAT; defaultKeyAssignments[{0, SDLK_F3}] = KEY_SHOW_METRICS; @@ -259,7 +257,7 @@ void InputManager::backend_key_down_update(const SDL_KeyboardEvent& e) { set_key_down(e, KEY_TEXT_ENTER); break; case SDLK_ESCAPE: - set_key_down(e, KEY_TEXT_ESCAPE); + set_key_down(e, KEY_GENERIC_ESCAPE); break; default: break; @@ -326,7 +324,7 @@ void InputManager::backend_key_up_update(const SDL_KeyboardEvent& e) { set_key_up(e, KEY_TEXT_ENTER); break; case SDLK_ESCAPE: - set_key_up(e, KEY_TEXT_ESCAPE); + set_key_up(e, KEY_GENERIC_ESCAPE); break; default: break; diff --git a/src/InputManager.hpp b/src/InputManager.hpp index 8917e5f..5d9b239 100644 --- a/src/InputManager.hpp +++ b/src/InputManager.hpp @@ -113,7 +113,6 @@ struct InputManager { KEY_CAMERA_ROTATE_CLOCKWISE = 0, KEY_CAMERA_ROTATE_COUNTERCLOCKWISE, KEY_DRAW_DELETE, - KEY_DRAW_UNSELECT, KEY_UNDO, KEY_REDO, KEY_NOGUI, @@ -129,7 +128,6 @@ struct InputManager { KEY_DRAW_TOOL_RECTANGLE, KEY_DRAW_TOOL_ELLIPSE, KEY_DRAW_TOOL_RECTSELECT, - KEY_DRAW_TOOL_EDIT, KEY_DRAW_TOOL_EYEDROPPER, KEY_DRAW_TOOL_SCREENSHOT, KEY_SHOW_METRICS, @@ -154,7 +152,7 @@ struct InputManager { KEY_TEXT_ENTER, KEY_TEXT_CTRL, KEY_TEXT_SELECTALL, - KEY_TEXT_ESCAPE, + KEY_GENERIC_ESCAPE, KEY_GENERIC_LSHIFT, KEY_GENERIC_LALT, KEY_GENERIC_LCTRL, @@ -196,7 +194,6 @@ NLOHMANN_JSON_SERIALIZE_ENUM(InputManager::KeyCodeEnum, { {InputManager::KEY_CAMERA_ROTATE_CLOCKWISE, "Rotate Canvas CW"}, {InputManager::KEY_CAMERA_ROTATE_COUNTERCLOCKWISE, "Rotate Canvas CCW"}, {InputManager::KEY_DRAW_DELETE, "Delete Selection"}, - {InputManager::KEY_DRAW_UNSELECT, "Unselect Elements"}, {InputManager::KEY_UNDO, "Undo"}, {InputManager::KEY_REDO, "Redo"}, {InputManager::KEY_NOGUI, "Toggle GUI"}, @@ -213,7 +210,6 @@ NLOHMANN_JSON_SERIALIZE_ENUM(InputManager::KeyCodeEnum, { {InputManager::KEY_DRAW_TOOL_ELLIPSE, "Ellipse Tool"}, {InputManager::KEY_DRAW_TOOL_RECTSELECT, "Rect Select Tool"}, {InputManager::KEY_DRAW_TOOL_EYEDROPPER, "Color Select Tool"}, - {InputManager::KEY_DRAW_TOOL_EDIT, "Edit Tool"}, {InputManager::KEY_DRAW_TOOL_SCREENSHOT, "Screenshot Tool"}, {InputManager::KEY_SHOW_METRICS, "Show Metrics"}, {InputManager::KEY_OPEN_CHAT, "Open Chat"}, diff --git a/src/Toolbar.cpp b/src/Toolbar.cpp index c69fcab..1f88056 100644 --- a/src/Toolbar.cpp +++ b/src/Toolbar.cpp @@ -784,7 +784,7 @@ void Toolbar::chat_box() { t.selection.selected = true; chatBoxState = CHATBOXSTATE_OPEN; } - if(main.input.key(InputManager::KEY_TEXT_ESCAPE).pressed) + if(main.input.key(InputManager::KEY_GENERIC_ESCAPE).pressed) t.selection.selected = false; if(main.input.key(InputManager::KEY_TEXT_ENTER).pressed) { main.world->send_chat_message(chatMessageInput);