Press escape to deselect, stop editing elements, and go back to edit tool

This commit is contained in:
Yousef Khadadeh 2025-09-29 15:15:16 +03:00
parent 762016be4c
commit b58e11c703
9 changed files with 22 additions and 21 deletions

View file

@ -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<DrawingProgramToolBase> 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);
}

View file

@ -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<DrawingProgramToolBase> 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;

View file

@ -2,6 +2,7 @@
#include "DrawingProgram.hpp"
#include "../World.hpp"
#include "../MainProgram.hpp"
#include "DrawingProgramToolBase.hpp"
#include "Helpers/FixedPoint.hpp"
#include <Helpers/MathExtras.hpp>
#include <Helpers/SCollision.hpp>
@ -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() {

View file

@ -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();
}

View file

@ -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();
}

View file

@ -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();
}

View file

@ -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;

View file

@ -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"},

View file

@ -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);