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