Zoom and pan tool no longer deselect objects
This commit is contained in:
parent
1945b04e69
commit
9f739ada6a
8 changed files with 95 additions and 78 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue