From c2301ae9f5d829f8403ccca7fe743b0966ce868f Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Sat, 2 Aug 2025 20:39:21 +0300 Subject: [PATCH] Change how tools get switched --- src/DrawingProgram/BrushTool.cpp | 3 +- src/DrawingProgram/BrushTool.hpp | 2 +- src/DrawingProgram/DrawingProgram.cpp | 85 ++++++++----------- src/DrawingProgram/DrawingProgram.hpp | 6 +- .../DrawingProgramSelection.cpp | 6 +- src/DrawingProgram/DrawingProgramToolBase.hpp | 2 +- src/DrawingProgram/EditTool.cpp | 6 +- src/DrawingProgram/EditTool.hpp | 2 +- src/DrawingProgram/EllipseDrawEditTool.cpp | 2 - src/DrawingProgram/EllipseDrawTool.cpp | 3 +- src/DrawingProgram/EllipseDrawTool.hpp | 2 +- src/DrawingProgram/EraserTool.cpp | 4 +- src/DrawingProgram/EraserTool.hpp | 2 +- src/DrawingProgram/InkDropperTool.cpp | 2 +- src/DrawingProgram/InkDropperTool.hpp | 2 +- src/DrawingProgram/LassoSelectTool.cpp | 8 +- src/DrawingProgram/LassoSelectTool.hpp | 2 +- src/DrawingProgram/RectDrawEditTool.cpp | 2 - src/DrawingProgram/RectDrawTool.cpp | 2 +- src/DrawingProgram/RectDrawTool.hpp | 2 +- src/DrawingProgram/RectSelectTool.cpp | 6 +- src/DrawingProgram/RectSelectTool.hpp | 2 +- src/DrawingProgram/ScreenshotTool.cpp | 2 +- src/DrawingProgram/ScreenshotTool.hpp | 2 +- src/DrawingProgram/TextBoxEditTool.cpp | 2 - src/DrawingProgram/TextBoxTool.cpp | 3 +- src/DrawingProgram/TextBoxTool.hpp | 2 +- 27 files changed, 68 insertions(+), 96 deletions(-) diff --git a/src/DrawingProgram/BrushTool.cpp b/src/DrawingProgram/BrushTool.cpp index a69fc56..8dd7aeb 100644 --- a/src/DrawingProgram/BrushTool.cpp +++ b/src/DrawingProgram/BrushTool.cpp @@ -19,9 +19,8 @@ DrawingProgramToolType BrushTool::get_type() { return DrawingProgramToolType::BRUSH; } -void BrushTool::reset_tool() { +void BrushTool::switch_tool(DrawingProgramToolType newTool) { commit_stroke(); - controls.isDrawing = false; } bool BrushTool::extensive_point_checking(const Vector2f& newPoint) { diff --git a/src/DrawingProgram/BrushTool.hpp b/src/DrawingProgram/BrushTool.hpp index 8ac3d9e..63e93ab 100644 --- a/src/DrawingProgram/BrushTool.hpp +++ b/src/DrawingProgram/BrushTool.hpp @@ -19,7 +19,7 @@ class BrushTool : public DrawingProgramToolBase { virtual DrawingProgramToolType get_type() override; virtual void gui_toolbox() override; virtual void tool_update() override; - virtual void reset_tool() override; + virtual void switch_tool(DrawingProgramToolType newTool) override; virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; virtual bool prevent_undo_or_redo() override; private: diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index 919c0b4..fb4e2b7 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -34,7 +34,7 @@ DrawingProgram::DrawingProgram(World& initWorld): components([&](){ return world.get_new_id(); }), selection(*this) { - drawTool = DrawingProgramToolBase::allocate_tool_type(*this, controls.selectedTool); + drawTool = DrawingProgramToolBase::allocate_tool_type(*this, DrawingProgramToolType::BRUSH); components.updateCallback = [&]() { if(&world == world.main.world.get()) @@ -189,16 +189,16 @@ void DrawingProgram::toolbar_gui() { .border = {.color = convert_vec4(t.io->theme->backColor2), .width = CLAY_BORDER_OUTSIDE(t.io->theme->windowBorders1)} }) { t.gui.obstructing_window(); - if(t.gui.svg_icon_button("Brush Toolbar Button", "data/icons/brush.svg", controls.selectedTool == DrawingProgramToolType::BRUSH)) { controls.selectedTool = DrawingProgramToolType::BRUSH; } - if(t.gui.svg_icon_button("Eraser Toolbar Button", "data/icons/eraser.svg", controls.selectedTool == DrawingProgramToolType::ERASER)) { controls.selectedTool = DrawingProgramToolType::ERASER; } - if(t.gui.svg_icon_button("Text Toolbar Button", "data/icons/text.svg", controls.selectedTool == DrawingProgramToolType::TEXTBOX)) { controls.selectedTool = DrawingProgramToolType::TEXTBOX; } - if(t.gui.svg_icon_button("Ellipse Toolbar Button", "data/icons/circle.svg", controls.selectedTool == DrawingProgramToolType::ELLIPSE)) { controls.selectedTool = DrawingProgramToolType::ELLIPSE; } - if(t.gui.svg_icon_button("Rect Toolbar Button", "data/icons/rectangle.svg", controls.selectedTool == DrawingProgramToolType::RECTANGLE)) { controls.selectedTool = DrawingProgramToolType::RECTANGLE; } - if(t.gui.svg_icon_button("RectSelect Toolbar Button", "data/icons/rectselect.svg", controls.selectedTool == DrawingProgramToolType::RECTSELECT)) { controls.selectedTool = DrawingProgramToolType::RECTSELECT; } - if(t.gui.svg_icon_button("LassoSelect Toolbar Button", "data/icons/close.svg", controls.selectedTool == DrawingProgramToolType::LASSOSELECT)) { controls.selectedTool = DrawingProgramToolType::LASSOSELECT; } - if(t.gui.svg_icon_button("Edit Toolbar Button", "data/icons/cursor.svg", controls.selectedTool == DrawingProgramToolType::EDIT)) { controls.selectedTool = DrawingProgramToolType::EDIT; } - if(t.gui.svg_icon_button("Inkdropper Toolbar Button", "data/icons/eyedropper.svg", controls.selectedTool == DrawingProgramToolType::INKDROPPER)) { controls.selectedTool = DrawingProgramToolType::INKDROPPER; } - if(t.gui.svg_icon_button("Screenshot Toolbar Button", "data/icons/camera.svg", controls.selectedTool == DrawingProgramToolType::SCREENSHOT)) { controls.selectedTool = DrawingProgramToolType::SCREENSHOT; } + if(t.gui.svg_icon_button("Brush Toolbar Button", "data/icons/brush.svg", drawTool->get_type() == DrawingProgramToolType::BRUSH)) { switch_to_tool(DrawingProgramToolType::BRUSH); } + if(t.gui.svg_icon_button("Eraser Toolbar Button", "data/icons/eraser.svg", drawTool->get_type() == DrawingProgramToolType::ERASER)) { switch_to_tool(DrawingProgramToolType::ERASER); } + if(t.gui.svg_icon_button("Text Toolbar Button", "data/icons/text.svg", drawTool->get_type() == DrawingProgramToolType::TEXTBOX)) { switch_to_tool(DrawingProgramToolType::TEXTBOX); } + if(t.gui.svg_icon_button("Ellipse Toolbar Button", "data/icons/circle.svg", drawTool->get_type() == DrawingProgramToolType::ELLIPSE)) { switch_to_tool(DrawingProgramToolType::ELLIPSE); } + if(t.gui.svg_icon_button("Rect Toolbar Button", "data/icons/rectangle.svg", drawTool->get_type() == DrawingProgramToolType::RECTANGLE)) { switch_to_tool(DrawingProgramToolType::RECTANGLE); } + if(t.gui.svg_icon_button("RectSelect Toolbar Button", "data/icons/rectselect.svg", drawTool->get_type() == DrawingProgramToolType::RECTSELECT)) { switch_to_tool(DrawingProgramToolType::RECTSELECT); } + if(t.gui.svg_icon_button("LassoSelect Toolbar Button", "data/icons/close.svg", drawTool->get_type() == DrawingProgramToolType::LASSOSELECT)) { switch_to_tool(DrawingProgramToolType::LASSOSELECT); } + if(t.gui.svg_icon_button("Edit Toolbar Button", "data/icons/cursor.svg", drawTool->get_type() == DrawingProgramToolType::EDIT)) { switch_to_tool(DrawingProgramToolType::EDIT); } + if(t.gui.svg_icon_button("Inkdropper Toolbar Button", "data/icons/eyedropper.svg", drawTool->get_type() == DrawingProgramToolType::INKDROPPER)) { switch_to_tool(DrawingProgramToolType::INKDROPPER); } + if(t.gui.svg_icon_button("Screenshot Toolbar Button", "data/icons/camera.svg", drawTool->get_type() == DrawingProgramToolType::SCREENSHOT)) { switch_to_tool(DrawingProgramToolType::SCREENSHOT); } CLAY({.layout = {.sizing = {.width = CLAY_SIZING_FIXED(40), .height = CLAY_SIZING_FIXED(40)}}}) { if(t.gui.color_button("Foreground Color", &controls.foregroundColor, &controls.foregroundColor == t.colorLeft)) { t.color_selector_left(&controls.foregroundColor == t.colorLeft ? nullptr : &controls.foregroundColor); @@ -213,7 +213,7 @@ void DrawingProgram::toolbar_gui() { void DrawingProgram::tool_options_gui() { Toolbar& t = world.main.toolbar; - float minGUIWidth = controls.selectedTool == DrawingProgramToolType::SCREENSHOT ? 300 : 200; + float minGUIWidth = drawTool->get_type() == DrawingProgramToolType::SCREENSHOT ? 300 : 200; CLAY({ .layout = { .sizing = {.width = CLAY_SIZING_FIT(minGUIWidth), .height = CLAY_SIZING_FIT(0)}, @@ -232,21 +232,15 @@ void DrawingProgram::tool_options_gui() { } void DrawingProgram::update() { - if(controls.selectedTool == DrawingProgramToolType::BRUSH && world.main.input.pen.isEraser && !temporaryEraser) { - controls.selectedTool = DrawingProgramToolType::ERASER; + if(drawTool->get_type() == DrawingProgramToolType::BRUSH && world.main.input.pen.isEraser && !temporaryEraser) { + switch_to_tool(DrawingProgramToolType::ERASER); temporaryEraser = true; } - else if(controls.selectedTool == DrawingProgramToolType::ERASER && !world.main.input.pen.isEraser && temporaryEraser) { - controls.selectedTool = DrawingProgramToolType::BRUSH; + else if(drawTool->get_type() == DrawingProgramToolType::ERASER && !world.main.input.pen.isEraser && temporaryEraser) { + switch_to_tool(DrawingProgramToolType::BRUSH); temporaryEraser = false; } - if(controls.selectedTool != controls.previousSelected) { - reset_tools(); - drawTool = DrawingProgramToolBase::allocate_tool_type(*this, controls.selectedTool); - controls.previousSelected = controls.selectedTool; - } - controls.cursorHoveringOverCanvas = !world.main.toolbar.io->hoverObstructed; controls.leftClick = controls.cursorHoveringOverCanvas && world.main.input.mouse.leftClicks; if(controls.leftClick) { @@ -277,23 +271,23 @@ void DrawingProgram::update() { drag_drop_update(); if(world.main.input.key(InputManager::KEY_DRAW_TOOL_BRUSH).pressed) - controls.selectedTool = DrawingProgramToolType::BRUSH; + switch_to_tool(DrawingProgramToolType::BRUSH); else if(world.main.input.key(InputManager::KEY_DRAW_TOOL_ERASER).pressed) - controls.selectedTool = DrawingProgramToolType::ERASER; + switch_to_tool(DrawingProgramToolType::ERASER); else if(world.main.input.key(InputManager::KEY_DRAW_TOOL_RECTSELECT).pressed) - controls.selectedTool = DrawingProgramToolType::RECTSELECT; + switch_to_tool(DrawingProgramToolType::RECTSELECT); else if(world.main.input.key(InputManager::KEY_DRAW_TOOL_RECTANGLE).pressed) - controls.selectedTool = DrawingProgramToolType::RECTANGLE; + switch_to_tool(DrawingProgramToolType::RECTANGLE); else if(world.main.input.key(InputManager::KEY_DRAW_TOOL_ELLIPSE).pressed) - controls.selectedTool = DrawingProgramToolType::ELLIPSE; + switch_to_tool(DrawingProgramToolType::ELLIPSE); else if(world.main.input.key(InputManager::KEY_DRAW_TOOL_TEXTBOX).pressed) - controls.selectedTool = DrawingProgramToolType::TEXTBOX; + switch_to_tool(DrawingProgramToolType::TEXTBOX); else if(world.main.input.key(InputManager::KEY_DRAW_TOOL_INKDROPPER).pressed) - controls.selectedTool = DrawingProgramToolType::INKDROPPER; + switch_to_tool(DrawingProgramToolType::INKDROPPER); else if(world.main.input.key(InputManager::KEY_DRAW_TOOL_SCREENSHOT).pressed) - controls.selectedTool = DrawingProgramToolType::SCREENSHOT; + switch_to_tool(DrawingProgramToolType::SCREENSHOT); else if(world.main.input.key(InputManager::KEY_DRAW_TOOL_EDIT).pressed) - controls.selectedTool = DrawingProgramToolType::EDIT; + switch_to_tool(DrawingProgramToolType::EDIT); drawTool->tool_update(); @@ -305,16 +299,23 @@ void DrawingProgram::update() { selection.update(); - if(controls.selectedTool == DrawingProgramToolType::ERASER) { + if(drawTool->get_type() == DrawingProgramToolType::ERASER) { EraserTool* eraserTool = static_cast(drawTool.get()); compCache.test_rebuild_dont_include_set_dont_include_nodes(components.client_list(), eraserTool->erasedComponents, eraserTool->erasedBVHNodes); } - else if(controls.selectedTool == DrawingProgramToolType::RECTSELECT) + else if(drawTool->get_type() == DrawingProgramToolType::RECTSELECT) compCache.test_rebuild_dont_include_set(components.client_list(), selection.get_selected_set()); else compCache.test_rebuild(components.client_list()); } +void DrawingProgram::switch_to_tool(DrawingProgramToolType newToolType) { + if(newToolType != drawTool->get_type()) { + drawTool->switch_tool(drawTool->get_type()); + drawTool = DrawingProgramToolBase::allocate_tool_type(*this, newToolType); + } +} + bool DrawingProgram::prevent_undo_or_redo() { return drawTool->prevent_undo_or_redo(); } @@ -334,11 +335,11 @@ SkPaint DrawingProgram::select_tool_line_paint() { } void DrawingProgram::force_rebuild_cache() { - if(controls.selectedTool == DrawingProgramToolType::ERASER) { + if(drawTool->get_type() == DrawingProgramToolType::ERASER) { EraserTool* eraserTool = static_cast(drawTool.get()); compCache.test_rebuild_dont_include_set_dont_include_nodes(components.client_list(), eraserTool->erasedComponents, eraserTool->erasedBVHNodes, true); } - else if(controls.selectedTool == DrawingProgramToolType::RECTSELECT) + else if(drawTool->get_type() == DrawingProgramToolType::RECTSELECT) compCache.test_rebuild_dont_include_set(components.client_list(), selection.get_selected_set(), true); else compCache.test_rebuild(components.client_list(), true); @@ -409,10 +410,6 @@ void DrawingProgram::add_file_to_canvas_by_data(const std::string& fileName, std add_undo_place_component(objAdd); } -void DrawingProgram::reset_tools() { - drawTool->reset_tool(); -} - void DrawingProgram::initialize_draw_data(cereal::PortableBinaryInputArchive& a) { uint64_t compCount; a(compCount); @@ -444,7 +441,6 @@ void DrawingProgram::add_undo_place_component(const CollabListType::ObjectInfoPt [&, objToUndo]() { objToUndo->obj->client_send_erase(*this); components.client_erase(objToUndo); - reset_tools(); return true; }, [&, objToUndo]() { @@ -452,7 +448,6 @@ void DrawingProgram::add_undo_place_component(const CollabListType::ObjectInfoPt return false; components.client_insert(objToUndo); objToUndo->obj->client_send_place(*this); - reset_tools(); return true; } }); @@ -486,8 +481,6 @@ void DrawingProgram::add_undo_place_components(const std::unordered_set, std::shared_ptr> delayedUpdateComponents; Vector4f* get_foreground_color_ptr(); + + void switch_to_tool(DrawingProgramToolType newToolType); private: void client_erase_set(std::unordered_set erasedComponents); // The set might be modified while this is being called, so dont pass by reference @@ -65,8 +67,6 @@ class DrawingProgram { void add_file_to_canvas_by_path_execute(const std::string& filePath, Vector2f dropPos); - void reset_tools(); - void drag_drop_update(); void draw_drag_circle(SkCanvas* canvas, const Vector2f& pos, const SkColor4f& c, const DrawData& drawData, float radiusMultiplier = 1.0f); @@ -88,8 +88,6 @@ class DrawingProgram { Vector4f foregroundColor{0.9f, 0.9f, 0.9f, 1.0f}; Vector4f backgroundColor{0.0f, 0.0f, 0.0f, 1.0f}; - DrawingProgramToolType selectedTool = DrawingProgramToolType::BRUSH; - DrawingProgramToolType previousSelected = DrawingProgramToolType::BRUSH; WorldVec previousMouseWorldPos = {0, 0}; WorldVec currentMouseWorldPos = {0, 0}; bool leftClick = false; diff --git a/src/DrawingProgram/DrawingProgramSelection.cpp b/src/DrawingProgram/DrawingProgramSelection.cpp index 65e90f0..cc249bb 100644 --- a/src/DrawingProgram/DrawingProgramSelection.cpp +++ b/src/DrawingProgram/DrawingProgramSelection.cpp @@ -133,8 +133,6 @@ void DrawingProgramSelection::deselect_all() { DrawComponent::client_send_transform_many(drawP, transformsToSend); - drawP.reset_tools(); - if(!isSingleThread) drawP.force_rebuild_cache(); @@ -159,8 +157,6 @@ void DrawingProgramSelection::deselect_all() { DrawComponent::client_send_transform_many(drawP, transformsToSend); - drawP.reset_tools(); - if(!isSingleThread) drawP.force_rebuild_cache(); @@ -326,7 +322,7 @@ void DrawingProgramSelection::update() { void DrawingProgramSelection::paste_clipboard() { auto& clipboard = drawP.world.main.clipboard; - drawP.controls.selectedTool = DrawingProgramToolType::RECTSELECT; + drawP.switch_to_tool(DrawingProgramToolType::RECTSELECT); uint64_t allPlacement = drawP.components.client_list().size(); std::vector> placedComponents; diff --git a/src/DrawingProgram/DrawingProgramToolBase.hpp b/src/DrawingProgram/DrawingProgramToolBase.hpp index 6ab9488..b0e79e7 100644 --- a/src/DrawingProgram/DrawingProgramToolBase.hpp +++ b/src/DrawingProgram/DrawingProgramToolBase.hpp @@ -24,7 +24,7 @@ class DrawingProgramToolBase { virtual void gui_toolbox() = 0; virtual void tool_update() = 0; virtual void draw(SkCanvas* canvas, const DrawData& drawData) = 0; - virtual void reset_tool() = 0; + virtual void switch_tool(DrawingProgramToolType newTool) = 0; virtual bool prevent_undo_or_redo() = 0; virtual ~DrawingProgramToolBase(); static std::unique_ptr allocate_tool_type(DrawingProgram& drawP, DrawingProgramToolType t); diff --git a/src/DrawingProgram/EditTool.cpp b/src/DrawingProgram/EditTool.cpp index 061ece1..2f9d41f 100644 --- a/src/DrawingProgram/EditTool.cpp +++ b/src/DrawingProgram/EditTool.cpp @@ -45,7 +45,7 @@ void EditTool::add_point_handle(const HandleData& handle) { controls.pointHandles.emplace_back(handle); } -void EditTool::reset_tool() { +void EditTool::switch_tool(DrawingProgramToolType newTool) { auto a = controls.compToEdit.lock(); if(a && a->collabListInfo.lock()) { controls.compEditTool->commit_edit_updates(a, controls.prevData); @@ -157,10 +157,10 @@ void EditTool::tool_update() { bool shouldNotReset = controls.compEditTool->edit_update(a); if(!shouldNotReset || clickedAway) - reset_tool(); + switch_tool(get_type()); } else - reset_tool(); + switch_tool(get_type()); } } diff --git a/src/DrawingProgram/EditTool.hpp b/src/DrawingProgram/EditTool.hpp index b8f704a..710d49b 100644 --- a/src/DrawingProgram/EditTool.hpp +++ b/src/DrawingProgram/EditTool.hpp @@ -19,7 +19,7 @@ class EditTool : public DrawingProgramToolBase { virtual DrawingProgramToolType get_type() override; virtual void gui_toolbox() override; virtual void tool_update() override; - virtual void reset_tool() override; + virtual void switch_tool(DrawingProgramToolType newTool) override; virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; virtual bool prevent_undo_or_redo() override; diff --git a/src/DrawingProgram/EllipseDrawEditTool.cpp b/src/DrawingProgram/EllipseDrawEditTool.cpp index a766636..5290610 100644 --- a/src/DrawingProgram/EllipseDrawEditTool.cpp +++ b/src/DrawingProgram/EllipseDrawEditTool.cpp @@ -64,14 +64,12 @@ void EllipseDrawEditTool::commit_edit_updates(const std::shared_ptrd = pData; a->client_send_update(drawP); a->commit_update(drawP); - drawP.reset_tools(); return true; }, [&, a, cData]() { a->d = cData; a->client_send_update(drawP); a->commit_update(drawP); - drawP.reset_tools(); return true; } }); diff --git a/src/DrawingProgram/EllipseDrawTool.cpp b/src/DrawingProgram/EllipseDrawTool.cpp index d081096..d059827 100644 --- a/src/DrawingProgram/EllipseDrawTool.cpp +++ b/src/DrawingProgram/EllipseDrawTool.cpp @@ -31,9 +31,8 @@ void EllipseDrawTool::gui_toolbox() { t.gui.pop_id(); } -void EllipseDrawTool::reset_tool() { +void EllipseDrawTool::switch_tool(DrawingProgramToolType newTool) { commit(); - controls.drawStage = 0; } void EllipseDrawTool::tool_update() { diff --git a/src/DrawingProgram/EllipseDrawTool.hpp b/src/DrawingProgram/EllipseDrawTool.hpp index 1dfc6e4..becd1cc 100644 --- a/src/DrawingProgram/EllipseDrawTool.hpp +++ b/src/DrawingProgram/EllipseDrawTool.hpp @@ -12,7 +12,7 @@ class EllipseDrawTool : public DrawingProgramToolBase { virtual DrawingProgramToolType get_type() override; virtual void gui_toolbox() override; virtual void tool_update() override; - virtual void reset_tool() override; + virtual void switch_tool(DrawingProgramToolType newTool) override; virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; virtual bool prevent_undo_or_redo() override; private: diff --git a/src/DrawingProgram/EraserTool.cpp b/src/DrawingProgram/EraserTool.cpp index dd52034..0059203 100644 --- a/src/DrawingProgram/EraserTool.cpp +++ b/src/DrawingProgram/EraserTool.cpp @@ -19,7 +19,7 @@ void EraserTool::gui_toolbox() { t.gui.pop_id(); } -void EraserTool::reset_tool() { +void EraserTool::switch_tool(DrawingProgramToolType newTool) { if(!erasedComponents.empty()) { DrawingProgramCache::move_components_from_bvh_nodes_to_set(erasedComponents, erasedBVHNodes); drawP.client_erase_set(erasedComponents); @@ -60,7 +60,7 @@ void EraserTool::tool_update() { }); } else - reset_tool(); + switch_tool(get_type()); } bool EraserTool::prevent_undo_or_redo() { diff --git a/src/DrawingProgram/EraserTool.hpp b/src/DrawingProgram/EraserTool.hpp index 63bf668..6ae6032 100644 --- a/src/DrawingProgram/EraserTool.hpp +++ b/src/DrawingProgram/EraserTool.hpp @@ -12,7 +12,7 @@ class EraserTool : public DrawingProgramToolBase { virtual DrawingProgramToolType get_type() override; virtual void gui_toolbox() override; virtual void tool_update() override; - virtual void reset_tool() override; + virtual void switch_tool(DrawingProgramToolType newTool) override; virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; virtual bool prevent_undo_or_redo() override; diff --git a/src/DrawingProgram/InkDropperTool.cpp b/src/DrawingProgram/InkDropperTool.cpp index 5ef79b5..fce29f7 100644 --- a/src/DrawingProgram/InkDropperTool.cpp +++ b/src/DrawingProgram/InkDropperTool.cpp @@ -85,5 +85,5 @@ bool InkDropperTool::prevent_undo_or_redo() { void InkDropperTool::draw(SkCanvas* canvas, const DrawData& drawData) { } -void InkDropperTool::reset_tool() { +void InkDropperTool::switch_tool(DrawingProgramToolType newTool) { } diff --git a/src/DrawingProgram/InkDropperTool.hpp b/src/DrawingProgram/InkDropperTool.hpp index 3403a71..46c9fc8 100644 --- a/src/DrawingProgram/InkDropperTool.hpp +++ b/src/DrawingProgram/InkDropperTool.hpp @@ -11,5 +11,5 @@ class InkDropperTool : public DrawingProgramToolBase { virtual void tool_update() override; virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; virtual bool prevent_undo_or_redo() override; - virtual void reset_tool() override; + virtual void switch_tool(DrawingProgramToolType newTool) override; }; diff --git a/src/DrawingProgram/LassoSelectTool.cpp b/src/DrawingProgram/LassoSelectTool.cpp index 0c1ef8f..2f22daf 100644 --- a/src/DrawingProgram/LassoSelectTool.cpp +++ b/src/DrawingProgram/LassoSelectTool.cpp @@ -41,7 +41,7 @@ void LassoSelectTool::gui_toolbox() { drawP.world.main.toolbar.gui.text_label_centered("Lasso Select"); } -void LassoSelectTool::reset_tool() { +void LassoSelectTool::switch_tool(DrawingProgramToolType newTool) { drawP.selection.deselect_all(); controls.lassoPoints.clear(); controls = LassoSelectControls(); @@ -53,10 +53,10 @@ void LassoSelectTool::tool_update() { if(drawP.controls.leftClick) { if(drawP.selection.is_something_selected()) { if(!drawP.selection.mouse_collided_with_selection()) - reset_tool(); + switch_tool(get_type()); } else { - reset_tool(); + switch_tool(get_type()); controls.coords = drawP.world.drawData.cam.c; controls.lassoPoints.emplace_back(controls.coords.get_mouse_pos(drawP.world)); controls.selectionMode = 1; @@ -96,7 +96,7 @@ void LassoSelectTool::tool_update() { controls.selectionMode = 0; } else - reset_tool(); + switch_tool(get_type()); } break; } diff --git a/src/DrawingProgram/LassoSelectTool.hpp b/src/DrawingProgram/LassoSelectTool.hpp index 5ba00df..0915888 100644 --- a/src/DrawingProgram/LassoSelectTool.hpp +++ b/src/DrawingProgram/LassoSelectTool.hpp @@ -15,7 +15,7 @@ class LassoSelectTool : public DrawingProgramToolBase { virtual void gui_toolbox() override; virtual void tool_update() override; virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; - virtual void reset_tool() override; + virtual void switch_tool(DrawingProgramToolType newTool) override; virtual bool prevent_undo_or_redo() override; private: diff --git a/src/DrawingProgram/RectDrawEditTool.cpp b/src/DrawingProgram/RectDrawEditTool.cpp index 4ee0098..d8c87a9 100644 --- a/src/DrawingProgram/RectDrawEditTool.cpp +++ b/src/DrawingProgram/RectDrawEditTool.cpp @@ -61,14 +61,12 @@ void RectDrawEditTool::commit_edit_updates(const std::shared_ptr& a->d = pData; a->client_send_update(drawP); a->commit_update(drawP); - drawP.reset_tools(); return true; }, [&, a, cData]() { a->d = cData; a->client_send_update(drawP); a->commit_update(drawP); - drawP.reset_tools(); return true; } }); diff --git a/src/DrawingProgram/RectDrawTool.cpp b/src/DrawingProgram/RectDrawTool.cpp index 55e907b..321cadf 100644 --- a/src/DrawingProgram/RectDrawTool.cpp +++ b/src/DrawingProgram/RectDrawTool.cpp @@ -26,7 +26,7 @@ void RectDrawTool::gui_toolbox() { t.gui.pop_id(); } -void RectDrawTool::reset_tool() { +void RectDrawTool::switch_tool(DrawingProgramToolType newTool) { commit_rectangle(); controls.drawStage = 0; } diff --git a/src/DrawingProgram/RectDrawTool.hpp b/src/DrawingProgram/RectDrawTool.hpp index 42b6254..24dab98 100644 --- a/src/DrawingProgram/RectDrawTool.hpp +++ b/src/DrawingProgram/RectDrawTool.hpp @@ -12,7 +12,7 @@ class RectDrawTool : public DrawingProgramToolBase { virtual DrawingProgramToolType get_type() override; virtual void gui_toolbox() override; virtual void tool_update() override; - virtual void reset_tool() override; + virtual void switch_tool(DrawingProgramToolType newTool) override; virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; virtual bool prevent_undo_or_redo() override; private: diff --git a/src/DrawingProgram/RectSelectTool.cpp b/src/DrawingProgram/RectSelectTool.cpp index f9c3256..be26497 100644 --- a/src/DrawingProgram/RectSelectTool.cpp +++ b/src/DrawingProgram/RectSelectTool.cpp @@ -20,7 +20,7 @@ void RectSelectTool::gui_toolbox() { drawP.world.main.toolbar.gui.text_label_centered("Rectangle Select"); } -void RectSelectTool::reset_tool() { +void RectSelectTool::switch_tool(DrawingProgramToolType newTool) { drawP.selection.deselect_all(); controls = RectSelectControls(); } @@ -31,10 +31,10 @@ void RectSelectTool::tool_update() { if(drawP.controls.leftClick) { if(drawP.selection.is_something_selected()) { if(!drawP.selection.mouse_collided_with_selection()) - reset_tool(); + switch_tool(get_type()); } else { - reset_tool(); + switch_tool(get_type()); controls.coords = drawP.world.drawData.cam.c; controls.selectStartAt = controls.coords.get_mouse_pos(drawP.world); controls.selectionMode = 1; diff --git a/src/DrawingProgram/RectSelectTool.hpp b/src/DrawingProgram/RectSelectTool.hpp index 6391736..654e389 100644 --- a/src/DrawingProgram/RectSelectTool.hpp +++ b/src/DrawingProgram/RectSelectTool.hpp @@ -13,7 +13,7 @@ class RectSelectTool : public DrawingProgramToolBase { virtual void gui_toolbox() override; virtual void tool_update() override; virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; - virtual void reset_tool() override; + virtual void switch_tool(DrawingProgramToolType newTool) override; virtual bool prevent_undo_or_redo() override; private: diff --git a/src/DrawingProgram/ScreenshotTool.cpp b/src/DrawingProgram/ScreenshotTool.cpp index bcc93b2..d97ec0a 100644 --- a/src/DrawingProgram/ScreenshotTool.cpp +++ b/src/DrawingProgram/ScreenshotTool.cpp @@ -210,7 +210,7 @@ void ScreenshotTool::take_screenshot_area_hw(const sk_sp& surface, Sk throw std::runtime_error("[ScreenshotTool::take_screenshot_area_hw] Error copy pixmap"); } -void ScreenshotTool::reset_tool() { +void ScreenshotTool::switch_tool(DrawingProgramToolType newTool) { controls.selectionMode = 0; } diff --git a/src/DrawingProgram/ScreenshotTool.hpp b/src/DrawingProgram/ScreenshotTool.hpp index bf6978e..6ea30aa 100644 --- a/src/DrawingProgram/ScreenshotTool.hpp +++ b/src/DrawingProgram/ScreenshotTool.hpp @@ -14,7 +14,7 @@ class ScreenshotTool : public DrawingProgramToolBase { virtual void gui_toolbox() override; virtual void tool_update() override; virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; - virtual void reset_tool() override; + virtual void switch_tool(DrawingProgramToolType newTool) override; virtual bool prevent_undo_or_redo() override; private: void commit_rect(); diff --git a/src/DrawingProgram/TextBoxEditTool.cpp b/src/DrawingProgram/TextBoxEditTool.cpp index b19ad57..6cd4b97 100644 --- a/src/DrawingProgram/TextBoxEditTool.cpp +++ b/src/DrawingProgram/TextBoxEditTool.cpp @@ -44,7 +44,6 @@ void TextBoxEditTool::commit_edit_updates(const std::shared_ptr& a->d.editing = false; a->client_send_update(drawP); a->commit_update(drawP); - drawP.reset_tools(); return true; }, [&, a, cData]() { @@ -53,7 +52,6 @@ void TextBoxEditTool::commit_edit_updates(const std::shared_ptr& a->d.editing = false; a->client_send_update(drawP); a->commit_update(drawP); - drawP.reset_tools(); return true; } }); diff --git a/src/DrawingProgram/TextBoxTool.cpp b/src/DrawingProgram/TextBoxTool.cpp index ff71fd2..2770122 100644 --- a/src/DrawingProgram/TextBoxTool.cpp +++ b/src/DrawingProgram/TextBoxTool.cpp @@ -25,7 +25,7 @@ void TextBoxTool::gui_toolbox() { t.gui.pop_id(); } -void TextBoxTool::reset_tool() { +void TextBoxTool::switch_tool(DrawingProgramToolType newTool) { commit(); controls.drawStage = 0; } @@ -64,7 +64,6 @@ void TextBoxTool::tool_update() { if(!drawP.controls.leftClickHeld) { auto i = controls.intermediateItem; commit(); - drawP.reset_tools(); // NOTE: CHANGE THIS //drawP.controls.selectedTool = DrawingProgram::TOOL_EDIT; //drawP.controls.previousSelected = DrawingProgram::TOOL_EDIT; diff --git a/src/DrawingProgram/TextBoxTool.hpp b/src/DrawingProgram/TextBoxTool.hpp index 3e7fa95..1e5d295 100644 --- a/src/DrawingProgram/TextBoxTool.hpp +++ b/src/DrawingProgram/TextBoxTool.hpp @@ -13,7 +13,7 @@ class TextBoxTool : public DrawingProgramToolBase { virtual void gui_toolbox() override; virtual void tool_update() override; virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; - virtual void reset_tool() override; + virtual void switch_tool(DrawingProgramToolType newTool) override; virtual bool prevent_undo_or_redo() override; private: void edit_text(std::function toRun, const std::shared_ptr& textBox);