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