From 762016be4ce674193a3f7ff099b2a4f035d3fdd2 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Mon, 29 Sep 2025 11:45:46 +0300 Subject: [PATCH] Only editable objects initiate editing state when using edit tool --- src/DrawingProgram/EditTool.cpp | 20 ++++++++------------ src/DrawingProgram/EditTool.hpp | 1 + 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/DrawingProgram/EditTool.cpp b/src/DrawingProgram/EditTool.cpp index bbbf009..a164cb7 100644 --- a/src/DrawingProgram/EditTool.cpp +++ b/src/DrawingProgram/EditTool.cpp @@ -92,6 +92,10 @@ void EditTool::edit_start(const std::shared_ptr& comp) { } } +bool EditTool::is_editable(const std::shared_ptr& comp) { + return comp->get_type() != DRAWCOMPONENT_BRUSHSTROKE; +} + void EditTool::tool_update() { if(!controls.isEditing) { SCollision::AABB mouseAABB{drawP.world.get_mouse_world_pos() - WorldVec{0.5f, 0.5f}, drawP.world.get_mouse_world_pos() + WorldVec{0.5f, 0.5f}}; @@ -105,25 +109,17 @@ void EditTool::tool_update() { camCMouseAABB.recalculate_bounds(); if(drawP.controls.leftClick) { + bool modifySelection = !drawP.selection.is_being_transformed(); if(drawP.world.main.input.mouse.leftClicks >= 2 && !drawP.world.main.input.key(InputManager::KEY_GENERIC_LSHIFT).held && !drawP.world.main.input.key(InputManager::KEY_GENERIC_LALT).held) { CollabListType::ObjectInfoPtr selectedObjectToEdit = drawP.selection.get_front_object_colliding_with(camCMouseAABB); - if(selectedObjectToEdit) { + if(selectedObjectToEdit && is_editable(selectedObjectToEdit->obj)) { drawP.selection.deselect_all(); edit_start(selectedObjectToEdit->obj); - } - else { - if(drawP.world.main.input.key(InputManager::KEY_GENERIC_LSHIFT).held) - drawP.selection.add_from_cam_coord_collider_to_selection(camCMouseAABB, true); - else if(drawP.world.main.input.key(InputManager::KEY_GENERIC_LALT).held) - drawP.selection.remove_from_cam_coord_collider_to_selection(camCMouseAABB, true); - else { - drawP.selection.deselect_all(); - drawP.selection.add_from_cam_coord_collider_to_selection(camCMouseAABB, true); - } + modifySelection = false; } } - else if(!drawP.selection.is_being_transformed()) { + if(modifySelection) { if(drawP.world.main.input.key(InputManager::KEY_GENERIC_LSHIFT).held) drawP.selection.add_from_cam_coord_collider_to_selection(camCMouseAABB, true); else if(drawP.world.main.input.key(InputManager::KEY_GENERIC_LALT).held) diff --git a/src/DrawingProgram/EditTool.hpp b/src/DrawingProgram/EditTool.hpp index f7154dc..361abf1 100644 --- a/src/DrawingProgram/EditTool.hpp +++ b/src/DrawingProgram/EditTool.hpp @@ -27,6 +27,7 @@ class EditTool : public DrawingProgramToolBase { void add_point_handle(const HandleData& handle); void edit_start(const std::shared_ptr& comp); + bool is_editable(const std::shared_ptr& comp); struct EditControls { std::unique_ptr compEditTool;