File indexing completed on 2024-06-23 04:28:07
0001 /* 0002 * kis_tool_line.h - part of Krayon 0003 * 0004 * SPDX-FileCopyrightText: 2000 John Califf <jcaliff@comuzone.net> 0005 * SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org> 0006 * SPDX-FileCopyrightText: 2004 Boudewijn Rempt <boud@valdyas.org> 0007 * 0008 * SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 0011 #ifndef KIS_TOOL_LINE_H_ 0012 #define KIS_TOOL_LINE_H_ 0013 0014 #include "kis_tool_shape.h" 0015 0016 #include <kconfig.h> 0017 #include <kconfiggroup.h> 0018 #include <QScopedPointer> 0019 #include <kis_global.h> 0020 #include <kis_types.h> 0021 #include <KisToolPaintFactoryBase.h> 0022 #include <flake/kis_node_shape.h> 0023 #include <kis_signal_compressor.h> 0024 #include <kis_icon.h> 0025 #include <KoIcon.h> 0026 0027 class QPoint; 0028 class KoCanvasBase; 0029 class QCheckBox; 0030 class KisPaintingInformationBuilder; 0031 class KisToolLineHelper; 0032 0033 0034 class KisToolLine : public KisToolShape 0035 { 0036 Q_OBJECT 0037 0038 public: 0039 KisToolLine(KoCanvasBase * canvas); 0040 ~KisToolLine() override; 0041 0042 void requestStrokeCancellation() override; 0043 void requestStrokeEnd() override; 0044 0045 void beginPrimaryAction(KoPointerEvent *event) override; 0046 void continuePrimaryAction(KoPointerEvent *event) override; 0047 void endPrimaryAction(KoPointerEvent *event) override; 0048 void activate(const QSet<KoShape*> &shapes) override; 0049 void deactivate() override; 0050 bool primaryActionSupportsHiResEvents() const override; 0051 0052 void paint(QPainter& gc, const KoViewConverter &converter) override; 0053 0054 QString quickHelp() const override; 0055 0056 bool supportsPaintingAssistants() const override; 0057 0058 protected Q_SLOTS: 0059 void resetCursorStyle() override; 0060 0061 private Q_SLOTS: 0062 void updateStroke(); 0063 void setUseSensors(bool value); 0064 void setShowPreview(bool value); 0065 void setShowGuideline(bool value); 0066 void setSnapToAssistants(bool value); 0067 void setSnapEraser(bool value); 0068 0069 0070 private: 0071 void paintLine(QPainter& gc, const QRect& rc); 0072 QPointF straightLine(QPointF point); 0073 QPointF snapToAssistants(QPointF point); 0074 void updateGuideline(); 0075 void showSize(); 0076 void updatePreviewTimer(bool showGuide); 0077 QWidget* createOptionWidget() override; 0078 0079 void endStroke(); 0080 void cancelStroke(); 0081 0082 private: 0083 bool m_showGuideline {true}; 0084 0085 QPointF m_startPoint; // start point to use when painting (after the line was snapped to assistant already) 0086 QPointF m_endPoint; 0087 QPointF m_originalStartPoint; // original starting point (to use when searching for suitable assistant) 0088 QPointF m_lastUpdatedPoint; 0089 0090 bool m_strokeIsRunning {false}; 0091 0092 0093 QCheckBox *m_chkUseSensors {nullptr}; 0094 QCheckBox *m_chkShowPreview {nullptr}; 0095 QCheckBox *m_chkShowGuideline {nullptr}; 0096 QCheckBox *m_chkSnapToAssistants {nullptr}; 0097 QCheckBox *m_chkSnapEraser {nullptr}; 0098 0099 QScopedPointer<KisPaintingInformationBuilder> m_infoBuilder; 0100 QScopedPointer<KisToolLineHelper> m_helper; 0101 KisSignalCompressor m_strokeUpdateCompressor; 0102 KisSignalCompressor m_longStrokeUpdateCompressor; 0103 0104 KConfigGroup configGroup; 0105 }; 0106 0107 0108 class KisToolLineFactory : public KisToolPaintFactoryBase 0109 { 0110 0111 public: 0112 0113 KisToolLineFactory() 0114 : KisToolPaintFactoryBase("KritaShape/KisToolLine") { 0115 setToolTip(i18n("Line Tool")); 0116 // Temporarily 0117 setSection(ToolBoxSection::Shape); 0118 setActivationShapeId(KRITA_TOOL_ACTIVATION_ID); 0119 setPriority(1); 0120 setIconName(koIconNameCStr("krita_tool_line")); 0121 } 0122 0123 ~KisToolLineFactory() override {} 0124 0125 KoToolBase * createTool(KoCanvasBase *canvas) override { 0126 return new KisToolLine(canvas); 0127 } 0128 0129 }; 0130 0131 0132 0133 0134 #endif //KIS_TOOL_LINE_H_