Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_abstract_input_action.cpp
Go to the documentation of this file.
1/* This file is part of the KDE project
2 * SPDX-FileCopyrightText: 2012 Arjen Hiemstra <ahiemstra@heimr.nl>
3 * SPDX-FileCopyrightText: 2026 Ayanami Kaine <personal@ayanamikaine.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
9
10#include <QPointF>
11#include <QMouseEvent>
12#include <klocalizedstring.h>
13#include <kis_debug.h>
14
16#include <kis_canvas2.h>
17
18
19class Q_DECL_HIDDEN KisAbstractInputAction::Private
20{
21public:
22 QString id;
23 QString name;
24 QString description;
25 QHash<QString, int> indexes;
26
29
31};
32
33KisInputManager *KisAbstractInputAction::Private::inputManager = 0;
34
36 : d(new Private)
37{
38 d->id = id;
39 d->indexes.insert(i18n("Activate"), 0);
40}
41
46
48{
49 Q_UNUSED(shortcut);
50}
51
53{
54 Q_UNUSED(shortcut);
55}
56
57bool KisAbstractInputAction::trySwitchShortcut(int oldShortcut, int newShortcut)
58{
59 Q_UNUSED(oldShortcut);
60 Q_UNUSED(newShortcut);
61 return false;
62}
63
64void KisAbstractInputAction::begin(int shortcut, QEvent *event)
65{
66 Q_UNUSED(shortcut);
67
68 if (event) {
69 d->lastCursorPosition = eventPosF(event);
70 d->startCursorPosition = d->lastCursorPosition;
71 }
72}
73
75{
76 if (event) {
77 QPointF newPosition = eventPosF(event);
78 cursorMoved(d->lastCursorPosition, newPosition);
79 cursorMovedAbsolute(d->startCursorPosition, newPosition);
80 d->lastCursorPosition = newPosition;
81 }
82}
83
84void KisAbstractInputAction::end(QEvent *event)
85{
86 Q_UNUSED(event);
87}
88
89void KisAbstractInputAction::cursorMoved(const QPointF &lastPos, const QPointF &pos)
90{
91 Q_UNUSED(lastPos);
92 Q_UNUSED(pos);
93}
94
95void KisAbstractInputAction::cursorMovedAbsolute(const QPointF &startPos, const QPointF &pos)
96{
97 Q_UNUSED(startPos);
98 Q_UNUSED(pos);
99}
100
102{
103 Q_UNUSED(shortcut);
104 return false;
105}
106
108{
109 Q_UNUSED(shortcut);
111}
112
114{
115 return Private::inputManager;
116}
117
118QString KisAbstractInputAction::name() const
119{
120 return d->name;
121}
122
124{
125 return d->description;
126}
127
129{
130 return 0;
131}
132
134{
135 return false;
136}
137
138QHash< QString, int > KisAbstractInputAction::shortcutIndexes() const
139{
140 return d->indexes;
141}
142
143QString KisAbstractInputAction::id() const
144{
145 return d->id;
146}
147
148void KisAbstractInputAction::setName(const QString &name)
149{
150 d->name = name;
151}
152
153void KisAbstractInputAction::setDescription(const QString &description)
154{
155 d->description = description;
156}
157
158void KisAbstractInputAction::setShortcutIndexes(const QHash< QString, int > &indexes)
159{
160 d->indexes = indexes;
161}
162
164{
165 Private::inputManager = manager;
166}
167
169{
170 Q_UNUSED(shortcut);
171 return false;
172}
173
174QPoint KisAbstractInputAction::eventPos(const QEvent *event)
175{
176 if(!event) {
177 return QPoint();
178 }
179
180 switch (event->type()) {
181 case QEvent::MouseMove:
182 case QEvent::MouseButtonPress:
183 case QEvent::MouseButtonDblClick:
184 case QEvent::MouseButtonRelease:
185 return static_cast<const QMouseEvent*>(event)->pos();
186
187 case QEvent::TabletMove:
188 case QEvent::TabletPress:
189 case QEvent::TabletRelease:
190 return static_cast<const QTabletEvent*>(event)->pos();
191
192 case QEvent::TouchBegin:
193 case QEvent::TouchUpdate:
194 case QEvent::TouchEnd:
195 return static_cast<const QTouchEvent *>(event)->touchPoints().at(0).pos().toPoint();
196
197 case QEvent::Wheel:
198 return static_cast<const QWheelEvent*>(event)->position().toPoint();
199
200 case QEvent::NativeGesture: {
201 KisCanvas2 *canvas = d->inputManager->canvas();
203
210#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
211 return canvas->canvasWidget()->mapFromGlobal(QPointF(static_cast<const QNativeGestureEvent*>(event)->globalPos())).toPoint();
212#else
213 return canvas->canvasWidget()->mapFromGlobal(static_cast<const QNativeGestureEvent*>(event)->globalPos());
214#endif
215 }
216
217 default:
218 warnUI << "KisAbstractInputAction" << d->name << "tried to process event data from an unhandled event type" << event->type();
219 return QPoint();
220 }
221}
222
223QPointF KisAbstractInputAction::eventPosF(const QEvent *event) {
224
225 if(!event) {
226 return QPoint();
227 }
228
229 switch (event->type()) {
230 case QEvent::MouseMove:
231 case QEvent::MouseButtonPress:
232 case QEvent::MouseButtonDblClick:
233 case QEvent::MouseButtonRelease:
234 return static_cast<const QMouseEvent*>(event)->localPos();
235
236 case QEvent::TabletMove:
237 case QEvent::TabletPress:
238 case QEvent::TabletRelease:
239 return static_cast<const QTabletEvent*>(event)->posF();
240
241 case QEvent::TouchBegin:
242 case QEvent::TouchUpdate:
243 case QEvent::TouchEnd:
244 return static_cast<const QTouchEvent *>(event)->touchPoints().at(0).pos();
245
246 case QEvent::Wheel:
247 return static_cast<const QWheelEvent*>(event)->position();
248
249 case QEvent::NativeGesture: {
250 KisCanvas2 *canvas = d->inputManager->canvas();
252
259#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
260 return canvas->canvasWidget()->mapFromGlobal(QPointF(static_cast<const QNativeGestureEvent*>(event)->globalPos()));
261#else
262 return canvas->canvasWidget()->mapFromGlobal(static_cast<const QNativeGestureEvent*>(event)->globalPos());
263#endif
264 }
265 default:
266 warnUI << "KisAbstractInputAction" << d->name << "tried to process event data from an unhandled event type" << event->type();
267 return QPointF();
268 }
269}
270
272{
273 return true;
274}
KisInputActionGroup
@ ModifyingActionGroup
Abstract base class for input actions.
virtual void activate(int shortcut)
virtual bool trySwitchShortcut(int oldShortcut, int newShortcut)
virtual void cursorMoved(const QPointF &lastPos, const QPointF &pos)
KisAbstractInputAction(const QString &id)
virtual void inputEvent(QEvent *event)
static KisInputManager * inputManager
virtual void deactivate(int shortcut)
static void setInputManager(KisInputManager *manager)
void setShortcutIndexes(const QHash< QString, int > &indexes)
virtual bool isShortcutRequired(int shortcut) const
virtual bool supportsHiResInputEvents(int shortcut) const
virtual void cursorMovedAbsolute(const QPointF &startPos, const QPointF &pos)
QPoint eventPos(const QEvent *event)
virtual bool canIgnoreModifiers() const
QPointF eventPosF(const QEvent *event)
void setName(const QString &name)
virtual void end(QEvent *event)
virtual QHash< QString, int > shortcutIndexes() const
void setDescription(const QString &description)
virtual KisInputActionGroup inputActionGroup(int shortcut) const
virtual void begin(int shortcut, QEvent *event)
KisAbstractCanvasWidget * canvasWidget
Central object to manage canvas input.
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129
#define warnUI
Definition kis_debug.h:101
KisCanvas2 * canvas