diff -r 35bbfad4d0f4 -r a38a0eb007b0 src/tools/drawtool.h --- a/src/tools/drawtool.h Tue Mar 15 18:56:02 2022 +0200 +++ b/src/tools/drawtool.h Tue Mar 15 19:48:07 2022 +0200 @@ -1,7 +1,30 @@ #pragma once #include "basetool.h" -class DrawTool : public BaseTool +class AbstractDrawTool : public BaseTool +{ +public: + AbstractDrawTool(Document* document); + void reset() override; + void overpaint(Canvas*, QPainter*) const override; + bool mouseMove(Document* document, Canvas* canvas, QMouseEvent* event) override; + bool mouseClick(Canvas* canvas, QMouseEvent* event) override; + bool keyReleased(Document*, Canvas* canvas, QKeyEvent* event) override; +protected: + void addCurrentPoint(Canvas *canvas); + virtual void addPoint(const glm::vec3& pos); + virtual void closeShape() = 0; + void removeLastPoint(); + void clearPoints(); + bool isCloseToExistingPoints(const glm::vec3& pos) const; + std::vector polygon; + std::vector previewPolygon; + glm::vec3 previewPoint; + bool isconcave = false; + void updatePreviewPolygon(); +}; + +class DrawTool : public AbstractDrawTool { Q_OBJECT @@ -10,17 +33,8 @@ QString name() const override; QString toolTip() const override; - bool mouseClick(Document* document, Canvas* canvas, QMouseEvent* event) override; - bool mouseMove(Document* document, Canvas* canvas, QMouseEvent* event) override; - bool keyReleased(Document*, Canvas* canvas, QKeyEvent* event) override; - void reset() override; - void overpaint(Canvas*, QPainter*) const override; QString iconName() const override; -private: - void closeShape(Document *document); - std::vector polygon; - std::vector previewPolygon; - glm::vec3 previewPoint; - bool isconcave = false; - void updatePreviewPolygon(); +protected: + virtual void addPoint(const glm::vec3& pos) override; + void closeShape() override; };