diff --git a/CMakeLists.txt b/CMakeLists.txt index 073bd4f..8712478 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,6 +66,7 @@ set(sources "src/main.cpp" "src/DrawingProgram/ScreenshotTool.cpp" "src/DrawingProgram/EditTool.cpp" "src/DrawingProgram/ZoomCanvasTool.cpp" + "src/DrawingProgram/PanCanvasTool.cpp" "src/DrawingProgram/ImageEditTool.cpp" "src/DrawingProgram/GridModifyTool.cpp" "src/DrawingProgram/DrawingProgramSelection.cpp" diff --git a/src/DrawCamera.cpp b/src/DrawCamera.cpp index cc6c37b..17c2a3b 100755 --- a/src/DrawCamera.cpp +++ b/src/DrawCamera.cpp @@ -126,7 +126,7 @@ void DrawCamera::update_main(World& w) { c.pos = startZoomMousePos + mVec * mX; } } - else if(w.drawProg.controls.middleClickHeld) + else if(w.drawProg.controls.middleClickHeld || (w.drawProg.controls.leftClickHeld && w.drawProg.drawTool->get_type() == DrawingProgramToolType::PAN)) c.pos -= c.dir_from_space(w.main.input.mouse.move); if(w.main.input.mouse.scrollAmount.y() && !w.main.toolbar.io->hoverObstructed) { // Ignore the value of scrollAmount, since that leads to problems on macOS diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index fce5d08..a894391 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -200,6 +200,7 @@ void DrawingProgram::toolbar_gui() { 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("Eyedropper Toolbar Button", "data/icons/eyedropper.svg", drawTool->get_type() == DrawingProgramToolType::EYEDROPPER)) { switch_to_tool(DrawingProgramToolType::EYEDROPPER); } if(t.gui.svg_icon_button("Zoom Canvas Toolbar Button", "data/icons/zoom.svg", drawTool->get_type() == DrawingProgramToolType::ZOOM)) { switch_to_tool(DrawingProgramToolType::ZOOM); } + if(t.gui.svg_icon_button("Pan Canvas Toolbar Button", "data/icons/hand.svg", drawTool->get_type() == DrawingProgramToolType::PAN)) { switch_to_tool(DrawingProgramToolType::PAN); } 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); diff --git a/src/DrawingProgram/DrawingProgram.hpp b/src/DrawingProgram/DrawingProgram.hpp index db98383..d5da572 100644 --- a/src/DrawingProgram/DrawingProgram.hpp +++ b/src/DrawingProgram/DrawingProgram.hpp @@ -2,6 +2,7 @@ #include "../DrawData.hpp" #include "DrawingProgramCache.hpp" #include "GridModifyTool.hpp" +#include "PanCanvasTool.hpp" #include "ZoomCanvasTool.hpp" #include "cereal/archives/portable_binary.hpp" #include @@ -133,5 +134,6 @@ class DrawingProgram { friend class GridEditTool; friend class GridModifyTool; friend class ZoomCanvasTool; + friend class PanCanvasTool; friend class DrawCamera; }; diff --git a/src/DrawingProgram/DrawingProgramToolBase.cpp b/src/DrawingProgram/DrawingProgramToolBase.cpp index 8d5c92e..86849a4 100644 --- a/src/DrawingProgram/DrawingProgramToolBase.cpp +++ b/src/DrawingProgram/DrawingProgramToolBase.cpp @@ -2,6 +2,7 @@ #include "BrushTool.hpp" #include "EraserTool.hpp" +#include "PanCanvasTool.hpp" #include "RectSelectTool.hpp" #include "LassoSelectTool.hpp" #include "RectDrawTool.hpp" @@ -45,6 +46,8 @@ std::unique_ptr DrawingProgramToolBase::allocate_tool_ty return std::make_unique(drawP); case DrawingProgramToolType::ZOOM: return std::make_unique(drawP); + case DrawingProgramToolType::PAN: + return std::make_unique(drawP); } return nullptr; } diff --git a/src/DrawingProgram/DrawingProgramToolBase.hpp b/src/DrawingProgram/DrawingProgramToolBase.hpp index 5708af3..31788cc 100644 --- a/src/DrawingProgram/DrawingProgramToolBase.hpp +++ b/src/DrawingProgram/DrawingProgramToolBase.hpp @@ -18,7 +18,8 @@ enum class DrawingProgramToolType : int { SCREENSHOT, GRIDMODIFY, EDIT, - ZOOM + ZOOM, + PAN }; class DrawingProgramToolBase { diff --git a/src/DrawingProgram/PanCanvasTool.cpp b/src/DrawingProgram/PanCanvasTool.cpp new file mode 100644 index 0000000..874f403 --- /dev/null +++ b/src/DrawingProgram/PanCanvasTool.cpp @@ -0,0 +1,35 @@ +#include "PanCanvasTool.hpp" +#include "DrawingProgram.hpp" +#include "../MainProgram.hpp" +#include "../DrawData.hpp" +#include "DrawingProgramToolBase.hpp" +#include + +PanCanvasTool::PanCanvasTool(DrawingProgram& initDrawP): + DrawingProgramToolBase(initDrawP) +{ +} + +DrawingProgramToolType PanCanvasTool::get_type() { + return DrawingProgramToolType::PAN; +} + +void PanCanvasTool::gui_toolbox() { + Toolbar& t = drawP.world.main.toolbar; + t.gui.push_id("Pan canvas tool"); + t.gui.text_label_centered("Pan tool"); + t.gui.pop_id(); +} + +void PanCanvasTool::tool_update() { +} + +bool PanCanvasTool::prevent_undo_or_redo() { + return false; +} + +void PanCanvasTool::draw(SkCanvas* canvas, const DrawData& drawData) { +} + +void PanCanvasTool::switch_tool(DrawingProgramToolType newTool) { +} diff --git a/src/DrawingProgram/PanCanvasTool.hpp b/src/DrawingProgram/PanCanvasTool.hpp new file mode 100644 index 0000000..6ca579d --- /dev/null +++ b/src/DrawingProgram/PanCanvasTool.hpp @@ -0,0 +1,15 @@ +#pragma once +#include "DrawingProgramToolBase.hpp" + +class DrawingProgram; + +class PanCanvasTool : public DrawingProgramToolBase { + public: + PanCanvasTool(DrawingProgram& initDrawP); + virtual DrawingProgramToolType get_type() override; + virtual void gui_toolbox() override; + virtual void tool_update() override; + virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; + virtual bool prevent_undo_or_redo() override; + virtual void switch_tool(DrawingProgramToolType newTool) override; +};