26uint QWaylandTouchPrivate::sendDown(QWaylandSurface *surface, uint32_t time,
int touch_id,
const QPointF &position)
29 auto focusResource = resourceMap().value(surface->client()->client());
33 uint32_t serial = q->compositor()->nextSerial();
35 wl_touch_send_down(focusResource->handle, serial, time, surface->resource(), touch_id,
36 wl_fixed_from_double(position.x()), wl_fixed_from_double(position.y()));
40uint QWaylandTouchPrivate::sendUp(QWaylandClient *client, uint32_t time,
int touch_id)
42 auto focusResource = resourceMap().value(client->client());
47 uint32_t serial = compositor()->nextSerial();
49 wl_touch_send_up(focusResource->handle, serial, time, touch_id);
53void QWaylandTouchPrivate::sendMotion(QWaylandClient *client, uint32_t time,
int touch_id,
const QPointF &position)
55 auto focusResource = resourceMap().value(client->client());
60 wl_touch_send_motion(focusResource->handle, time, touch_id,
61 wl_fixed_from_double(position.x()), wl_fixed_from_double(position.y()));
120uint QWaylandTouch::sendTouchPointEvent(QWaylandSurface *surface,
int id,
const QPointF &position, Qt::TouchPointState state)
123 uint32_t time = compositor()->currentTimeMsecs();
126 case Qt::TouchPointPressed:
127 serial = d->sendDown(surface, time, id, position);
129 case Qt::TouchPointMoved:
130 d->sendMotion(surface->client(), time, id, position);
132 case Qt::TouchPointReleased:
133 serial = d->sendUp(surface->client(), time, id);
135 case Qt::TouchPointStationary:
138 case Qt::TouchPointUnknownState:
175void QWaylandTouch::sendFullTouchEvent(QWaylandSurface *surface, QTouchEvent *event)
178 if (event->type() == QEvent::TouchCancel) {
179 sendCancelEvent(surface->client());
183 const QList<QTouchEvent::TouchPoint> points = event->points();
184 if (points.isEmpty())
187 const int pointCount = points.size();
188 for (
int i = 0; i < pointCount; ++i) {
189 const QTouchEvent::TouchPoint &tp(points.at(i));
191 const int id = d->toSequentialWaylandId(tp.id());
192 sendTouchPointEvent(surface, id, tp.position(), Qt::TouchPointState(tp.state()));
193 if (tp.state() == QEventPoint::Released)
196 sendFrameEvent(surface->client());
202void QWaylandTouch::addClient(QWaylandClient *client, uint32_t id, uint32_t version)
205 d->add(client->client(), id, qMin<uint32_t>(QtWaylandServer::wl_touch::interfaceVersion(), version));