]> cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/private/ktwofingertap.cpp
Fix mouse back/forward buttons
[dolphin.git] / src / kitemviews / private / ktwofingertap.cpp
1 /*
2 * SPDX-FileCopyrightText: 2020 Steffen Hartleib <steffenhartleib@t-online.de>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 // Self
8 #include "ktwofingertap.h"
9
10 // Qt
11 #include <QTouchEvent>
12 #include <QApplication>
13
14 KTwoFingerTapRecognizer::KTwoFingerTapRecognizer() :
15 QGestureRecognizer(),
16 m_gestureTriggered(false)
17 {
18 }
19
20 KTwoFingerTapRecognizer::~KTwoFingerTapRecognizer()
21 {
22 }
23
24 QGesture* KTwoFingerTapRecognizer::create(QObject*)
25 {
26 return static_cast<QGesture*>(new KTwoFingerTap());
27 }
28
29 QGestureRecognizer::Result KTwoFingerTapRecognizer::recognize(QGesture* gesture, QObject* watched, QEvent* event)
30 {
31 Q_UNUSED(watched)
32
33 KTwoFingerTap* const kTwoFingerTap = static_cast<KTwoFingerTap*>(gesture);
34 const QTouchEvent* touchEvent = static_cast<const QTouchEvent*>(event);
35
36 switch (event->type()) {
37 case QEvent::TouchBegin: {
38 kTwoFingerTap->setHotSpot(touchEvent->touchPoints().first().startScreenPos());
39 kTwoFingerTap->setPos(touchEvent->touchPoints().first().startPos());
40 kTwoFingerTap->setScreenPos(touchEvent->touchPoints().first().startScreenPos());
41 kTwoFingerTap->setScenePos(touchEvent->touchPoints().first().startScenePos());
42 m_gestureTriggered = false;
43 return MayBeGesture;
44 }
45
46 case QEvent::TouchUpdate: {
47
48 if (touchEvent->touchPoints().size() > 2) {
49 m_gestureTriggered = false;
50 return CancelGesture;
51 }
52
53 if (touchEvent->touchPoints().size() == 2) {
54 if ((touchEvent->touchPoints().first().startPos() - touchEvent->touchPoints().first().pos()).manhattanLength() >= QApplication::startDragDistance()) {
55 m_gestureTriggered = false;
56 return CancelGesture;
57 }
58 if ((touchEvent->touchPoints().at(1).startPos() - touchEvent->touchPoints().at(1).pos()).manhattanLength() >= QApplication::startDragDistance()) {
59 m_gestureTriggered = false;
60 return CancelGesture;
61 }
62 if (touchEvent->touchPointStates() & Qt::TouchPointPressed) {
63 m_gestureTriggered = true;
64 }
65 if (touchEvent->touchPointStates() & Qt::TouchPointReleased && m_gestureTriggered) {
66 m_gestureTriggered = false;
67 return FinishGesture;
68 }
69 }
70 break;
71 }
72
73 default:
74 return Ignore;
75 }
76 return Ignore;
77 }
78
79 KTwoFingerTap::KTwoFingerTap(QObject* parent) :
80 QGesture(parent),
81 m_pos(QPointF(-1, -1)),
82 m_screenPos(QPointF(-1, -1)),
83 m_scenePos(QPointF(-1, -1))
84 {
85 }
86
87 KTwoFingerTap::~KTwoFingerTap()
88 {
89 }
90
91 QPointF KTwoFingerTap::pos() const
92 {
93 return m_pos;
94 }
95
96 void KTwoFingerTap::setPos(QPointF _pos)
97 {
98 m_pos = _pos;
99 }
100
101 QPointF KTwoFingerTap::screenPos() const
102 {
103 return m_screenPos;
104 }
105
106 void KTwoFingerTap::setScreenPos(QPointF _screenPos)
107 {
108 m_screenPos = _screenPos;
109 }
110
111 QPointF KTwoFingerTap::scenePos() const
112 {
113 return m_scenePos;
114 }
115
116 void KTwoFingerTap::setScenePos(QPointF _scenePos)
117 {
118 m_scenePos = _scenePos;
119 }