Change how tools get switched
This commit is contained in:
parent
90374da228
commit
c2301ae9f5
27 changed files with 68 additions and 96 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue