Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_tool.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef KIS_TOOL_H_
8#define KIS_TOOL_H_
9
10#include <QCursor>
11
12#include <KoColor.h>
13#include <KoToolBase.h>
14#include <KoID.h>
16#include <KoPattern.h>
17#include <KoAbstractGradient.h>
18
19#include <kis_types.h>
20
21#ifdef __GNUC__
22#define WARN_WRONG_MODE(_mode) warnKrita << "Unexpected tool event has come to" << __func__ << "while being mode" << _mode << "!"
23#else
24#define WARN_WRONG_MODE(_mode) warnKrita << "Unexpected tool event has come while being mode" << _mode << "!"
25#endif
26
27#define CHECK_MODE_SANITY_OR_RETURN(_mode) if (mode() != _mode) { WARN_WRONG_MODE(mode()); return; }
28
29class KoCanvasBase;
31class QPainter;
32class QPainterPath;
33class QPolygonF;
35
36//activation id for Krita tools, Krita tools are always active and handle locked and invisible layers by themselves
37static const QString KRITA_TOOL_ACTIVATION_ID = "flake/always";
38
39#include <kritaui_export.h>
40class KRITAUI_EXPORT KisTool : public KoToolBase
41{
42 Q_OBJECT
43
44 Q_PROPERTY(bool isActive READ isActive NOTIFY isActiveChanged)
45
46public:
47 enum { FLAG_USES_CUSTOM_PRESET=0x01, FLAG_USES_CUSTOM_COMPOSITEOP=0x02, FLAG_USES_CUSTOM_SIZE=0x04 };
48
49 KisTool(KoCanvasBase * canvas, const QCursor & cursor);
50 ~KisTool() override;
51
52 virtual int flags() const { return 0; }
53
54 void deleteSelection() override;
55// KoToolBase Implementation.
56
57public:
58
67 virtual void activatePrimaryAction();
68
75 virtual void deactivatePrimaryAction();
76
86 virtual void beginPrimaryAction(KoPointerEvent *event);
87
93 virtual void continuePrimaryAction(KoPointerEvent *event);
94
101 virtual void endPrimaryAction(KoPointerEvent *event);
102
109 virtual void beginPrimaryDoubleClickAction(KoPointerEvent *event);
110
115 virtual bool primaryActionSupportsHiResEvents() const;
116
131
132 // Technically users are allowed to configure this, but nobody ever would do that.
133 // So these can basically be thought of as aliases to ctrl+click, etc.
135 ChangeSize = AlternateChangeSize, // Default: Shift+Left click
136 ChangeSizeSnap = AlternateChangeSizeSnap, // Default: Shift+Z+Left click
137 SampleFgNode = AlternateSampleFgNode, // Default: Ctrl+Alt+Left click
138 SampleBgNode = AlternateSampleBgNode, // Default: Ctrl+Alt+Right click
139 SampleFgImage = AlternateSampleFgImage, // Default: Ctrl+Left click
140 SampleBgImage = AlternateSampleBgImage, // Default: Ctrl+Right click
141 Secondary = AlternateSecondary,
142 Third = AlternateThird,
143 Fourth = AlternateFourth,
144 Fifth = AlternateFifth,
145 NONE = 10000
146 };
147
153 MYPAINTBRUSH_UNPAINTABLE
154 };
155 Q_ENUMS(NodePaintAbility)
156
157 static AlternateAction actionToAlternateAction(ToolAction action);
158
159 virtual void activateAlternateAction(AlternateAction action);
160 virtual void deactivateAlternateAction(AlternateAction action);
161
162 virtual void beginAlternateAction(KoPointerEvent *event, AlternateAction action);
163 virtual void continueAlternateAction(KoPointerEvent *event, AlternateAction action);
164 virtual void endAlternateAction(KoPointerEvent *event, AlternateAction action);
165 virtual void beginAlternateDoubleClickAction(KoPointerEvent *event, AlternateAction action);
166 virtual bool alternateActionSupportsHiResEvents(AlternateAction action) const;
167 virtual bool supportsPaintingAssistants() const;
168
169 void mousePressEvent(KoPointerEvent *event) override;
170 void mouseDoubleClickEvent(KoPointerEvent *event) override;
171 void mouseTripleClickEvent(KoPointerEvent *event) override;
172 void mouseReleaseEvent(KoPointerEvent *event) override;
173 void mouseMoveEvent(KoPointerEvent *event) override;
174
175 bool isActive() const;
176
177 KisTool::NodePaintAbility nodePaintAbility();
178
187 virtual void newActivationWithExternalSource(KisPaintDeviceSP externalSource);
188
189public Q_SLOTS:
190 void activate(const QSet<KoShape*> &shapes) override;
191 void deactivate() override;
192 void canvasResourceChanged(int key, const QVariant & res) override;
193 // Implement this slot in case there are any widgets or properties which need
194 // to be updated after certain operations, to reflect the inner state correctly.
195 // At the moment this is used for smoothing options in the freehand brush, but
196 // this will likely be expanded.
197 virtual void updateSettingsViews();
198
199Q_SIGNALS:
200 void isActiveChanged(bool isActivated);
201
202protected:
203 // conversion methods are also needed by the paint information builder
204 friend class KisToolPaintingInformationBuilder;
205
208 QPointF convertToPixelCoord(KoPointerEvent *e);
209 QPointF convertToPixelCoord(const QPointF& pt);
210
211 QPointF convertToPixelCoordAndAlignOnWidget(const QPointF& pt);
212
213 QPointF convertToPixelCoordAndSnap(KoPointerEvent *e, const QPointF &offset = QPointF(), bool useModifiers = true);
214 QPointF convertToPixelCoordAndSnap(const QPointF& pt, const QPointF &offset = QPointF());
215
216protected:
217 QPointF widgetCenterInWidgetPixels();
218 QPointF convertDocumentToWidget(const QPointF& pt);
219
224 QPoint convertToImagePixelCoordFloored(KoPointerEvent *e);
225
226 QRectF convertToPt(const QRectF &rect);
227 qreal convertToPt(qreal value);
228
229 QPointF viewToPixel(const QPointF &viewCoord) const;
232 QPointF pixelToView(const QPoint &pixelCoord) const;
233
235 QPointF pixelToView(const QPointF &pixelCoord) const;
236
238 QRectF pixelToView(const QRectF &pixelRect) const;
239
241 QPainterPath pixelToView(const QPainterPath &pixelPath) const;
242
243 KisOptimizedBrushOutline pixelToView(const KisOptimizedBrushOutline &path) const;
244
246 QPolygonF pixelToView(const QPolygonF &pixelPolygon) const;
247
249 void updateCanvasPixelRect(const QRectF &pixelRect);
250
252 void updateCanvasViewRect(const QRectF &viewRect);
253
254 QWidget* createOptionWidget() override;
255
260 virtual bool listeningToModifiers();
265 virtual void listenToModifiers(bool listen);
266
267protected:
268 KisImageWSP image() const;
269 QCursor cursor() const;
270
271 KisImageWSP currentImage();
274 KisNodeSP currentNode() const;
275 KisNodeList selectedNodes() const;
278 KisPaintOpPresetSP currentPaintOpPreset();
280
283 void paintToolOutline(QPainter * painter, const KisOptimizedBrushOutline &path);
284
286 bool nodeEditable();
287
289 bool selectionEditable();
290
292 bool overrideCursorIfNotEditable();
293
294 bool blockUntilOperationsFinished();
295 void blockUntilOperationsFinishedForced();
296
297protected:
298 enum ToolMode: int {
305 OTHER, // tool-specific modes, like multibrush's symmetry axis setup
306 OTHER_1
307 };
308
309 virtual void setMode(ToolMode mode);
310 virtual ToolMode mode() const;
311 void setCursor(const QCursor &cursor);
312
313protected Q_SLOTS:
317 virtual void resetCursorStyle();
318
319private:
320 struct Private;
321 Private* const d;
322};
323
324
325
326#endif // KIS_TOOL_H_
float value(const T *src, size_t ch)
@ NONE
virtual void deleteSelection()
virtual void mouseTripleClickEvent(KoPointerEvent *event)
virtual QWidget * createOptionWidget()
virtual void mousePressEvent(KoPointerEvent *event)=0
virtual void mouseMoveEvent(KoPointerEvent *event)=0
virtual void activate(const QSet< KoShape * > &shapes)
virtual void canvasResourceChanged(int key, const QVariant &res)
virtual void mouseReleaseEvent(KoPointerEvent *event)=0
virtual void deactivate()
virtual void mouseDoubleClickEvent(KoPointerEvent *event)
static const QString KRITA_TOOL_ACTIVATION_ID
Definition kis_tool.h:37
KoColor currentBgColor()
KisFilterConfigurationSP currentGenerator()
void isActiveChanged(bool isActivated)
KoAbstractGradientSP currentGradient()
@ AlternateFourth
Definition kis_tool.h:127
@ AlternateSampleFgImage
Definition kis_tool.h:123
@ Primary
Definition kis_tool.h:118
@ AlternateChangeSize
Definition kis_tool.h:119
@ AlternateSecondary
Definition kis_tool.h:125
@ AlternateSampleBgNode
Definition kis_tool.h:122
@ AlternateSampleBgImage
Definition kis_tool.h:124
@ AlternateThird
Definition kis_tool.h:126
@ AlternateSampleFgNode
Definition kis_tool.h:121
@ AlternateChangeSizeSnap
Definition kis_tool.h:120
@ AlternateFifth
Definition kis_tool.h:128
Private *const d
Definition kis_tool.h:321
virtual int flags() const
Definition kis_tool.h:52
@ SECONDARY_PAINT_MODE
Definition kis_tool.h:301
@ GESTURE_MODE
Definition kis_tool.h:303
@ MIRROR_AXIS_SETUP_MODE
Definition kis_tool.h:302
@ PAINT_MODE
Definition kis_tool.h:300
@ PAN_MODE
Definition kis_tool.h:304
@ HOVER_MODE
Definition kis_tool.h:299
KoPatternSP currentPattern()
KoColor currentFgColor()
QCursor cursor() const
AlternateAction
Definition kis_tool.h:134
NodePaintAbility
Definition kis_tool.h:148
@ UNPAINTABLE
Definition kis_tool.h:152