Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_shortcut_matcher.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2012 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef __KIS_SHORTCUT_MATCHER_H
8#define __KIS_SHORTCUT_MATCHER_H
9
10
12#include "KisInputActionGroup.h"
13#include <functional>
15
16class QEvent;
17class QWheelEvent;
18class QTouchEvent;
19class QNativeGestureEvent;
20class QString;
21class QPointF;
22
27
28
75class KRITAUI_EXPORT KisShortcutMatcher
76{
77public:
78 static constexpr int TOUCH_SLOP_SQUARED = 16 * 16; // TODO: remove!
79 static constexpr qreal TOUCH_SLOP = 16;
80
83
84 bool hasRunningShortcut() const;
85 bool hasTouchHoldShortcut() const;
86 bool hasTouchpadScrollShortcuts() const;
87
88 void addShortcut(KisSingleActionShortcut *shortcut);
89 void addShortcut(KisStrokeShortcut *shortcut);
90 void addShortcut(KisTouchShortcut *shortcut);
91 void addShortcut(KisNativeGestureShortcut *shortcut);
92 void addShortcut(KisTouchpadScrollShortcut *shortcut);
93
101 bool supportsHiResInputEvents();
102
110 bool keyPressed(Qt::Key key);
111
119 bool autoRepeatedKeyPressed(Qt::Key key);
120
128 bool keyReleased(Qt::Key key);
129
139 bool buttonPressed(Qt::MouseButton button, QEvent *event);
140
150 bool buttonReleased(Qt::MouseButton button, QEvent *event);
151
158 bool wheelEvent(KisSingleActionShortcut::WheelAction wheelAction, QWheelEvent *event);
159
168 bool pointerMoved(QEvent *event);
169
174 void enterEvent();
175
180 void leaveEvent();
181
182 bool touchBeginEvent(QTouchEvent *event);
183 bool touchUpdateEvent(QTouchEvent *event);
184 bool touchEndEvent(QTouchEvent *event);
185
191 void touchCancelEvent(QTouchEvent *event);
192
193 bool nativeGestureBeginEvent(QNativeGestureEvent *event);
194 bool nativeGestureEvent(QNativeGestureEvent *event);
195 bool nativeGestureEndEvent(QNativeGestureEvent *event);
196
197 bool touchpadScrollBeginEvent(QWheelEvent *event);
198 bool touchpadScrollEvent(QWheelEvent *event);
199 bool touchpadScrollEndEvent(QWheelEvent *event);
200
208 void reinitialize();
209
217 void reinitializeButtons();
218
227 void handlePolledKeys(const QVector<Qt::Key> &keys);
228
235 bool sanityCheckModifiersCorrectness(Qt::KeyboardModifiers modifiers) const;
236
240 QVector<Qt::Key> debugPressedKeys() const;
241
245 bool hasPolledKeys();
246
251 void lostFocusEvent(const QPointF &localPos);
252
257 void toolHasBeenActivated();
258
267
271 void suppressConflictingKeyActions(const QVector<QKeySequence> &shortcuts);
272
283
287 void clearShortcuts();
288
289 void setInputActionGroupsMaskCallback(std::function<KisInputActionGroupsMask()> func);
290
294 int touchHoldDelay() const;
295
299 void setTouchHoldDelay(int value);
300
306 void setIgnoreMultiFingerCancelWorkaroundEnalbed(bool value);
307
311 bool ignoreMultiFingerCancelWorkaroundEnalbed() const;
312
313private:
314
315 friend class KisInputManagerTest;
316
317 void reset();
318 void reset(QString msg);
319
320 enum class TouchShortcutMode {
321 Drag = 0,
322 Tap,
323 Hold
324 };
325
326 bool tryRunWheelShortcut(KisSingleActionShortcut::WheelAction wheelAction, QWheelEvent *event);
327 template<typename T, typename U> bool tryRunSingleActionShortcutImpl(T param, U *event, const QSet<Qt::Key> &keysState, bool keyboard = true);
328
329 void prepareReadyShortcuts();
330
331 bool tryRunReadyShortcut( Qt::MouseButton button, QEvent* event );
332 void tryActivateReadyShortcut();
333 bool tryEndRunningShortcut( Qt::MouseButton button, QEvent* event );
334 void forceEndRunningShortcut(const QPointF &localPos);
335 void forceDeactivateAllActions();
336
337 bool touchUpdateEventImpl(QTouchEvent *event);
338 void slotTouchHoldCompleted();
339
340 void setMaxTouchPointEvent(QTouchEvent *event);
341 bool tryFireTapTouchShortcut(QTouchEvent *event, Qt::TouchPointStates allowedStates);
342 KisTouchShortcut *matchTouchShortcut(QTouchEvent *event, Qt::TouchPointStates allowedStates, TouchShortcutMode mode);
343 bool matchTouchShortcutBasedOnState(QTouchEvent *event, KisTouchShortcut *shortcut, Qt::TouchPointStates allowedStates, TouchShortcutMode mode);
344 bool tryRunTouchShortcut(QTouchEvent *event, Qt::TouchPointStates allowedStates, TouchShortcutMode mode);
345 bool tryEndTouchShortcut(QTouchEvent *event);
346 void tryCancelAllCurrentTouchActionsImpl();
347
348 template <typename EventType, typename ShortcutType>
349 bool tryRunGestureBasedShortcutImpl(EventType *event, ShortcutType **resultShortcutPtr, const QList<ShortcutType*> allTypedShortcuts);
350 template <typename EventType, typename ShortcutType>
351 bool tryEndGestureBasedShortcutImpl(EventType *event, ShortcutType **resultShortcutPtr);
352
353 bool tryRunNativeGestureShortcut(QNativeGestureEvent *event);
354 bool tryEndNativeGestureShortcut(QNativeGestureEvent *event);
355
356 bool tryRunTouchpadScrollShortcut(QWheelEvent* event);
357 bool tryEndTouchpadScrollShortcut(QWheelEvent* event);
358
359private:
360 class Private;
361 Private * const m_d;
362};
363
364#endif /* __KIS_SHORTCUT_MATCHER_H */
float value(const T *src, size_t ch)
void suppressAllKeyboardActions(bool value)
void suppressAllActions(bool value)
The KisTouchShortcut class only handles touch gestures it does not handle tool invocation i....
QString button(const QWheelEvent &ev)