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 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include <QPointF>
10#include <QMouseEvent>
11#include <klocalizedstring.h>
12#include <kis_debug.h>
13
15#include <kis_canvas2.h>
16
17
18class Q_DECL_HIDDEN KisAbstractInputAction::Private
19{
20public:
21 QString id;
22 QString name;
23 QString description;
24 QHash<QString, int> indexes;
25
28
30};
31
32KisInputManager *KisAbstractInputAction::Private::inputManager = 0;
33
35 : d(new Private)
36{
37 d->id = id;
38 d->indexes.insert(i18n("Activate"), 0);
39}
40
45
47{
48 Q_UNUSED(shortcut);
49}
50
52{
53 Q_UNUSED(shortcut);
54}
55
56void KisAbstractInputAction::begin(int shortcut, QEvent *event)
57{
58 Q_UNUSED(shortcut);
59
60 if (event) {
61 d->lastCursorPosition = eventPosF(event);
62 d->startCursorPosition = d->lastCursorPosition;
63 }
64}
65
67{
68 if (event) {
69 QPointF newPosition = eventPosF(event);
70 cursorMoved(d->lastCursorPosition, newPosition);
71 cursorMovedAbsolute(d->startCursorPosition, newPosition);
72 d->lastCursorPosition = newPosition;
73 }
74}
75
76void KisAbstractInputAction::end(QEvent *event)
77{
78 Q_UNUSED(event);
79}
80
81void KisAbstractInputAction::cursorMoved(const QPointF &lastPos, const QPointF &pos)
82{
83 Q_UNUSED(lastPos);
84 Q_UNUSED(pos);
85}
86
87void KisAbstractInputAction::cursorMovedAbsolute(const QPointF &startPos, const QPointF &pos)
88{
89 Q_UNUSED(startPos);
90 Q_UNUSED(pos);
91}
92
94{
95 Q_UNUSED(shortcut);
96 return false;
97}
98
100{
101 Q_UNUSED(shortcut);
103}
104
106{
107 return Private::inputManager;
108}
109
110QString KisAbstractInputAction::name() const
111{
112 return d->name;
113}
114
116{
117 return d->description;
118}
119
121{
122 return 0;
123}
124
126{
127 return false;
128}
129
130QHash< QString, int > KisAbstractInputAction::shortcutIndexes() const
131{
132 return d->indexes;
133}
134
135QString KisAbstractInputAction::id() const
136{
137 return d->id;
138}
139
140void KisAbstractInputAction::setName(const QString &name)
141{
142 d->name = name;
143}
144
145void KisAbstractInputAction::setDescription(const QString &description)
146{
147 d->description = description;
148}
149
150void KisAbstractInputAction::setShortcutIndexes(const QHash< QString, int > &indexes)
151{
152 d->indexes = indexes;
153}
154
156{
157 Private::inputManager = manager;
158}
159
161{
162 Q_UNUSED(shortcut);
163 return false;
164}
165
166QPoint KisAbstractInputAction::eventPos(const QEvent *event)
167{
168 if(!event) {
169 return QPoint();
170 }
171
172 switch (event->type()) {
173 case QEvent::MouseMove:
174 case QEvent::MouseButtonPress:
175 case QEvent::MouseButtonDblClick:
176 case QEvent::MouseButtonRelease:
177 return static_cast<const QMouseEvent*>(event)->pos();
178
179 case QEvent::TabletMove:
180 case QEvent::TabletPress:
181 case QEvent::TabletRelease:
182 return static_cast<const QTabletEvent*>(event)->pos();
183
184 case QEvent::TouchBegin:
185 case QEvent::TouchUpdate:
186 case QEvent::TouchEnd:
187 return static_cast<const QTouchEvent *>(event)->touchPoints().at(0).pos().toPoint();
188
189 case QEvent::Wheel:
190 return static_cast<const QWheelEvent*>(event)->position().toPoint();
191
192 case QEvent::NativeGesture: {
193 KisCanvas2 *canvas = d->inputManager->canvas();
195
202#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
203 return canvas->canvasWidget()->mapFromGlobal(QPointF(static_cast<const QNativeGestureEvent*>(event)->globalPos())).toPoint();
204#else
205 return canvas->canvasWidget()->mapFromGlobal(static_cast<const QNativeGestureEvent*>(event)->globalPos());
206#endif
207 }
208
209 default:
210 warnInput << "KisAbstractInputAction" << d->name << "tried to process event data from an unhandled event type" << event->type();
211 return QPoint();
212 }
213}
214
215QPointF KisAbstractInputAction::eventPosF(const QEvent *event) {
216
217 switch (event->type()) {
218 case QEvent::MouseMove:
219 case QEvent::MouseButtonPress:
220 case QEvent::MouseButtonDblClick:
221 case QEvent::MouseButtonRelease:
222 return static_cast<const QMouseEvent*>(event)->localPos();
223
224 case QEvent::TabletMove:
225 case QEvent::TabletPress:
226 case QEvent::TabletRelease:
227 return static_cast<const QTabletEvent*>(event)->posF();
228
229 case QEvent::TouchBegin:
230 case QEvent::TouchUpdate:
231 case QEvent::TouchEnd:
232 return static_cast<const QTouchEvent *>(event)->touchPoints().at(0).pos();
233
234 case QEvent::Wheel:
235 return static_cast<const QWheelEvent*>(event)->position();
236
237 case QEvent::NativeGesture: {
238 KisCanvas2 *canvas = d->inputManager->canvas();
240
247#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
248 return canvas->canvasWidget()->mapFromGlobal(QPointF(static_cast<const QNativeGestureEvent*>(event)->globalPos()));
249#else
250 return canvas->canvasWidget()->mapFromGlobal(static_cast<const QNativeGestureEvent*>(event)->globalPos());
251#endif
252 }
253 default:
254 warnInput << "KisAbstractInputAction" << d->name << "tried to process event data from an unhandled event type" << event->type();
255 return QPointF();
256 }
257}
258
260{
261 return true;
262}
KisInputActionGroup
@ ModifyingActionGroup
Abstract base class for input actions.
virtual void activate(int shortcut)
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 warnInput
Definition kis_debug.h:99
KisCanvas2 * canvas