File indexing completed on 2024-06-16 04:17:45

0001 /*
0002  *  SPDX-FileCopyrightText: 2007 Sven Langkamp <sven.langkamp@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef KIS_TOOL_PATH_H_
0008 #define KIS_TOOL_PATH_H_
0009 
0010 #include <KoCreatePathTool.h>
0011 #include <KoToolFactoryBase.h>
0012 
0013 #include "flake/kis_node_shape.h"
0014 #include "kis_tool_shape.h"
0015 #include "kis_delegated_tool.h"
0016 #include <kis_icon.h>
0017 
0018 class KoCanvasBase;
0019 class KisToolPath;
0020 
0021 
0022 class __KisToolPathLocalTool : public KoCreatePathTool {
0023 public:
0024     __KisToolPathLocalTool(KoCanvasBase * canvas, KisToolPath* parentTool);
0025 
0026     void paintPath(KoPathShape &path, QPainter &painter, const KoViewConverter &converter) override;
0027     void addPathShape(KoPathShape* pathShape) override;
0028 
0029     using KoCreatePathTool::createOptionWidgets;
0030     using KoCreatePathTool::endPathWithoutLastPoint;
0031     using KoCreatePathTool::endPath;
0032     using KoCreatePathTool::cancelPath;
0033     using KoCreatePathTool::removeLastPoint;
0034 
0035 private:
0036     KisToolPath* const m_parentTool;
0037 };
0038 
0039 typedef KisDelegatedTool<KisToolShape,
0040                          __KisToolPathLocalTool,
0041                          DeselectShapesActivationPolicy> DelegatedPathTool;
0042 
0043 class KisToolPath : public DelegatedPathTool
0044 {
0045     Q_OBJECT
0046 
0047 public:
0048     KisToolPath(KoCanvasBase * canvas);
0049     void mousePressEvent(KoPointerEvent *event) override;
0050 
0051     QList< QPointer<QWidget> > createOptionWidgets() override;
0052 
0053     bool eventFilter(QObject *obj, QEvent *event) override;
0054 
0055     void beginPrimaryAction(KoPointerEvent* event) override;
0056     void continuePrimaryAction(KoPointerEvent *event) override;
0057     void endPrimaryAction(KoPointerEvent *event) override;
0058 
0059     void beginAlternateAction(KoPointerEvent *event, AlternateAction action) override;
0060 
0061     // reimplementing KisTool's method because that method calls beginPrimaryAction
0062     // which now is used to start the path tool.
0063     void beginPrimaryDoubleClickAction(KoPointerEvent* event) override;
0064 
0065     KisPopupWidgetInterface* popupWidget() override;
0066 
0067 protected:
0068     void requestStrokeCancellation() override;
0069     void requestStrokeEnd() override;
0070 
0071 protected Q_SLOTS:
0072     void resetCursorStyle() override;
0073 
0074 private:
0075     friend class __KisToolPathLocalTool;
0076 };
0077 
0078 class KisToolPathFactory : public KoToolFactoryBase
0079 {
0080 
0081 public:
0082     KisToolPathFactory()
0083             : KoToolFactoryBase("KisToolPath") {
0084         setToolTip(i18n("Bezier Curve Tool: Shift-mouseclick ends the curve."));
0085         setSection(ToolBoxSection::Shape);
0086         setActivationShapeId(KRITA_TOOL_ACTIVATION_ID);
0087         setIconName(koIconNameCStr("krita_draw_path"));
0088         setPriority(7);
0089     }
0090 
0091     ~KisToolPathFactory() override {}
0092 
0093     KoToolBase * createTool(KoCanvasBase *canvas) override {
0094         return new KisToolPath(canvas);
0095     }
0096 };
0097 
0098 
0099 
0100 #endif // KIS_TOOL_PATH_H_