File indexing completed on 2024-05-26 04:34:30
0001 /* 0002 * SPDX-FileCopyrightText: 2007 Sven Langkamp <sven.langkamp@gmail.com> 0003 * SPDX-FileCopyrightText: 2015 Michael Abrahams <miabraha@gmail.com> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef KIS_TOOL_SELECT_PATH_H_ 0009 #define KIS_TOOL_SELECT_PATH_H_ 0010 0011 #include <KoCreatePathTool.h> 0012 #include <KisSelectionToolFactoryBase.h> 0013 #include "kis_tool_select_base.h" 0014 #include "kis_delegated_tool.h" 0015 0016 #include <kis_icon.h> 0017 0018 class KoCanvasBase; 0019 class KisToolSelectPath; 0020 0021 0022 class __KisToolSelectPathLocalTool : public KoCreatePathTool { 0023 public: 0024 __KisToolSelectPathLocalTool(KoCanvasBase *canvas, KisToolSelectPath *parentTool); 0025 void paintPath(KoPathShape &path, QPainter &painter, const KoViewConverter &converter) override; 0026 void addPathShape(KoPathShape* pathShape) override; 0027 0028 using KoCreatePathTool::createOptionWidgets; 0029 using KoCreatePathTool::endPathWithoutLastPoint; 0030 using KoCreatePathTool::endPath; 0031 using KoCreatePathTool::cancelPath; 0032 using KoCreatePathTool::removeLastPoint; 0033 0034 private: 0035 KisToolSelectPath* const m_selectionTool; 0036 0037 void beginShape() override; 0038 void endShape() override; 0039 }; 0040 0041 typedef KisDelegatedTool<KisTool, __KisToolSelectPathLocalTool, 0042 DeselectShapesActivationPolicy> DelegatedSelectPathTool; 0043 0044 struct KisDelegatedSelectPathWrapper : public DelegatedSelectPathTool { 0045 KisDelegatedSelectPathWrapper(KoCanvasBase *canvas, 0046 const QCursor &cursor, 0047 KoToolBase *delegateTool) 0048 : DelegatedSelectPathTool(canvas, cursor, dynamic_cast<__KisToolSelectPathLocalTool*>(delegateTool)) 0049 { 0050 Q_ASSERT(dynamic_cast<__KisToolSelectPathLocalTool*>(delegateTool)); 0051 } 0052 0053 // If an event is explicitly forwarded only as an action (e.g. shift-click is captured by "change size") 0054 // we will receive a primary action but no mousePressEvent. Thus these events must be explicitly forwarded. 0055 void beginPrimaryAction(KoPointerEvent *event) override; 0056 void continuePrimaryAction(KoPointerEvent *event) override; 0057 void endPrimaryAction(KoPointerEvent *event) override; 0058 void beginPrimaryDoubleClickAction(KoPointerEvent *event) override; 0059 0060 0061 void mousePressEvent(KoPointerEvent *event) override; 0062 void mouseMoveEvent(KoPointerEvent *event) override; 0063 void mouseReleaseEvent(KoPointerEvent *event) override; 0064 void mouseDoubleClickEvent(KoPointerEvent *event) override; 0065 }; 0066 0067 0068 class KisToolSelectPath : public KisToolSelectBase<KisDelegatedSelectPathWrapper> 0069 { 0070 Q_OBJECT 0071 public: 0072 KisToolSelectPath(KoCanvasBase * canvas); 0073 bool eventFilter(QObject *obj, QEvent *event) override; 0074 void resetCursorStyle() override; 0075 0076 protected: 0077 void requestStrokeCancellation() override; 0078 void requestStrokeEnd() override; 0079 friend class __KisToolSelectPathLocalTool; 0080 QList<QPointer<QWidget> > createOptionWidgets() override; 0081 }; 0082 0083 class KisToolSelectPathFactory : public KisSelectionToolFactoryBase 0084 { 0085 public: 0086 KisToolSelectPathFactory() 0087 : KisSelectionToolFactoryBase("KisToolSelectPath") { 0088 setToolTip(i18n("Bezier Curve Selection Tool")); 0089 setSection(ToolBoxSection::Select); 0090 setActivationShapeId(KRITA_TOOL_ACTIVATION_ID); 0091 setIconName(koIconNameCStr("tool_path_selection")); 0092 setPriority(6); 0093 } 0094 0095 ~KisToolSelectPathFactory() override {} 0096 0097 KoToolBase * createTool(KoCanvasBase *canvas) override { 0098 return new KisToolSelectPath(canvas); 0099 } 0100 0101 0102 }; 0103 0104 0105 0106 #endif // KIS_TOOL_SELECT_PATH_H_