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_