Change how tools get switched

This commit is contained in:
Yousef Khadadeh 2025-08-02 20:39:21 +03:00
parent 90374da228
commit c2301ae9f5
27 changed files with 68 additions and 96 deletions

View file

@ -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) {

View file

@ -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:

View file

@ -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<Clay_Color>(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<EraserTool*>(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<EraserTool*>(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<CollabLi
DrawComponent::client_send_erase_set(*this, idsToErase);
components.client_erase_set(objSetToUndo);
reset_tools();
return true;
},
[&, objSetToUndo = objSetToUndo]() {
@ -503,8 +496,6 @@ void DrawingProgram::add_undo_place_components(const std::unordered_set<CollabLi
components.client_insert_ordered_vector(sortedObjects);
DrawComponent::client_send_place_many(*this, sortedObjects);
reset_tools();
return true;
}
});
@ -525,8 +516,6 @@ void DrawingProgram::add_undo_erase_components(const std::unordered_set<CollabLi
components.client_insert_ordered_vector(sortedObjects);
DrawComponent::client_send_place_many(*this, sortedObjects);
reset_tools();
return true;
},
[&, objSetToUndo = objSetToUndo]() {
@ -541,8 +530,6 @@ void DrawingProgram::add_undo_erase_components(const std::unordered_set<CollabLi
DrawComponent::client_send_erase_set(*this, idsToErase);
components.client_erase_set(objSetToUndo);
reset_tools();
return true;
}
});

View file

@ -50,6 +50,8 @@ class DrawingProgram {
std::unordered_map<std::shared_ptr<DrawComponent>, std::shared_ptr<DrawComponent>> delayedUpdateComponents;
Vector4f* get_foreground_color_ptr();
void switch_to_tool(DrawingProgramToolType newToolType);
private:
void client_erase_set(std::unordered_set<CollabListType::ObjectInfoPtr> 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;

View file

@ -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<std::shared_ptr<DrawComponent>> placedComponents;

View file

@ -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<DrawingProgramToolBase> allocate_tool_type(DrawingProgram& drawP, DrawingProgramToolType t);

View file

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

View file

@ -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;

View file

@ -64,14 +64,12 @@ void EllipseDrawEditTool::commit_edit_updates(const std::shared_ptr<DrawComponen
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;
}
});

View file

@ -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() {

View file

@ -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:

View file

@ -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() {

View file

@ -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;

View file

@ -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) {
}

View file

@ -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;
};

View file

@ -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;
}

View file

@ -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:

View file

@ -61,14 +61,12 @@ void RectDrawEditTool::commit_edit_updates(const std::shared_ptr<DrawComponent>&
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;
}
});

View file

@ -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;
}

View file

@ -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:

View file

@ -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;

View file

@ -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:

View file

@ -210,7 +210,7 @@ void ScreenshotTool::take_screenshot_area_hw(const sk_sp<SkSurface>& 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;
}

View file

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

View file

@ -44,7 +44,6 @@ void TextBoxEditTool::commit_edit_updates(const std::shared_ptr<DrawComponent>&
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<DrawComponent>&
a->d.editing = false;
a->client_send_update(drawP);
a->commit_update(drawP);
drawP.reset_tools();
return true;
}
});

View file

@ -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;

View file

@ -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<void()> toRun, const std::shared_ptr<DrawTextBox>& textBox);