Added phone tool settings

This commit is contained in:
Yousef Khadadeh 2026-04-30 12:09:03 +03:00
parent f1d7cbf896
commit c90c09b169
42 changed files with 479 additions and 57 deletions

View file

@ -398,36 +398,6 @@ void DrawingProgram::toolbar_gui(Toolbar& t) {
});
}
void DrawingProgram::phone_bottom_toolbar_gui(PhoneDrawingProgramScreen& t) {
using namespace GUIStuff;
using namespace ElementHelpers;
GUIManager& gui = world.main.g.gui;
auto tool_button = [&](const char* id, const std::string& svgPath, DrawingProgramToolType toolType) {
svg_icon_button(gui, id, svgPath, {
.drawType = SelectableButton::DrawType::TRANSPARENT_ALL,
.isSelected = drawTool->get_type() == toolType,
.onClick = [&, toolType] {
switch_to_tool(toolType);
}
});
};
tool_button("Brush Toolbar Button", "data/icons/brush.svg", DrawingProgramToolType::BRUSH);
tool_button("Eraser Toolbar Button", "data/icons/eraser.svg", DrawingProgramToolType::ERASER);
tool_button("Line Toolbar Button", "data/icons/line.svg", DrawingProgramToolType::LINE);
tool_button("Text Toolbar Button", "data/icons/text.svg", DrawingProgramToolType::TEXTBOX);
tool_button("Ellipse Toolbar Button", "data/icons/circle.svg", DrawingProgramToolType::ELLIPSE);
tool_button("Rect Toolbar Button", "data/icons/rectangle.svg", DrawingProgramToolType::RECTANGLE);
tool_button("RectSelect Toolbar Button", "data/icons/rectselect.svg", DrawingProgramToolType::RECTSELECT);
tool_button("LassoSelect Toolbar Button", "data/icons/lassoselect.svg", DrawingProgramToolType::LASSOSELECT);
tool_button("Edit Toolbar Button", "data/icons/cursor.svg", DrawingProgramToolType::EDIT);
tool_button("Eyedropper Toolbar Button", "data/icons/eyedropper.svg", DrawingProgramToolType::EYEDROPPER);
tool_button("Zoom Canvas Toolbar Button", "data/icons/zoom.svg", DrawingProgramToolType::ZOOM);
tool_button("Pan Canvas Toolbar Button", "data/icons/hand.svg", DrawingProgramToolType::PAN);
}
void DrawingProgram::right_click_popup_gui(Toolbar& t) {
if(rightClickPopupLocation.has_value())
drawTool->right_click_popup_gui(t, rightClickPopupLocation.value());

View file

@ -29,7 +29,6 @@ class DrawingProgram {
void toolbar_gui(Toolbar& t);
void tool_options_gui(Toolbar& t);
void right_click_popup_gui(Toolbar& t);
void phone_bottom_toolbar_gui(PhoneDrawingProgramScreen& t);
void update();
void scale_up(const WorldScalar& scaleUpAmount);
void draw(SkCanvas* canvas, const DrawData& drawData);
@ -78,6 +77,8 @@ class DrawingProgram {
void set_right_click_popup_location(const Vector2f& newLoc);
void clear_right_click_popup();
std::unique_ptr<DrawingProgramToolBase> drawTool;
private:
void process_transform_message(const std::vector<std::pair<NetworkingObjects::NetObjID, CoordSpaceHelper>>& transforms);
@ -129,7 +130,6 @@ class DrawingProgram {
};
std::vector<DroppedDownloadingFile> droppedDownloadingFiles;
std::unique_ptr<DrawingProgramToolBase> drawTool;
std::optional<Vector2f> rightClickPopupLocation;

View file

@ -60,6 +60,21 @@ void DrawingProgramSelection::selection_gui(Toolbar& t) {
});
}
void DrawingProgramSelection::phone_selection_gui(PhoneDrawingProgramScreen& t) {
using namespace GUIStuff;
using namespace ElementHelpers;
auto& gui = drawP.world.main.g.gui;
gui.new_id("general selection gui", [&] {
text_label(gui, "Select from:");
radio_button_selector(gui, "layer selector", &drawP.controls.layerSelector, {
{"Layer being edited", DrawingProgramLayerManager::LayerSelector::LAYER_BEING_EDITED},
{"All visible layers", DrawingProgramLayerManager::LayerSelector::ALL_VISIBLE_LAYERS}
});
});
}
void DrawingProgramSelection::update_selection_stroke_color() {
if(strokeColorChangeData.oldColor != strokeColorChangeData.newColor) {
for(auto& c : selectedSet) {

View file

@ -5,11 +5,13 @@
#include "../InputManager.hpp"
class DrawingProgram;
class PhoneDrawingProgramScreen;
class DrawingProgramSelection {
public:
DrawingProgramSelection(DrawingProgram& initDrawP);
void selection_gui(Toolbar& t);
void phone_selection_gui(PhoneDrawingProgramScreen& t);
void add_from_cam_coord_collider_to_selection(const SCollision::ColliderCollection<float>& cC, DrawingProgramLayerManager::LayerSelector layerSelector, bool frontObjectOnly);
void remove_from_cam_coord_collider_to_selection(const SCollision::ColliderCollection<float>& cC, DrawingProgramLayerManager::LayerSelector layerSelector, bool frontObjectOnly);
void erase_component(CanvasComponentContainer::ObjInfo* objToCheck);

View file

@ -183,6 +183,18 @@ void BrushTool::gui_toolbox(Toolbar& t) {
});
}
void BrushTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
using namespace GUIStuff;
using namespace ElementHelpers;
auto& gui = drawP.world.main.g.gui;
gui.new_id("brush tool", [&] {
checkbox_boolean_field(gui, "hasroundcaps", "Round Caps", &drawP.world.main.toolConfig.brush.hasRoundCaps);
drawP.world.main.toolConfig.relative_width_gui(drawP, "Size");
});
}
void BrushTool::right_click_popup_gui(Toolbar& t, Vector2f popupPos) {
t.paint_popup(popupPos);
}

View file

@ -17,6 +17,7 @@ class BrushTool : public DrawingProgramToolBase {
BrushTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void tool_update() override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;

View file

@ -5,6 +5,7 @@
#include "../../InputManager.hpp"
class DrawingProgram;
class PhoneDrawingProgramScreen;
#define MINIMUM_DISTANCE_BETWEEN_BOUNDS 10.0f
@ -30,6 +31,7 @@ class DrawingProgramToolBase {
DrawingProgramToolBase(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() = 0;
virtual void gui_toolbox(Toolbar& t) = 0;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) = 0;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) = 0;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) = 0;
virtual void tool_update() = 0;

View file

@ -39,6 +39,17 @@ void EditTool::gui_toolbox(Toolbar& t) {
}
}
void EditTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
using namespace GUIStuff;
using namespace ElementHelpers;
auto& gui = drawP.world.main.g.gui;
gui.new_id("edit tool", [&] {
text_label_centered(gui, "Edit");
});
}
void EditTool::erase_component(CanvasComponentContainer::ObjInfo* erasedComp) {
if(erasedComp == objInfoBeingEdited)
switch_tool(get_type());

View file

@ -20,6 +20,7 @@ class EditTool : public DrawingProgramToolBase {
EditTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void tool_update() override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;

View file

@ -39,6 +39,24 @@ void EllipseDrawTool::gui_toolbox(Toolbar& t) {
});
}
void EllipseDrawTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
using namespace GUIStuff;
using namespace ElementHelpers;
auto& gui = drawP.world.main.g.gui;
auto& toolConfig = drawP.world.main.toolConfig;
auto& fillStrokeMode = toolConfig.ellipseDraw.fillStrokeMode;
gui.new_id("ellipse draw tool", [&] {
radio_button_selector(gui, "fill type", &fillStrokeMode, {
{"Fill only", 0},
{"Outline only", 1},
{"Fill and Outline", 2}
});
if(fillStrokeMode == 1 || fillStrokeMode == 2)
toolConfig.relative_width_gui(drawP, "Outline Size");
});
}
void EllipseDrawTool::input_mouse_button_on_canvas_callback(const InputManager::MouseButtonCallbackArgs& button) {
if(button.button == InputManager::MouseButton::LEFT) {
if(button.down && drawP.layerMan.is_a_layer_being_edited() && !objInfoBeingEdited && !drawP.world.main.g.gui.cursor_obstructed()) {

View file

@ -11,6 +11,7 @@ class EllipseDrawTool : public DrawingProgramToolBase {
EllipseDrawTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;
virtual void tool_update() override;

View file

@ -32,6 +32,22 @@ void EraserTool::gui_toolbox(Toolbar& t) {
});
}
void EraserTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
using namespace GUIStuff;
using namespace ElementHelpers;
auto& gui = drawP.world.main.g.gui;
gui.new_id("eraser tool", [&] {
drawP.world.main.toolConfig.relative_width_gui(drawP, "Size");
text_label(gui, "Erase from:");
radio_button_selector(gui, "layer selector", &drawP.controls.layerSelector, {
{"Layer being edited", DrawingProgramLayerManager::LayerSelector::LAYER_BEING_EDITED},
{"All visible layers", DrawingProgramLayerManager::LayerSelector::ALL_VISIBLE_LAYERS}
});
});
}
void EraserTool::right_click_popup_gui(Toolbar& t, Vector2f popupPos) {
t.paint_popup(popupPos);
}

View file

@ -10,6 +10,7 @@ class EraserTool : public DrawingProgramToolBase {
EraserTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;
virtual void tool_update() override;

View file

@ -42,6 +42,20 @@ void EyeDropperTool::gui_toolbox(Toolbar& t) {
});
}
void EyeDropperTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
using namespace GUIStuff;
using namespace ElementHelpers;
auto& gui = drawP.world.main.g.gui;
auto& selectingStrokeColor = drawP.world.main.toolConfig.eyeDropper.selectingStrokeColor;
gui.new_id("Color select tool", [&] {
radio_button_selector<bool>(gui, "Stroke type", &selectingStrokeColor, {
{"Stroke Color", true},
{"Fill Color", false}
});
});
}
void EyeDropperTool::right_click_popup_gui(Toolbar& t, Vector2f popupPos) {
t.paint_popup(popupPos);
}

View file

@ -8,6 +8,7 @@ class EyeDropperTool : public DrawingProgramToolBase {
EyeDropperTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void tool_update() override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;

View file

@ -161,6 +161,51 @@ void GridModifyTool::gui_toolbox(Toolbar& t) {
});
}
void GridModifyTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
using namespace GUIStuff;
using namespace ElementHelpers;
auto& gui = drawP.world.main.g.gui;
gui.new_id("Grid modify tool", [&] {
NetworkingObjects::NetObjTemporaryPtr<WorldGrid> gLock = grid.lock();
if(gLock) {
WorldGrid& g = *gLock;
input_text_field(gui, "grid name", "Name", &g.name);
checkbox_boolean_field(gui, "Visible", "Visible", &g.visible);
checkbox_boolean_field(gui, "Display in Front", "Display in front of canvas", &g.displayInFront);
std::vector<std::string> listOfGridTypes = {
"Circle Points",
"Square Points",
"Square Lines",
"Horizontal Lines"
};
left_to_right_line_layout(gui, [&]() {
text_label(gui, "Type");
gui.element<DropDown<WorldGrid::GridType>>("filepicker select type", &g.gridType, listOfGridTypes);
});
input_scalar_field<uint32_t>(gui, "Subdivisions", "Subdivisions", &g.subdivisions, 1, 10, {
.onEdit = [&] { g.set_subdivisions(g.subdivisions); }
});
checkbox_boolean_field(gui, "Subdivide outwards", "Subdivide when zooming out", &g.removeDivisionsOutwards, [&] {
g.set_remove_divisions_outwards(g.removeDivisionsOutwards);
});
auto bounded = std::make_shared<bool>(g.bounds.has_value());
checkbox_boolean_field(gui, "Bounded", "Bounded", bounded.get(), [&, bounded] {
if(*bounded) {
SCollision::AABB<WorldScalar> newBounds;
newBounds.min = g.offset - drawP.world.drawData.cam.c.dir_from_space(drawP.world.main.window.size.cast<float>() * 0.3f);
newBounds.max = g.offset + drawP.world.drawData.cam.c.dir_from_space(drawP.world.main.window.size.cast<float>() * 0.3f);
g.bounds = newBounds;
}
else
g.bounds = std::nullopt;
});
checkbox_boolean_field(gui, "Show Coordinates", "Show Coordinates (visible\nwhen canvas isn't rotated)", &g.showCoordinates);
}
});
}
void GridModifyTool::right_click_popup_gui(Toolbar& t, Vector2f popupPos) {
t.paint_popup(popupPos);
}

View file

@ -10,6 +10,7 @@ class GridModifyTool : public DrawingProgramToolBase {
GridModifyTool(DrawingProgram& initDrawP);
void set_grid(const NetworkingObjects::NetObjWeakPtr<WorldGrid>& newGrid);
virtual DrawingProgramToolType get_type() override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void tool_update() override;

View file

@ -47,6 +47,13 @@ void LassoSelectTool::gui_toolbox(Toolbar& t) {
});
}
void LassoSelectTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
auto& gui = drawP.world.main.g.gui;
gui.new_id("lasso select tool", [&] {
drawP.selection.phone_selection_gui(t);
});
}
void LassoSelectTool::right_click_popup_gui(Toolbar& t, Vector2f popupPos) {
drawP.selection_action_menu(popupPos);
}

View file

@ -12,6 +12,7 @@ class LassoSelectTool : public DrawingProgramToolBase {
LassoSelectTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;
virtual void tool_update() override;

View file

@ -30,6 +30,17 @@ void LineDrawTool::gui_toolbox(Toolbar& t) {
});
}
void LineDrawTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
using namespace GUIStuff;
using namespace ElementHelpers;
auto& gui = drawP.world.main.g.gui;
auto& toolConfig = drawP.world.main.toolConfig;
gui.new_id("rect draw tool", [&] {
toolConfig.relative_width_gui(drawP, "Size");
checkbox_boolean_field(gui, "hasroundcaps", "Round Caps", &toolConfig.lineDraw.hasRoundCaps);
});
}
void LineDrawTool::input_mouse_button_on_canvas_callback(const InputManager::MouseButtonCallbackArgs& button) {
if(button.button == InputManager::MouseButton::LEFT) {
auto& toolConfig = drawP.world.main.toolConfig;

View file

@ -10,6 +10,7 @@ class LineDrawTool : public DrawingProgramToolBase {
LineDrawTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;
virtual void tool_update() override;

View file

@ -23,6 +23,13 @@ void PanCanvasTool::gui_toolbox(Toolbar& t) {
});
}
void PanCanvasTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
auto& gui = drawP.world.main.g.gui;
gui.new_id("Pan canvas tool", [&] {
GUIStuff::ElementHelpers::text_label_centered(gui, "Pan tool");
});
}
void PanCanvasTool::right_click_popup_gui(Toolbar& t, Vector2f popupPos) {
drawP.selection_action_menu(popupPos);
}

View file

@ -8,6 +8,7 @@ class PanCanvasTool : public DrawingProgramToolBase {
PanCanvasTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;
virtual void tool_update() override;

View file

@ -39,6 +39,26 @@ void RectDrawTool::gui_toolbox(Toolbar& t) {
});
}
void RectDrawTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
using namespace GUIStuff;
using namespace ElementHelpers;
auto& gui = drawP.world.main.g.gui;
auto& toolConfig = drawP.world.main.toolConfig;
auto& fillStrokeMode = toolConfig.rectDraw.fillStrokeMode;
auto& relativeRadiusWidth = toolConfig.rectDraw.relativeRadiusWidth;
gui.new_id("rect draw tool", [&] {
slider_scalar_field(gui, "relradiuswidth", "Corner Radius", &relativeRadiusWidth, 0.0f, 40.0f);
radio_button_selector(gui, "fill type", &fillStrokeMode, {
{"Fill only", 0},
{"Outline only", 1},
{"Fill and Outline", 2}
});
if(fillStrokeMode == 1 || fillStrokeMode == 2)
toolConfig.relative_width_gui(drawP, "Outline Size");
});
}
void RectDrawTool::input_mouse_button_on_canvas_callback(const InputManager::MouseButtonCallbackArgs& button) {
if(button.button == InputManager::MouseButton::LEFT) {
if(button.down && drawP.layerMan.is_a_layer_being_edited() && !objInfoBeingEdited && !drawP.world.main.g.gui.cursor_obstructed()) {

View file

@ -10,6 +10,7 @@ class RectDrawTool : public DrawingProgramToolBase {
RectDrawTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;
virtual void tool_update() override;

View file

@ -26,6 +26,13 @@ void RectSelectTool::gui_toolbox(Toolbar& t) {
});
}
void RectSelectTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
auto& gui = drawP.world.main.g.gui;
gui.new_id("rect select tool", [&] {
drawP.selection.phone_selection_gui(t);
});
}
void RectSelectTool::input_key_callback(const InputManager::KeyCallbackArgs& key) {
drawP.selection.input_key_callback_modify_selection(key);
}

View file

@ -10,6 +10,7 @@ class RectSelectTool : public DrawingProgramToolBase {
RectSelectTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void tool_update() override;

View file

@ -106,6 +106,16 @@ void ScreenshotTool::gui_toolbox(Toolbar& t) {
});
}
void ScreenshotTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
using namespace GUIStuff;
using namespace ElementHelpers;
auto& gui = drawP.world.main.g.gui;
gui.new_id("screenshot tool", [&] {
text_label_centered(gui, "Screenshot");
});
}
void ScreenshotTool::right_click_popup_gui(Toolbar& t, Vector2f popupPos) {
t.paint_popup(popupPos);
}

View file

@ -13,6 +13,7 @@ class ScreenshotTool : public DrawingProgramToolBase {
ScreenshotTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;
virtual void tool_update() override;

View file

@ -26,6 +26,13 @@ void TextBoxTool::gui_toolbox(Toolbar& t) {
});
}
void TextBoxTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
auto& gui = drawP.world.main.g.gui;
gui.new_id("textbox tool", [&] {
GUIStuff::ElementHelpers::text_label_centered(gui, "Place textbox");
});
}
void TextBoxTool::input_mouse_button_on_canvas_callback(const InputManager::MouseButtonCallbackArgs& button) {
if(button.button == InputManager::MouseButton::LEFT) {
if(button.down && drawP.layerMan.is_a_layer_being_edited() && !objInfoBeingEdited && !drawP.world.main.g.gui.cursor_obstructed()) {

View file

@ -10,6 +10,7 @@ class TextBoxTool : public DrawingProgramToolBase {
TextBoxTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;
virtual void tool_update() override;

View file

@ -23,6 +23,13 @@ void ZoomCanvasTool::gui_toolbox(Toolbar& t) {
});
}
void ZoomCanvasTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
auto& gui = drawP.world.main.g.gui;
gui.new_id("Zoom canvas tool", [&] {
GUIStuff::ElementHelpers::text_label_centered(gui, "Zoom tool");
});
}
void ZoomCanvasTool::right_click_popup_gui(Toolbar& t, Vector2f popupPos) {
drawP.selection_action_menu(popupPos);
}

View file

@ -8,6 +8,7 @@ class ZoomCanvasTool : public DrawingProgramToolBase {
ZoomCanvasTool(DrawingProgram& initDrawP);
virtual DrawingProgramToolType get_type() override;
virtual void gui_toolbox(Toolbar& t) override;
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
virtual void erase_component(CanvasComponentContainer::ObjInfo* erasedComp) override;
virtual void tool_update() override;