9#include <QtQuick3D/private/qquick3dnode_p.h>
10#include <QtGui/QMouseEvent>
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
43 m_scrollTimer =
new QTimer(
this);
44 m_scrollTimer->setInterval(m_scrollTimerInterval);
45 connect(m_scrollTimer, SIGNAL(timeout()),
this, SLOT(generateWheelEvent()));
49
50
51
52
53
57 return m_rightMouseButton;
61
62
63
64
65
69 return m_leftMouseButton;
73
74
75
76
77
81 return m_middleMouseButton;
85
86
87
88
89
90
91
92
96 return m_scrollWheelX;
100
101
102
103
104
105
106
107
111 return m_scrollWheelY;
115
116
117
118
122 return m_scrollTimerInterval;
126
127
128
129
130
131
132
133
137 return m_scrollPixelDelta;
141
142
143
144
145
146
147
155
156
157
158
166
167
168
169
178 if (m_rightMouseButton == rightMouseButton)
181 m_rightMouseButton = rightMouseButton;
182 emit rightMouseButtonChanged(m_rightMouseButton);
183 if (m_rightMouseButton) {
185 generateEvent(QEvent::MouseButtonPress, Qt::RightButton);
188 generateEvent(QEvent::MouseButtonRelease, Qt::RightButton);
194 if (m_leftMouseButton == leftMouseButton)
197 m_leftMouseButton = leftMouseButton;
198 emit leftMouseButtonChanged(m_leftMouseButton);
199 if (m_leftMouseButton) {
201 generateEvent(QEvent::MouseButtonPress, Qt::LeftButton);
204 generateEvent(QEvent::MouseButtonRelease, Qt::LeftButton);
210 if (m_middleMouseButton == middleMouseButton)
213 m_middleMouseButton = middleMouseButton;
214 emit middleMouseButtonChanged(m_middleMouseButton);
215 if (m_middleMouseButton) {
217 generateEvent(QEvent::MouseButtonPress, Qt::MiddleButton);
220 generateEvent(QEvent::MouseButtonRelease, Qt::MiddleButton);
226 if (m_scrollWheelX == scrollWheelX)
229 m_scrollWheelX = scrollWheelX;
230 emit scrollWheelXChanged(m_scrollWheelX);
231 if ((m_scrollTimer->isActive()) && (m_scrollWheelX == 0)) {
232 m_scrollTimer->stop();
233 }
else if (!m_scrollTimer->isActive()) {
234 m_scrollTimer->start();
240 if (m_scrollWheelY == scrollWheelY)
243 m_scrollWheelY = scrollWheelY;
244 emit scrollWheelYChanged(m_scrollWheelY);
245 if ((m_scrollTimer->isActive()) && (m_scrollWheelY == 0)) {
246 m_scrollTimer->stop();
247 }
else if (!m_scrollTimer->isActive()) {
248 m_scrollTimer->start();
254 if (m_scrollTimerInterval == scrollTimerInterval)
257 m_scrollTimerInterval = scrollTimerInterval;
258 m_scrollTimer->setInterval(m_scrollTimerInterval);
260 emit scrollTimerIntervalChanged(m_scrollTimerInterval);
265 if (m_scrollPixelDelta == scrollPixelDelta)
268 m_scrollPixelDelta = scrollPixelDelta;
270 emit scrollPixelDeltaChanged(m_scrollPixelDelta);
275 if (m_source == source)
279 disconnect(m_source, &QQuick3DNode::sceneTransformChanged,
this, &QQuick3DXrVirtualMouse::moveEvent);
282 emit sourceChanged(m_source);
285 connect(m_source, &QQuick3DNode::sceneTransformChanged,
this, &QQuick3DXrVirtualMouse::moveEvent);
294 emit viewChanged(m_view);
299 if (m_enabled == enabled)
302 emit enabledChanged(m_enabled);
305 if (!m_enabled && (m_leftMouseButton || m_rightMouseButton || m_middleMouseButton)) {
306 Qt::MouseButton button = m_leftMouseButton ? Qt::LeftButton : m_rightMouseButton ? Qt::RightButton : Qt::MiddleButton;
307 m_leftMouseButton = m_rightMouseButton = m_middleMouseButton =
false;
308 generateEvent(QEvent::MouseButtonRelease, button);
314 generateEvent(QEvent::MouseMove, Qt::NoButton);
319 if (!m_view || !m_source || m_view->m_inDestructor || !m_enabled)
323 const QVector3D origin = m_source->scenePosition();
324 const QVector3D direction = m_source->forward();
329 if (m_scrollWheelX > 0) {
330 x = m_scrollPixelDelta * m_scrollWheelX * m_scrollWheelX;
331 }
else if (m_scrollWheelX < 0) {
332 x = -m_scrollPixelDelta * m_scrollWheelX * m_scrollWheelX;
335 if (m_scrollWheelY > 0) {
336 y = m_scrollPixelDelta * m_scrollWheelY * m_scrollWheelY;
337 }
else if (m_scrollWheelY < 0) {
338 y = -m_scrollPixelDelta * m_scrollWheelY * m_scrollWheelY;
341 QPoint pixelDelta = QPoint(x, y);
342 QPoint angleDelta = QPoint(x*8, y*8);
345 QWheelEvent *event =
new QWheelEvent(QPointF(), QPointF(), pixelDelta, angleDelta,
346 Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase,
false);
349 if (m_view->view3d())
350 m_view->view3d()->singlePointPick(event, origin, direction);
358 if (!m_view || !m_source || m_view->m_inDestructor || !m_enabled)
362 const QVector3D origin = m_source->scenePosition();
363 const QVector3D direction = m_source->forward();
366 Qt::MouseButtons buttons = Qt::NoButton;
367 if (m_leftMouseButton)
368 buttons |= Qt::LeftButton;
369 if (m_rightMouseButton)
370 buttons |= Qt::RightButton;
371 if (m_middleMouseButton)
372 buttons |= Qt::MiddleButton;
375 QMouseEvent *event =
new QMouseEvent(type, QPointF(), QPointF(), button, buttons, Qt::NoModifier);
378 if (m_view->view3d())
379 m_view->view3d()->singlePointPick(event, origin, direction);
bool middleMouseButton() const
\qmlproperty bool XrVirtualMouse::middleMouseButton
QQuick3DXrView * view() const
\qmlproperty XrView XrVirtualMouse::view
void setEnabled(bool enabled)
float scrollWheelY() const
\qmlproperty real XrVirtualMouse::scrollWheelY
void setScrollWheelY(float scrollWheelY)
void setScrollWheelX(float scrollWheelX)
void setView(QQuick3DXrView *view)
float scrollWheelX() const
\qmlproperty real XrVirtualMouse::scrollWheelX
int scrollPixelDelta() const
\qmlproperty real XrVirtualMouse::scrollPixelDelta
bool rightMouseButton() const
\qmlproperty bool XrVirtualMouse::rightMouseButton
void setScrollTimerInterval(int scrollTimerInterval)
QQuick3DNode * source() const
\qmlproperty Node XrVirtualMouse::source
void setScrollPixelDelta(int scrollPixelDelta)
bool leftMouseButton() const
\qmlproperty bool XrVirtualMouse::leftMouseButton
void setMiddleMouseButton(bool middleMouseButton)
bool enabled() const
\qmlproperty bool XrVirtualMouse::enabled
int scrollTimerInterval() const
\qmlproperty int XrVirtualMouse::scrollTimerInterval
void setSource(QQuick3DNode *source)
void setLeftMouseButton(bool leftMouseButton)
Combined button and popup list for selecting options.