25uint QWaylandTouchPrivate::sendDown(QWaylandSurface *surface, uint32_t time,
int touch_id,
const QPointF &position)
28 auto focusResource = resourceMap().value(surface->client()->client());
32 uint32_t serial = q->compositor()->nextSerial();
34 wl_touch_send_down(focusResource->handle, serial, time, surface->resource(), touch_id,
35 wl_fixed_from_double(position.x()), wl_fixed_from_double(position.y()));
39uint QWaylandTouchPrivate::sendUp(QWaylandClient *client, uint32_t time,
int touch_id)
41 auto focusResource = resourceMap().value(client->client());
46 uint32_t serial = compositor()->nextSerial();
48 wl_touch_send_up(focusResource->handle, serial, time, touch_id);
52void QWaylandTouchPrivate::sendMotion(QWaylandClient *client, uint32_t time,
int touch_id,
const QPointF &position)
54 auto focusResource = resourceMap().value(client->client());
59 wl_touch_send_motion(focusResource->handle, time, touch_id,
60 wl_fixed_from_double(position.x()), wl_fixed_from_double(position.y()));
119uint QWaylandTouch::sendTouchPointEvent(QWaylandSurface *surface,
int id,
const QPointF &position, Qt::TouchPointState state)
122 uint32_t time = compositor()->currentTimeMsecs();
125 case Qt::TouchPointPressed:
126 serial = d->sendDown(surface, time, id, position);
128 case Qt::TouchPointMoved:
129 d->sendMotion(surface->client(), time, id, position);
131 case Qt::TouchPointReleased:
132 serial = d->sendUp(surface->client(), time, id);
134 case Qt::TouchPointStationary:
137 case Qt::TouchPointUnknownState:
174void QWaylandTouch::sendFullTouchEvent(QWaylandSurface *surface, QTouchEvent *event)
177 if (event->type() == QEvent::TouchCancel) {
178 sendCancelEvent(surface->client());
182 const QList<QTouchEvent::TouchPoint> points = event->points();
183 if (points.isEmpty())
186 const int pointCount = points.size();
187 for (
int i = 0; i < pointCount; ++i) {
188 const QTouchEvent::TouchPoint &tp(points.at(i));
190 const int id = d->toSequentialWaylandId(tp.id());
191 sendTouchPointEvent(surface, id, tp.position(), Qt::TouchPointState(tp.state()));
192 if (tp.state() == QEventPoint::Released)
195 sendFrameEvent(surface->client());
201void QWaylandTouch::addClient(QWaylandClient *client, uint32_t id, uint32_t version)
204 d->add(client->client(), id, qMin<uint32_t>(QtWaylandServer::wl_touch::interfaceVersion(), version));