/*! \internal */ void QDeclarativeGeoMap::touchEvent(QTouchEvent *event) { if (isInteractive()) { m_gestureArea->handleTouchEvent(event); if ( event->type() == QEvent::TouchEnd || event->type() == QEvent::TouchCancel) { ungrabTouchPoints(); } } //this will always ignore event so sythesized event is generated; QQuickItem::touchEvent(event); }
void QcMapItem::touchEvent(QTouchEvent * event) { // qInfo(); if (is_interactive()) { m_gesture_area->handle_touch_event(event); if (event->type() == QEvent::TouchEnd or event->type() == QEvent::TouchCancel) { ungrabTouchPoints(); } } else // ignore event so sythesized event is generated; QQuickItem::touchEvent(event); }
bool QcMapItem::send_touch_event(QTouchEvent * event) { QQuickWindowPrivate * _window = window() ? QQuickWindowPrivate::get(window()) : nullptr; const QTouchEvent::TouchPoint & point = event->touchPoints().first(); QQuickItem * grabber = _window ? _window->itemForTouchPointId.value(point.id()) : nullptr; // Fixme: faster ? bool is_mouse_area = QString(grabber->metaObject()->className()).startsWith(QStringLiteral("QQuickMouseArea")); bool steal_event = m_gesture_area->is_active(); bool contains_point = contains(mapFromScene(point.scenePos())); if (is_mouse_area and (steal_event or contains_point) and (!grabber or !grabber->keepTouchGrab())) { QScopedPointer<QTouchEvent> touch_event(new QTouchEvent(event->type(), event->device(), event->modifiers(), event->touchPointStates(), event->touchPoints())); touch_event->setTimestamp(event->timestamp()); touch_event->setAccepted(false); m_gesture_area->handle_touch_event(touch_event.data()); steal_event = m_gesture_area->is_active(); // recheck value // Fixme: duplicated code ??? grabber = _window ? _window->itemForTouchPointId.value(point.id()) : nullptr; if (grabber and steal_event and !grabber->keepTouchGrab() and grabber != this) { QVector<int> ids; for (const auto & touch_point : event->touchPoints()) if (!(touch_point.state() & Qt::TouchPointReleased)) ids.append(touch_point.id()); grabTouchPoints(ids); } if (steal_event) { // do not deliver event->setAccepted(true); return true; } else return false; } else { // ungrab if necessary and deliver event if (event->type() == QEvent::TouchEnd and (_window and _window->itemForTouchPointId.value(point.id()) == this)) ungrabTouchPoints(); return false; } }
void QQuickMultiPointTouchArea::ungrab() { _stealMouse = false; setKeepMouseGrab(false); setKeepTouchGrab(false); ungrabTouchPoints(); if (_touchPoints.count()) { for (QObject *obj : qAsConst(_touchPoints)) static_cast<QQuickTouchPoint*>(obj)->setPressed(false); emit canceled(_touchPoints.values()); clearTouchLists(); for (QObject *obj : qAsConst(_touchPoints)) { QQuickTouchPoint *dtp = static_cast<QQuickTouchPoint*>(obj); if (!dtp->isQmlDefined()) delete dtp; else dtp->setInUse(false); } _touchPoints.clear(); emit touchUpdated(QList<QObject*>()); } }