author | hgs |
Fri, 15 Oct 2010 17:30:59 -0400 | |
changeset 16 | 3c88a81ff781 |
parent 3 | 0954f5dd2cd0 |
permissions | -rw-r--r-- |
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
1 |
/* |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
2 |
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
3 |
* All rights reserved. |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
4 |
* |
3 | 5 |
* This program is free software: you can redistribute it and/or modify |
6 |
* it under the terms of the GNU Lesser General Public License as published by |
|
7 |
* the Free Software Foundation, version 2.1 of the License. |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU Lesser General Public License for more details. |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
13 |
* |
3 | 14 |
* You should have received a copy of the GNU Lesser General Public License |
15 |
* along with this program. If not, |
|
16 |
* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/". |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
17 |
* |
3 | 18 |
* Description: |
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
19 |
* |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
20 |
*/ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
21 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
22 |
#include "qstmgestureevent.h" |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
23 |
#include "qstmuievent_if.h" |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
24 |
|
16 | 25 |
#include <QGraphicsSceneMouseEvent> |
26 |
||
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
27 |
using namespace qstmUiEventEngine; |
16 | 28 |
using namespace qstmGesture; |
29 |
||
30 |
static Qt::GestureType s_assignedType = Qt::CustomGesture; |
|
31 |
static int s_stmGestureEventType = QEvent::User; |
|
32 |
static QGraphicsItem* s_gestureGrabberItem = NULL; |
|
33 |
static QGraphicsItem* s_gestureFocusedItem = NULL; |
|
34 |
||
35 |
||
36 |
QStm_GestureEventFilter* QStm_GestureEventFilter::m_instance = 0; |
|
37 |
||
38 |
QStm_GestureEventFilter* QStm_GestureEventFilter::instance() |
|
39 |
{ |
|
40 |
if (!m_instance) { |
|
41 |
m_instance = new QStm_GestureEventFilter(); |
|
42 |
} |
|
43 |
return m_instance; |
|
44 |
} |
|
45 |
||
46 |
bool QStm_GestureEventFilter::eventFilter(QObject* receiver, QEvent* evt) |
|
47 |
{ |
|
48 |
return qstmIsGraphicsSceneMouseEvent(evt) || qstmIsMouseEvent(evt) || |
|
49 |
qstmIsTouchEvent(evt) || qstmIsContextMenuEvent(evt); |
|
50 |
} |
|
51 |
||
52 |
||
53 |
||
54 |
||
55 |
bool QStm_GestureEventFilter::sendGraphicsSceneMouseEvent(QEvent* event, QGraphicsObject* go) |
|
56 |
{ |
|
57 |
bool ret = false; |
|
58 |
if (event->type() == QEvent::Gesture) { |
|
59 |
QStm_Gesture* gesture = getQStmGesture(event); |
|
60 |
if (gesture) { |
|
61 |
ret = gesture->sendGraphicsSceneMouseEvent(go); |
|
62 |
} |
|
63 |
||
64 |
} |
|
65 |
return ret; |
|
66 |
} |
|
67 |
||
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
68 |
|
16 | 69 |
bool QStm_GestureEventFilter::event(QEvent* event) |
70 |
{ |
|
71 |
if (event->type() == QEvent::Gesture) { |
|
72 |
QStm_Gesture* gesture = getQStmGesture(event); |
|
73 |
if (gesture) { |
|
74 |
QStm_GestureType gtype = gesture->getGestureStmType(); |
|
75 |
||
76 |
/* |
|
77 |
* Touch mapped to mouse press, Tap mapped to mouse release |
|
78 |
* UpDown, LeftRight and Pan are mapped to mouse move. |
|
79 |
*/ |
|
80 |
if (gtype == QStmMaybeTapGestureType) {// in case of tap send mouse release |
|
81 |
gesture->setGestureStmType(QStmReleaseGestureType); |
|
82 |
} |
|
83 |
||
84 |
bool ret = (gtype == QStmTouchGestureType || |
|
85 |
gtype == QStmMaybeTapGestureType || |
|
86 |
gtype == QStmLeftRightGestureType || |
|
87 |
gtype == QStmUpDownGestureType || |
|
88 |
gtype == QStmPanGestureType || |
|
89 |
gtype == QStmReleaseGestureType || |
|
90 |
gtype == QStmFlickGestureType || |
|
91 |
gtype == QStmUknownGestureType) ; |
|
92 |
||
93 |
if (ret) { |
|
94 |
gesture->sendMouseEvents(); |
|
95 |
(static_cast<QGestureEvent*>(event))->accept(QStm_Gesture::assignedType()); |
|
96 |
(static_cast<QGestureEvent*>(event))->accept(); |
|
97 |
} |
|
98 |
||
99 |
if (gtype == QStmTapGestureType) {// restore gesture type. |
|
100 |
gesture->setGestureStmType(QStmTapGestureType); |
|
101 |
} |
|
102 |
||
103 |
return ret; |
|
104 |
} |
|
105 |
} |
|
106 |
return false; |
|
107 |
} |
|
108 |
||
109 |
||
110 |
||
111 |
||
112 |
||
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
113 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
114 |
QStm_GestureEvent::QStm_GestureEvent(): |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
115 |
QEvent(QStm_GestureEvent::stmGestureEventType()) |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
116 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
117 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
118 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
119 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
120 |
QStm_GestureEvent::~QStm_GestureEvent() |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
121 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
122 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
123 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
124 |
|
16 | 125 |
QEvent::Type QStm_GestureEvent::stmGestureEventType() |
126 |
{ |
|
127 |
if (s_stmGestureEventType == QEvent::User) { |
|
128 |
s_stmGestureEventType = QEvent::registerEventType(QStmGestureEventType); |
|
129 |
} |
|
130 |
return static_cast<QEvent::Type>(QStmGestureEventType); |
|
131 |
} |
|
132 |
||
133 |
||
134 |
||
135 |
void QStm_Gesture::setAssignedGestureType(Qt::GestureType type) |
|
136 |
{ |
|
137 |
s_assignedType = type; |
|
138 |
} |
|
139 |
||
140 |
Qt::GestureType QStm_Gesture::assignedType() |
|
141 |
{ |
|
142 |
return s_assignedType; |
|
143 |
} |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
144 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
145 |
|
16 | 146 |
QGraphicsItem* QStm_Gesture::gestureGrabberItem() |
147 |
{ |
|
148 |
return s_gestureGrabberItem; |
|
149 |
} |
|
150 |
||
151 |
void QStm_Gesture::setGestureGrabberItem(QGraphicsItem* item) |
|
152 |
{ |
|
153 |
s_gestureGrabberItem = item; |
|
154 |
} |
|
155 |
||
156 |
||
157 |
QGraphicsItem* QStm_Gesture::gestureFocusedItem() |
|
158 |
{ |
|
159 |
return s_gestureFocusedItem; |
|
160 |
} |
|
161 |
||
162 |
void QStm_Gesture::setGestureFocusedItem(QGraphicsItem* item) |
|
163 |
{ |
|
164 |
s_gestureFocusedItem = item; |
|
165 |
} |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
166 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
167 |
QStm_Gesture::QStm_Gesture(QObject* parent) : QGesture(parent) |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
168 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
169 |
m_speed = 0.0; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
170 |
m_direction = -1; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
171 |
m_vector = QPoint(0,0); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
172 |
m_gstType = QStmUknownGestureType; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
173 |
m_state = Qt::NoGesture; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
174 |
m_gstSubType = 0; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
175 |
m_pos = QPoint(INT_MIN,INT_MIN); |
16 | 176 |
m_pos2 = QPoint(INT_MIN,INT_MIN); |
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
177 |
m_details = NULL; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
178 |
m_speedVec = QPointF(0.0, 0.0); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
179 |
m_target = NULL; |
16 | 180 |
m_timestamp = QTime::currentTime(); |
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
181 |
}; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
182 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
183 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
184 |
QStm_Gesture& QStm_Gesture::operator=(QStm_Gesture& other) |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
185 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
186 |
m_speed = other.getSpeed(); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
187 |
m_direction = other.getDirection(); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
188 |
m_vector = other.getLengthAndDirection(); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
189 |
m_gstType = other.getGestureStmType(); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
190 |
m_state = other.gestureState(); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
191 |
m_gstSubType = other.getGestureSubType(); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
192 |
m_pos = other.position(); |
16 | 193 |
m_pos2 = other.position2(); |
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
194 |
m_details = other.getDetails(); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
195 |
m_speedVec = other.getSpeedVec(); |
16 | 196 |
m_target = other.target(); |
197 |
m_timestamp = other.timestamp(); |
|
198 |
setHotSpot(other.hotSpot()); |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
199 |
return *this; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
200 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
201 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
202 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
203 |
QString QStm_Gesture::gestureName() |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
204 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
205 |
switch (m_gstType) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
206 |
case QStmUknownGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
207 |
return QString("QStmUknownGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
208 |
case QStmTouchGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
209 |
return QString("QStmTouchGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
210 |
case QStmTapGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
211 |
return QString("QStmTapGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
212 |
case QStmDoubleTapGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
213 |
return QString("QStmDoubleTapGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
214 |
case QStmLongPressGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
215 |
return QString("QStmLongPressGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
216 |
case QStmHoverGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
217 |
return QString("QStmHoverGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
218 |
case QStmPanGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
219 |
return QString("QStmPanGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
220 |
case QStmReleaseGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
221 |
return QString("QStmReleaseGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
222 |
case QStmLeftRightGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
223 |
return QString("QStmLeftRightGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
224 |
case QStmUpDownGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
225 |
return QString("QString"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
226 |
case QStmFlickGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
227 |
return QString("QStmFlickGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
228 |
case QStmEdgeScrollGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
229 |
return QString("QStmEdgeScrollGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
230 |
case QStmPinchGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
231 |
return QString("QStmPinchGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
232 |
case QStmCornerZoomGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
233 |
return QString("QStmCornerZoomGestureType"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
234 |
default: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
235 |
return QString("XZ Gesture"); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
236 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
237 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
238 |
|
16 | 239 |
|
240 |
||
241 |
QStm_GestureType QStm_Gesture::gestureUidToStmType(QStm_GestureUid uid, int stmGestSubType) |
|
242 |
{ |
|
243 |
QStm_GestureType gtype = QStmUknownGestureType; |
|
244 |
||
245 |
switch (uid) { |
|
246 |
case EGestureUidTap: |
|
247 |
{ |
|
248 |
QStm_TapType type = qstmGesture::QStm_TapType(stmGestSubType); |
|
249 |
if (type == qstmGesture::ETapTypeDouble) { |
|
250 |
gtype = QStmDoubleTapGestureType; |
|
251 |
} |
|
252 |
else { |
|
253 |
gtype = QStmTapGestureType; |
|
254 |
} |
|
255 |
break; |
|
256 |
} |
|
257 |
||
258 |
case EGestureUidTouch: |
|
259 |
{ |
|
260 |
gtype = QStmTouchGestureType; |
|
261 |
break; |
|
262 |
} |
|
263 |
||
264 |
case EGestureUidRelease: |
|
265 |
{ |
|
266 |
gtype = QStmReleaseGestureType; |
|
267 |
break; |
|
268 |
} |
|
269 |
||
270 |
case EGestureUidFlick: |
|
271 |
{ |
|
272 |
gtype = QStmFlickGestureType; |
|
273 |
break; |
|
274 |
} |
|
275 |
||
276 |
case EGestureUidLeftRight: |
|
277 |
{ |
|
278 |
gtype = QStmLeftRightGestureType; |
|
279 |
break; |
|
280 |
} |
|
281 |
||
282 |
case EGestureUidUpDown: |
|
283 |
{ |
|
284 |
gtype = QStmUpDownGestureType; |
|
285 |
break; |
|
286 |
} |
|
287 |
||
288 |
case EGestureUidPan: |
|
289 |
{ |
|
290 |
gtype = QStmPanGestureType; |
|
291 |
break; |
|
292 |
} |
|
293 |
||
294 |
case EGestureUidHover: |
|
295 |
{ |
|
296 |
gtype = QStmHoverGestureType; |
|
297 |
break; |
|
298 |
} |
|
299 |
||
300 |
case EGestureUidLongPress: |
|
301 |
{ |
|
302 |
gtype = QStmLongPressGestureType; |
|
303 |
break; |
|
304 |
} |
|
305 |
||
306 |
case EGestureUidEdgeScroll: |
|
307 |
{ |
|
308 |
gtype = QStmEdgeScrollGestureType; |
|
309 |
break; |
|
310 |
} |
|
311 |
||
312 |
case EGestureUidCornerZoom: |
|
313 |
{ |
|
314 |
gtype = QStmCornerZoomGestureType; |
|
315 |
break; |
|
316 |
} |
|
317 |
||
318 |
case EGestureUidPinch: |
|
319 |
{ |
|
320 |
gtype = QStmPinchGestureType; |
|
321 |
break; |
|
322 |
} |
|
323 |
case EGestureUidMaybeTap: |
|
324 |
{ |
|
325 |
gtype = QStmMaybeTapGestureType; |
|
326 |
break; |
|
327 |
} |
|
328 |
default: |
|
329 |
{ |
|
330 |
gtype = QStmUknownGestureType; |
|
331 |
break; |
|
332 |
} |
|
333 |
} |
|
334 |
return gtype; |
|
335 |
} |
|
336 |
||
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
337 |
void QStm_Gesture::gestureTypeToMouseTypes(QVarLengthArray<int, 4>& types) |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
338 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
339 |
switch (m_gstType) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
340 |
case QStmTouchGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
341 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
342 |
types.append(QEvent::MouseButtonPress); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
343 |
break; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
344 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
345 |
case QStmDoubleTapGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
346 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
347 |
types.append(QEvent::MouseButtonDblClick); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
348 |
break; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
349 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
350 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
351 |
case QStmHoverGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
352 |
case QStmPanGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
353 |
case QStmLeftRightGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
354 |
case QStmUpDownGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
355 |
case QStmCornerZoomGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
356 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
357 |
types.append(QEvent::MouseMove); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
358 |
break; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
359 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
360 |
case QStmReleaseGestureType: |
16 | 361 |
case QStmFlickGestureType: |
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
362 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
363 |
types.append(QEvent::MouseButtonRelease); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
364 |
break; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
365 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
366 |
case QStmTapGestureType: |
16 | 367 |
//case QStmMaybeTapGestureType: |
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
368 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
369 |
types.append(QEvent::MouseButtonPress); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
370 |
types.append(QEvent::MouseButtonRelease); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
371 |
break; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
372 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
373 |
case QStmUknownGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
374 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
375 |
QStm_UiEventIf* uiEvent = static_cast<QStm_UiEventIf*>(m_details); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
376 |
if (uiEvent) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
377 |
QEvent::Type evType = uiEvent->mapToMouseEventType(); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
378 |
types.append(evType); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
379 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
380 |
break; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
381 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
382 |
case QStmEdgeScrollGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
383 |
case QStmPinchGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
384 |
case QStmLongPressGestureType: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
385 |
default: |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
386 |
break; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
387 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
388 |
return; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
389 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
390 |
|
16 | 391 |
|
392 |
||
393 |
||
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
394 |
bool QStm_Gesture::sendOrPostMouseEvents(QObject* receiver, Qt::KeyboardModifier modifier, bool send) |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
395 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
396 |
bool ret = false; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
397 |
QPoint pos = position(); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
398 |
QPoint gpos = pos; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
399 |
QWidget* w = NULL; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
400 |
Qt::MouseButtons buttons = Qt::LeftButton; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
401 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
402 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
403 |
buttons &= ~Qt::RightButton; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
404 |
buttons &= ~Qt::MidButton; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
405 |
buttons &= Qt::MouseButtonMask; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
406 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
407 |
if (receiver->isWidgetType()) { |
16 | 408 |
w = static_cast<QWidget*>(receiver); |
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
409 |
pos = w->mapFromGlobal(gpos); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
410 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
411 |
|
16 | 412 |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
413 |
QVarLengthArray<int, 4> mouseTypes; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
414 |
gestureTypeToMouseTypes(mouseTypes); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
415 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
416 |
for (int i = 0; i < mouseTypes.size(); i++) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
417 |
QEvent::Type mtype = static_cast<QEvent::Type>(mouseTypes[i]); |
16 | 418 |
|
419 |
if (mtype == QEvent::None) { |
|
420 |
continue; |
|
421 |
} |
|
422 |
else if (mtype != QEvent::MouseButtonRelease && w) { |
|
423 |
QPoint wtl = w->mapToGlobal(w->pos()); |
|
424 |
QRect wgeom = QRect(wtl, w->size()); |
|
425 |
if (!wgeom.contains(m_pos)) { |
|
426 |
continue; |
|
427 |
} |
|
428 |
} |
|
429 |
||
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
430 |
if (mtype == QEvent::MouseButtonRelease) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
431 |
buttons = 0; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
432 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
433 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
434 |
if (send) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
435 |
QMouseEvent evt(mtype, pos, gpos, Qt::LeftButton, buttons, modifier); |
16 | 436 |
//if (w) w->grabMouse(); |
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
437 |
QApplication::sendEvent(receiver, &evt); |
16 | 438 |
//if (w) w->releaseMouse(); |
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
439 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
440 |
else { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
441 |
QMouseEvent* evt = new QMouseEvent(mtype, pos, gpos, Qt::LeftButton, buttons, modifier); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
442 |
QApplication::postEvent(receiver, evt); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
443 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
444 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
445 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
446 |
return ret; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
447 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
448 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
449 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
450 |
bool QStm_Gesture::sendEvent(QEvent* event) |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
451 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
452 |
QWidget* target = static_cast<QWidget*>(m_target); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
453 |
QWidget* w = NULL; |
16 | 454 |
QWidget* modal = QApplication::activeModalWidget(); |
455 |
||
456 |
||
457 |
||
458 |
if (modal) { |
|
459 |
target = modal; |
|
460 |
} |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
461 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
462 |
if (target) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
463 |
QPoint pos = target->mapFromGlobal(m_pos); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
464 |
w = target->childAt(pos); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
465 |
if (!w) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
466 |
w = target; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
467 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
468 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
469 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
470 |
if (w) { |
16 | 471 |
if (modal) { //we send mouse events to modal dialogs. |
472 |
return(sendMouseEvents(w)); |
|
473 |
} |
|
474 |
/* |
|
475 |
else if (event->type() == QStm_GestureEvent::stmGestureEventType() && |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
476 |
m_gstType == QStmUknownGestureType) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
477 |
QStm_UiEventIf* uiEvent = static_cast<QStm_UiEventIf*>(m_details); |
16 | 478 |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
479 |
if (uiEvent && m_target == modal) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
480 |
//re-generate mouse events |
16 | 481 |
return(sendMouseEvents(w)); |
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
482 |
} |
16 | 483 |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
484 |
else { |
16 | 485 |
return(QApplication::sendEvent(w, event)); |
486 |
} |
|
487 |
} |
|
488 |
*/ |
|
489 |
else { |
|
490 |
if (!target->hasFocus()) { |
|
491 |
target->setFocus(Qt::MouseFocusReason); |
|
492 |
} |
|
493 |
return(QApplication::sendEvent(w, event)); |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
494 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
495 |
} |
16 | 496 |
return false; |
497 |
} |
|
498 |
||
499 |
||
500 |
bool QStm_Gesture::sendGraphicsSceneMouseEvent(QGraphicsObject* go) |
|
501 |
{ |
|
502 |
QEvent::Type eventType = gestureType2GraphicsSceneMouseType(); |
|
503 |
bool ret = false; |
|
504 |
||
505 |
if (eventType != QEvent::None) { |
|
506 |
QGraphicsSceneMouseEvent gsme(eventType); |
|
507 |
QPointF scenePos = qstmMapToScene(m_pos, go); |
|
508 |
qstmSetGraphicsSceneMouseEvent(scenePos, go, gsme); |
|
509 |
ret = go->event(&gsme); |
|
510 |
} |
|
511 |
return ret; |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
512 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
513 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
514 |
|
16 | 515 |
QEvent::Type QStm_Gesture::gestureType2GraphicsSceneMouseType() |
516 |
{ |
|
517 |
QEvent::Type type = QEvent::None; |
|
518 |
switch(m_gstType) |
|
519 |
{ |
|
520 |
case QStmTouchGestureType: |
|
521 |
type = QEvent::GraphicsSceneMousePress; |
|
522 |
break; |
|
523 |
case QStmMaybeTapGestureType: |
|
524 |
case QStmReleaseGestureType: |
|
525 |
case QStmFlickGestureType: |
|
526 |
type = QEvent::GraphicsSceneMouseRelease; |
|
527 |
break; |
|
528 |
case QStmLeftRightGestureType: |
|
529 |
case QStmUpDownGestureType: |
|
530 |
case QStmPanGestureType: |
|
531 |
type = QEvent::GraphicsSceneMouseMove; |
|
532 |
break; |
|
533 |
case QStmUknownGestureType: |
|
534 |
{ |
|
535 |
QVarLengthArray<int, 4> mouseTypes; |
|
536 |
gestureTypeToMouseTypes(mouseTypes); |
|
537 |
switch (mouseTypes[0]) |
|
538 |
{ |
|
539 |
case QEvent::MouseButtonPress: |
|
540 |
type = QEvent::GraphicsSceneMousePress; |
|
541 |
break; |
|
542 |
case QEvent::MouseButtonRelease: |
|
543 |
type = QEvent::GraphicsSceneMouseRelease; |
|
544 |
break; |
|
545 |
case QEvent::MouseMove: |
|
546 |
type = QEvent::GraphicsSceneMouseMove; |
|
547 |
break; |
|
548 |
} |
|
549 |
} |
|
550 |
} |
|
551 |
return type; |
|
552 |
} |
|
553 |
||
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
554 |
bool QStm_Gesture::sendMouseEvents(Qt::KeyboardModifier modifier) |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
555 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
556 |
QWidget* target = static_cast<QWidget*>(m_target); |
16 | 557 |
|
558 |
if (!target) { |
|
559 |
target = QApplication::widgetAt(m_pos); |
|
560 |
} |
|
561 |
if (!target) return false; |
|
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
562 |
QPoint pos = target->mapFromGlobal(m_pos); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
563 |
QWidget* w = target->childAt(pos); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
564 |
if (!w) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
565 |
w = target; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
566 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
567 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
568 |
return sendMouseEvents(w); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
569 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
570 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
571 |
bool QStm_Gesture::sendMouseEvents(QObject* receiver, Qt::KeyboardModifier modifier) |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
572 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
573 |
return sendOrPostMouseEvents(receiver, modifier, true); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
574 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
575 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
576 |
bool QStm_Gesture::postMouseEvents(QObject* receiver, Qt::KeyboardModifier modifier) |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
577 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
578 |
return sendOrPostMouseEvents(receiver, modifier, false); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
579 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
580 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
581 |
QList<QMouseEvent*> QStm_Gesture::getMouseEvents() |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
582 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
583 |
QList<QMouseEvent*> mouseEventsList; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
584 |
QPoint pos = position(); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
585 |
QPoint gpos = pos; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
586 |
Qt::MouseButtons buttons = Qt::LeftButton; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
587 |
buttons &= ~Qt::RightButton; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
588 |
buttons &= ~Qt::MidButton; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
589 |
buttons &= Qt::MouseButtonMask; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
590 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
591 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
592 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
593 |
QVarLengthArray<int, 4> mouseTypes; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
594 |
gestureTypeToMouseTypes(mouseTypes); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
595 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
596 |
for (int i = 0; i < mouseTypes.size(); i++) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
597 |
QMouseEvent* evt = new QMouseEvent(static_cast<QEvent::Type>(mouseTypes[i]), |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
598 |
pos, gpos, Qt::LeftButton, buttons, Qt::NoModifier); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
599 |
mouseEventsList.append(evt); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
600 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
601 |
return mouseEventsList; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
602 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
603 |
|
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
604 |
|
16 | 605 |
bool QStm_Gesture::isGestureEnded() |
606 |
{ |
|
607 |
bool gestureEnded = false; |
|
608 |
||
609 |
if (m_gstType == QStmUknownGestureType) { |
|
610 |
QStm_UiEventIf* uiEvent = static_cast<QStm_UiEventIf*>(m_details); |
|
611 |
if (uiEvent) { |
|
612 |
QEvent::Type evType = uiEvent->mapToMouseEventType(); |
|
613 |
gestureEnded = (evType == ERelease); |
|
614 |
} |
|
615 |
} |
|
616 |
else if (m_gstType == QStmReleaseGestureType || |
|
617 |
m_gstType == QStmFlickGestureType || |
|
618 |
m_gstType == QStmTapGestureType || |
|
619 |
m_gstType == QStmDoubleTapGestureType) { |
|
620 |
gestureEnded = true; |
|
621 |
} |
|
622 |
return gestureEnded; |
|
623 |
} |
|
624 |
||
625 |
bool QStm_Gesture::clearGestureFocusedItemIfNeeded() |
|
626 |
{ |
|
627 |
bool reset = isGestureEnded(); |
|
628 |
if (reset) { |
|
629 |
QStm_Gesture::setGestureFocusedItem(NULL); |
|
630 |
} |
|
631 |
return reset; |
|
632 |
} |
|
633 |
||
634 |
void QStm_Gesture::updateGestureFocusedItemIfNeeded(QGraphicsItem* gi) |
|
635 |
{ |
|
636 |
if (isGestureEnded()) { |
|
637 |
QStm_Gesture::setGestureFocusedItem(NULL); |
|
638 |
} |
|
639 |
else if (gestureState() != Qt::GestureFinished) { |
|
640 |
QStm_Gesture::setGestureFocusedItem(gi); |
|
641 |
} |
|
642 |
} |
|
643 |
||
644 |
QPointF QStm_Gesture::scenePosition(QGraphicsItem* i) |
|
645 |
{ |
|
646 |
return qstmMapToScene(m_pos, static_cast<QGraphicsObject*>(i)); |
|
647 |
} |
|
648 |
||
649 |
QPointF QStm_Gesture::scenePosition2(QGraphicsItem* i) |
|
650 |
{ |
|
651 |
return qstmMapToScene(m_pos2, static_cast<QGraphicsObject*>(i)); |
|
652 |
} |
|
653 |
||
654 |
QPointF QStm_Gesture::sceneSpeedVec(QGraphicsItem* i) |
|
655 |
{ |
|
656 |
QGraphicsObject* o = static_cast<QGraphicsObject*>(i); |
|
657 |
||
658 |
return qstmMapToScene(m_speedVec,o) - qstmMapToScene(QPointF(0, 0), o); |
|
659 |
} |
|
660 |
||
661 |
QPointF QStm_Gesture::sceneLengthAndDirection(QGraphicsItem* i) |
|
662 |
{ |
|
663 |
QGraphicsObject* o = static_cast<QGraphicsObject*>(i); |
|
664 |
||
665 |
return qstmMapToScene(QPointF(-m_vector.x(), m_vector.y()),o) - qstmMapToScene(QPointF(0, 0), o); |
|
666 |
} |
|
667 |
||
668 |
int QStm_Gesture::sceneDirection(QGraphicsItem *i) |
|
669 |
{ |
|
670 |
QStm_GestureDirection dir = ENorth ; |
|
671 |
QPointF v = sceneLengthAndDirection(i); |
|
672 |
||
673 |
qreal x = qAbs(v.x()) ; |
|
674 |
qreal y = qAbs(v.y()) ; |
|
675 |
||
676 |
if (y == 0 && x == 0) { |
|
677 |
dir = ENoDirection; |
|
678 |
} |
|
679 |
else if (y <= x/2) { |
|
680 |
if (v.x() < 0) |
|
681 |
dir = EWest ; |
|
682 |
else |
|
683 |
dir = EEast ; |
|
684 |
} |
|
685 |
else if (y > x/2 && y <= (x+x/2)) { |
|
686 |
if (v.x() < 0) { |
|
687 |
if (v.y() < 0 ) |
|
688 |
dir = ESouthWest ; |
|
689 |
else |
|
690 |
dir = ENorthWest ; |
|
691 |
} |
|
692 |
else { |
|
693 |
if (v.y() < 0 ) |
|
694 |
dir = ESouthEast ; |
|
695 |
else |
|
696 |
dir = ENorthEast ; |
|
697 |
} |
|
698 |
} |
|
699 |
else if (y > x+x/2) { |
|
700 |
if (v.y() < 0) |
|
701 |
dir = ESouth ; |
|
702 |
else |
|
703 |
dir = ENorth ; |
|
704 |
} |
|
705 |
||
706 |
return dir ; |
|
707 |
} |
|
708 |
||
709 |
QSTMGESTURELIB_EXPORT QPoint qstmMapFromScene(const QPointF& gpos, QGraphicsObject* graphicsObj) |
|
710 |
{ |
|
711 |
QGraphicsView* grView = qstmGetGraphicsView(graphicsObj); |
|
712 |
QPointF pos = QPointF(0.0, 0.0); |
|
713 |
if (grView) { |
|
714 |
pos = grView->mapFromScene(gpos); |
|
715 |
return grView->mapToGlobal(pos.toPoint()); |
|
716 |
} |
|
717 |
return QPoint(0, 0); |
|
718 |
} |
|
719 |
||
720 |
||
721 |
QSTMGESTURELIB_EXPORT QPointF qstmMapToScene(const QPointF& gpos, QGraphicsObject* graphicsObj) |
|
722 |
{ |
|
723 |
QGraphicsView* grView = qstmGetGraphicsView(graphicsObj); |
|
724 |
QPointF pos = QPointF(0.0, 0.0); |
|
725 |
if (grView) { |
|
726 |
pos = grView->mapFromGlobal(gpos.toPoint()); |
|
727 |
pos = grView->mapToScene(pos.toPoint()); |
|
728 |
} |
|
729 |
return pos; |
|
730 |
} |
|
731 |
||
732 |
||
733 |
QSTMGESTURELIB_EXPORT QPointF qstmMapFromGlobal(const QPointF& gpos, QGraphicsObject* graphicsObj) |
|
734 |
{ |
|
735 |
QGraphicsView* grView = qstmGetGraphicsView(graphicsObj); |
|
736 |
QPointF pos = QPointF(0.0, 0.0); |
|
737 |
if (grView) { |
|
738 |
pos = grView->mapFromGlobal(gpos.toPoint()); |
|
739 |
} |
|
740 |
return pos; |
|
741 |
} |
|
742 |
||
743 |
QSTMGESTURELIB_EXPORT QGraphicsView* qstmGetGraphicsView(QGraphicsObject* graphicsObj) |
|
744 |
{ |
|
745 |
QGraphicsScene* scene = graphicsObj->scene(); |
|
746 |
QList<QGraphicsView*> gvList = scene->views(); |
|
747 |
QList<QGraphicsView*>::iterator it; |
|
748 |
||
749 |
/* |
|
750 |
for (it = gvList.begin(); it != gvList.end(); it++) { |
|
751 |
if (static_cast<QGraphicsView*>(*it)->hasFocus()) { |
|
752 |
return static_cast<QGraphicsView*>(*it); |
|
753 |
} |
|
754 |
} |
|
755 |
*/ |
|
756 |
return gvList.isEmpty() ? NULL : gvList[0]; |
|
757 |
} |
|
758 |
||
0
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
759 |
QSTMGESTURELIB_EXPORT QStm_Gesture* getQStmGesture(QEvent* event) |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
760 |
{ |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
761 |
QStm_Gesture* gesture = NULL; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
762 |
if (event->type() == QEvent::Gesture) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
763 |
QGestureEvent* ge = static_cast<QGestureEvent*>(event); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
764 |
QList<QGesture*> l = ge->gestures(); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
765 |
QGesture* g = !l.isEmpty() ? l.at(0) : NULL; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
766 |
if (g && g->gestureType() == QStm_Gesture::assignedType()) { |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
767 |
gesture = static_cast<QStm_Gesture*>(g); |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
768 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
769 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
770 |
return gesture; |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
771 |
} |
1450b09d0cfd
Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
772 |
|
16 | 773 |
QSTMGESTURELIB_EXPORT bool qstmDeliverGestureEventToGraphicsItem(QGraphicsView* gv, QEvent* event) |
774 |
{ |
|
775 |
if (event->type() != QEvent::Gesture) return false; |
|
776 |
||
777 |
bool ret = false; |
|
778 |
QStm_Gesture* gesture = getQStmGesture(event); |
|
779 |
if (gesture) { |
|
780 |
||
781 |
QGraphicsScene* gs = gv->scene(); |
|
782 |
QGraphicsItem* gestureGrabber = QStm_Gesture::gestureGrabberItem(); |
|
783 |
QGraphicsItem* gi = QStm_Gesture::gestureFocusedItem(); |
|
784 |
QGraphicsItem* mgItem = gs->mouseGrabberItem(); |
|
785 |
||
786 |
if (gestureGrabber) { |
|
787 |
gs->sendEvent(gestureGrabber, event); |
|
788 |
ret = true; //no fallback to mouse events |
|
789 |
} |
|
790 |
else { |
|
791 |
if (!gi) { |
|
792 |
gi = mgItem; |
|
793 |
} |
|
794 |
if (!gi) { |
|
795 |
QPoint pos = gv->mapFromGlobal(gesture->position()); |
|
796 |
pos = gv->mapToScene(pos).toPoint(); |
|
797 |
QList<QGraphicsItem *> itemsList = gs->items(pos, Qt::IntersectsItemShape, |
|
798 |
Qt::DescendingOrder); |
|
799 |
for(int i = 0; i < itemsList.size(); i++) { |
|
800 |
||
801 |
if (itemsList[i] && (itemsList[i])->opacity() < qreal(0.001)) { |
|
802 |
continue; |
|
803 |
} |
|
804 |
gi = itemsList[i]; |
|
805 |
gs->setFocusItem(gi, Qt::MouseFocusReason); |
|
806 |
break; |
|
807 |
} |
|
808 |
} |
|
809 |
if (gi) { |
|
810 |
//gs->setFocusItem(gi, Qt::MouseFocusReason); |
|
811 |
//ret = gs->sendEvent(gi, event); |
|
812 |
//gs->setFocusItem(0, Qt::MouseFocusReason); |
|
813 |
||
814 |
QGraphicsObject* go = gi->toGraphicsObject(); |
|
815 |
if (go) { |
|
816 |
ret = go->event(event); |
|
817 |
} |
|
818 |
||
819 |
} |
|
820 |
} |
|
821 |
||
822 |
if (!ret) { // fallback to mouse events |
|
823 |
QStm_GestureEventFilter::instance()->event(event); |
|
824 |
ret = true; |
|
825 |
} |
|
826 |
else if (!gestureGrabber) { |
|
827 |
gesture->updateGestureFocusedItemIfNeeded(gi); |
|
828 |
} |
|
829 |
} |
|
830 |
return ret; |
|
831 |
} |
|
832 |
||
833 |
||
834 |
QSTMGESTURELIB_EXPORT void qstmSetGraphicsSceneMouseEvent(const QPointF& scenePos, QGraphicsObject* graphicsObj, |
|
835 |
QGraphicsSceneMouseEvent& event, bool select) |
|
836 |
{ |
|
837 |
QPointF pos = scenePos; |
|
838 |
QPoint gpos = qstmMapFromScene(pos, graphicsObj); |
|
839 |
||
840 |
event.setScenePos(pos); |
|
841 |
event.setScreenPos(gpos); |
|
842 |
event.setPos(graphicsObj->mapFromScene(pos)); |
|
843 |
if (!select && event.type() != QEvent::GraphicsSceneMouseMove) { |
|
844 |
event.setButton(Qt::LeftButton); |
|
845 |
} |
|
846 |
else { |
|
847 |
event.setButton(Qt::NoButton); |
|
848 |
} |
|
849 |
if (!select) { |
|
850 |
event.setButtons(Qt::NoButton); |
|
851 |
} |
|
852 |
else { |
|
853 |
event.setButtons(Qt::LeftButton); |
|
854 |
} |
|
855 |
event.setModifiers(Qt::NoModifier); |
|
856 |
} |
|
857 |
||
858 |
QSTMGESTURELIB_EXPORT bool qstmIsGraphicsSceneMouseEvent(QEvent* event) |
|
859 |
{ |
|
860 |
QEvent::Type type = event->type(); |
|
861 |
return type == QEvent::GraphicsSceneMouseMove || |
|
862 |
type == QEvent::GraphicsSceneMousePress || |
|
863 |
type == QEvent::GraphicsSceneMouseRelease || |
|
864 |
type == QEvent::GraphicsSceneMouseDoubleClick; |
|
865 |
} |
|
866 |
||
867 |
QSTMGESTURELIB_EXPORT bool qstmIsMouseEvent(QEvent* event) |
|
868 |
{ |
|
869 |
QEvent::Type type = event->type(); |
|
870 |
return type == QEvent::MouseButtonPress || |
|
871 |
type == QEvent::MouseButtonRelease || |
|
872 |
type == QEvent::MouseMove || |
|
873 |
type == QEvent::MouseButtonDblClick; |
|
874 |
} |
|
875 |
||
876 |
QSTMGESTURELIB_EXPORT bool qstmIsTouchEvent(QEvent* event) |
|
877 |
{ |
|
878 |
QEvent::Type type = event->type(); |
|
879 |
return type == QEvent::TouchBegin || |
|
880 |
type == QEvent::TouchEnd || |
|
881 |
type == QEvent::TouchUpdate; |
|
882 |
} |
|
883 |
||
884 |
QSTMGESTURELIB_EXPORT bool qstmIsContextMenuEvent(QEvent* event) |
|
885 |
{ |
|
886 |
QEvent::Type type = event->type(); |
|
887 |
return type == QEvent::ContextMenu || |
|
888 |
type == QEvent::GraphicsSceneContextMenu; |
|
889 |
} |