Zoom and pan tool no longer deselect objects

This commit is contained in:
Yousef Khadadeh 2025-10-03 13:16:38 +03:00
parent 1945b04e69
commit 9f739ada6a
8 changed files with 95 additions and 78 deletions

View file

@ -367,16 +367,20 @@ void DrawingProgram::update() {
EraserTool* eraserTool = static_cast<EraserTool*>(drawTool.get());
compCache.test_rebuild_dont_include_set_dont_include_nodes(components.client_list(), eraserTool->erasedComponents, eraserTool->erasedBVHNodes);
}
else if(is_selection_tool(drawTool->get_type()))
else if(is_selection_allowing_tool(drawTool->get_type()))
compCache.test_rebuild_dont_include_set(components.client_list(), selection.get_selected_set());
else
compCache.test_rebuild(components.client_list());
}
bool DrawingProgram::is_selection_tool(DrawingProgramToolType typeToCheck) {
bool DrawingProgram::is_actual_selection_tool(DrawingProgramToolType typeToCheck) {
return typeToCheck == DrawingProgramToolType::RECTSELECT || typeToCheck == DrawingProgramToolType::LASSOSELECT || typeToCheck == DrawingProgramToolType::EDIT;
}
bool DrawingProgram::is_selection_allowing_tool(DrawingProgramToolType typeToCheck) {
return is_actual_selection_tool(typeToCheck) || typeToCheck == DrawingProgramToolType::PAN || typeToCheck == DrawingProgramToolType::ZOOM;
}
void DrawingProgram::switch_to_tool_ptr(std::unique_ptr<DrawingProgramToolBase> newTool) {
drawTool->switch_tool(newTool->get_type());
drawTool = std::move(newTool);
@ -412,7 +416,7 @@ void DrawingProgram::force_rebuild_cache() {
EraserTool* eraserTool = static_cast<EraserTool*>(drawTool.get());
compCache.test_rebuild_dont_include_set_dont_include_nodes(components.client_list(), eraserTool->erasedComponents, eraserTool->erasedBVHNodes, true);
}
else if(is_selection_tool(drawTool->get_type()))
else if(is_selection_allowing_tool(drawTool->get_type()))
compCache.test_rebuild_dont_include_set(components.client_list(), selection.get_selected_set(), true);
else
compCache.test_rebuild(components.client_list(), true);

View file

@ -96,7 +96,8 @@ class DrawingProgram {
bool temporaryPan = false;
DrawingProgramToolType toolTypeAfterTempPan;
bool is_selection_tool(DrawingProgramToolType typeToCheck);
bool is_actual_selection_tool(DrawingProgramToolType typeToCheck);
bool is_selection_allowing_tool(DrawingProgramToolType typeToCheck);
struct GlobalControls {
float relativeWidth = 15.0f;

View file

@ -293,6 +293,7 @@ void DrawingProgramSelection::update() {
rebuild_cam_space();
if(drawP.is_actual_selection_tool(drawP.drawTool->get_type())) {
switch(transformOpHappening) {
case TransformOperation::NONE:
if(drawP.controls.leftClick && !drawP.world.main.input.key(InputManager::KEY_GENERIC_LSHIFT).held && !drawP.world.main.input.key(InputManager::KEY_GENERIC_LALT).held) {
@ -363,6 +364,11 @@ void DrawingProgramSelection::update() {
}
break;
}
}
else if(transformOpHappening != TransformOperation::NONE) {
commit_transform_selection();
return;
}
if(drawP.world.main.input.key(InputManager::KEY_GENERIC_ESCAPE).pressed)
deselect_all();
@ -505,6 +511,7 @@ void DrawingProgramSelection::draw_gui(SkCanvas* canvas, const DrawData& drawDat
SkPaint p{SkColor4f{0.3f, 0.6f, 0.9f, 0.4f}};
canvas->drawPath(selectionRectPath, p);
if(drawP.is_actual_selection_tool(drawP.drawTool->get_type())) {
if(transformOpHappening == TransformOperation::NONE || transformOpHappening == TransformOperation::ROTATE || transformOpHappening == TransformOperation::ROTATE_RELOCATE_CENTER)
drawP.draw_drag_circle(canvas, rotateData.centerHandlePoint, {0.9f, 0.5f, 0.1f, 1.0f}, drawData);
if(transformOpHappening == TransformOperation::NONE || transformOpHappening == TransformOperation::ROTATE)
@ -512,6 +519,7 @@ void DrawingProgramSelection::draw_gui(SkCanvas* canvas, const DrawData& drawDat
if(transformOpHappening == TransformOperation::NONE || transformOpHappening == TransformOperation::SCALE)
drawP.draw_drag_circle(canvas, scaleData.handlePoint, {0.1f, 0.9f, 0.9f, 1.0f}, drawData);
}
}
}
void DrawingProgramSelection::reset_selection_data() {

View file

@ -57,7 +57,7 @@ void EditTool::switch_tool(DrawingProgramToolType newTool) {
controls.pointDragging = nullptr;
controls.isEditing = false;
if(!drawP.is_selection_tool(newTool))
if(!drawP.is_selection_allowing_tool(newTool))
drawP.selection.deselect_all();
}

View file

@ -42,7 +42,7 @@ void LassoSelectTool::gui_toolbox() {
}
void LassoSelectTool::switch_tool(DrawingProgramToolType newTool) {
if(!drawP.is_selection_tool(newTool))
if(!drawP.is_selection_allowing_tool(newTool))
drawP.selection.deselect_all();
}

View file

@ -32,4 +32,6 @@ void PanCanvasTool::draw(SkCanvas* canvas, const DrawData& drawData) {
}
void PanCanvasTool::switch_tool(DrawingProgramToolType newTool) {
if(!drawP.is_selection_allowing_tool(newTool))
drawP.selection.deselect_all();
}

View file

@ -21,7 +21,7 @@ void RectSelectTool::gui_toolbox() {
}
void RectSelectTool::switch_tool(DrawingProgramToolType newTool) {
if(!drawP.is_selection_tool(newTool))
if(!drawP.is_selection_allowing_tool(newTool))
drawP.selection.deselect_all();
}

View file

@ -32,4 +32,6 @@ void ZoomCanvasTool::draw(SkCanvas* canvas, const DrawData& drawData) {
}
void ZoomCanvasTool::switch_tool(DrawingProgramToolType newTool) {
if(!drawP.is_selection_allowing_tool(newTool))
drawP.selection.deselect_all();
}