QWSI: Use floating point number for tablet tilt

On some platforms (like Wayland and X11) we get non-integer values,
and the QTabletEvent API also exposes it as qreal.

However the QWSI API uses int, resulting in potential loss of
information

Task-number: QTBUG-8059
Change-Id: I9d2856a053091415c6f9e886fdd87ed71254fdd2
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Nicolas Fella 2024-12-27 02:41:04 +01:00 committed by Shawn Rutledge
parent 1da7558bfd
commit 1b05fba9ac
5 changed files with 22 additions and 22 deletions

View File

@ -889,7 +889,7 @@ void QWindowSystemInterfacePrivate::TabletEvent::setPlatformSynthesizesMouse(boo
bool QWindowSystemInterface::handleTabletEvent(QWindow *window, ulong timestamp, const QPointingDevice *device, bool QWindowSystemInterface::handleTabletEvent(QWindow *window, ulong timestamp, const QPointingDevice *device,
const QPointF &local, const QPointF &global, const QPointF &local, const QPointF &global,
Qt::MouseButtons buttons, qreal pressure, int xTilt, int yTilt, Qt::MouseButtons buttons, qreal pressure, qreal xTilt, qreal yTilt,
qreal tangentialPressure, qreal rotation, int z, qreal tangentialPressure, qreal rotation, int z,
Qt::KeyboardModifiers modifiers) Qt::KeyboardModifiers modifiers)
{ {
@ -903,7 +903,7 @@ bool QWindowSystemInterface::handleTabletEvent(QWindow *window, ulong timestamp,
bool QWindowSystemInterface::handleTabletEvent(QWindow *window, const QPointingDevice *device, bool QWindowSystemInterface::handleTabletEvent(QWindow *window, const QPointingDevice *device,
const QPointF &local, const QPointF &global, const QPointF &local, const QPointF &global,
Qt::MouseButtons buttons, qreal pressure, int xTilt, int yTilt, Qt::MouseButtons buttons, qreal pressure, qreal xTilt, qreal yTilt,
qreal tangentialPressure, qreal rotation, int z, qreal tangentialPressure, qreal rotation, int z,
Qt::KeyboardModifiers modifiers) Qt::KeyboardModifiers modifiers)
{ {
@ -914,7 +914,7 @@ bool QWindowSystemInterface::handleTabletEvent(QWindow *window, const QPointingD
} }
bool QWindowSystemInterface::handleTabletEvent(QWindow *window, ulong timestamp, const QPointF &local, const QPointF &global, bool QWindowSystemInterface::handleTabletEvent(QWindow *window, ulong timestamp, const QPointF &local, const QPointF &global,
int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, int xTilt, int yTilt, int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, qreal xTilt, qreal yTilt,
qreal tangentialPressure, qreal rotation, int z, qint64 uid, qreal tangentialPressure, qreal rotation, int z, qint64 uid,
Qt::KeyboardModifiers modifiers) Qt::KeyboardModifiers modifiers)
{ {
@ -925,7 +925,7 @@ bool QWindowSystemInterface::handleTabletEvent(QWindow *window, ulong timestamp,
} }
bool QWindowSystemInterface::handleTabletEvent(QWindow *window, const QPointF &local, const QPointF &global, bool QWindowSystemInterface::handleTabletEvent(QWindow *window, const QPointF &local, const QPointF &global,
int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, int xTilt, int yTilt, int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, qreal xTilt, qreal yTilt,
qreal tangentialPressure, qreal rotation, int z, qint64 uid, qreal tangentialPressure, qreal rotation, int z, qint64 uid,
Qt::KeyboardModifiers modifiers) Qt::KeyboardModifiers modifiers)
{ {
@ -936,7 +936,7 @@ bool QWindowSystemInterface::handleTabletEvent(QWindow *window, const QPointF &l
bool QWindowSystemInterface::handleTabletEnterLeaveProximityEvent(QWindow *window, ulong timestamp, const QPointingDevice *device, bool QWindowSystemInterface::handleTabletEnterLeaveProximityEvent(QWindow *window, ulong timestamp, const QPointingDevice *device,
bool inProximity, const QPointF &local, const QPointF &global, bool inProximity, const QPointF &local, const QPointF &global,
Qt::MouseButtons buttons, int xTilt, int yTilt, Qt::MouseButtons buttons, qreal xTilt, qreal yTilt,
qreal tangentialPressure, qreal rotation, int z, qreal tangentialPressure, qreal rotation, int z,
Qt::KeyboardModifiers modifiers) Qt::KeyboardModifiers modifiers)
{ {
@ -957,7 +957,7 @@ bool QWindowSystemInterface::handleTabletEnterLeaveProximityEvent(QWindow *windo
bool QWindowSystemInterface::handleTabletEnterLeaveProximityEvent(QWindow *window, const QPointingDevice *device, bool QWindowSystemInterface::handleTabletEnterLeaveProximityEvent(QWindow *window, const QPointingDevice *device,
bool inProximity, const QPointF &local, const QPointF &global, bool inProximity, const QPointF &local, const QPointF &global,
Qt::MouseButtons buttons, int xTilt, int yTilt, Qt::MouseButtons buttons, qreal xTilt, qreal yTilt,
qreal tangentialPressure, qreal rotation, int z, qreal tangentialPressure, qreal rotation, int z,
Qt::KeyboardModifiers modifiers) Qt::KeyboardModifiers modifiers)
{ {

View File

@ -206,28 +206,28 @@ public:
static bool handleTabletEvent(QWindow *window, ulong timestamp, const QPointingDevice *device, static bool handleTabletEvent(QWindow *window, ulong timestamp, const QPointingDevice *device,
const QPointF &local, const QPointF &global, const QPointF &local, const QPointF &global,
Qt::MouseButtons buttons, qreal pressure, int xTilt, int yTilt, Qt::MouseButtons buttons, qreal pressure, qreal xTilt, qreal yTilt,
qreal tangentialPressure, qreal rotation, int z, Qt::KeyboardModifiers modifiers = Qt::NoModifier); qreal tangentialPressure, qreal rotation, int z, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
static bool handleTabletEvent(QWindow *window, const QPointingDevice *device, static bool handleTabletEvent(QWindow *window, const QPointingDevice *device,
const QPointF &local, const QPointF &global, const QPointF &local, const QPointF &global,
Qt::MouseButtons buttons, qreal pressure, int xTilt, int yTilt, Qt::MouseButtons buttons, qreal pressure, qreal xTilt, qreal yTilt,
qreal tangentialPressure, qreal rotation, int z, Qt::KeyboardModifiers modifiers = Qt::NoModifier); qreal tangentialPressure, qreal rotation, int z, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
static bool handleTabletEvent(QWindow *window, ulong timestamp, const QPointF &local, const QPointF &global, static bool handleTabletEvent(QWindow *window, ulong timestamp, const QPointF &local, const QPointF &global,
int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, int xTilt, int yTilt, int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, qreal xTilt, qreal yTilt,
qreal tangentialPressure, qreal rotation, int z, qint64 uid, qreal tangentialPressure, qreal rotation, int z, qint64 uid,
Qt::KeyboardModifiers modifiers = Qt::NoModifier); Qt::KeyboardModifiers modifiers = Qt::NoModifier);
static bool handleTabletEvent(QWindow *window, const QPointF &local, const QPointF &global, static bool handleTabletEvent(QWindow *window, const QPointF &local, const QPointF &global,
int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, int xTilt, int yTilt, int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, qreal xTilt, qreal yTilt,
qreal tangentialPressure, qreal rotation, int z, qint64 uid, qreal tangentialPressure, qreal rotation, int z, qint64 uid,
Qt::KeyboardModifiers modifiers = Qt::NoModifier); Qt::KeyboardModifiers modifiers = Qt::NoModifier);
static bool handleTabletEnterLeaveProximityEvent(QWindow *window, ulong timestamp, const QPointingDevice *device, static bool handleTabletEnterLeaveProximityEvent(QWindow *window, ulong timestamp, const QPointingDevice *device,
bool inProximity, const QPointF &local = QPointF(), const QPointF &global = QPointF(), bool inProximity, const QPointF &local = QPointF(), const QPointF &global = QPointF(),
Qt::MouseButtons buttons = {}, int xTilt = 0, int yTilt = 0, Qt::MouseButtons buttons = {}, qreal xTilt = 0, qreal yTilt = 0,
qreal tangentialPressure = 0, qreal rotation = 0, int z = 0, qreal tangentialPressure = 0, qreal rotation = 0, int z = 0,
Qt::KeyboardModifiers modifiers = Qt::NoModifier); Qt::KeyboardModifiers modifiers = Qt::NoModifier);
static bool handleTabletEnterLeaveProximityEvent(QWindow *window, const QPointingDevice *device, static bool handleTabletEnterLeaveProximityEvent(QWindow *window, const QPointingDevice *device,
bool inProximity, const QPointF &local = QPointF(), const QPointF &global = QPointF(), bool inProximity, const QPointF &local = QPointF(), const QPointF &global = QPointF(),
Qt::MouseButtons buttons = {}, int xTilt = 0, int yTilt = 0, Qt::MouseButtons buttons = {}, qreal xTilt = 0 , qreal yTilt = 0,
qreal tangentialPressure = 0, qreal rotation = 0, int z = 0, qreal tangentialPressure = 0, qreal rotation = 0, int z = 0,
Qt::KeyboardModifiers modifiers = Qt::NoModifier); Qt::KeyboardModifiers modifiers = Qt::NoModifier);

View File

@ -365,13 +365,13 @@ public:
public: public:
// TODO take QPointingDevice* instead of types and IDs // TODO take QPointingDevice* instead of types and IDs
static void handleTabletEvent(QWindow *w, const QPointF &local, const QPointF &global, static void handleTabletEvent(QWindow *w, const QPointF &local, const QPointF &global,
int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, int xTilt, int yTilt, int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, qreal xTilt, qreal yTilt,
qreal tangentialPressure, qreal rotation, int z, qint64 uid, qreal tangentialPressure, qreal rotation, int z, qint64 uid,
Qt::KeyboardModifiers modifiers = Qt::NoModifier); Qt::KeyboardModifiers modifiers = Qt::NoModifier);
static void setPlatformSynthesizesMouse(bool v); static void setPlatformSynthesizesMouse(bool v);
TabletEvent(QWindow *w, ulong time, const QPointF &local, const QPointF &global, TabletEvent(QWindow *w, ulong time, const QPointF &local, const QPointF &global,
const QPointingDevice *device, Qt::MouseButtons b, qreal pressure, int xTilt, int yTilt, qreal tpressure, const QPointingDevice *device, Qt::MouseButtons b, qreal pressure, qreal xTilt, qreal yTilt, qreal tpressure,
qreal rotation, int z, Qt::KeyboardModifiers mods) qreal rotation, int z, Qt::KeyboardModifiers mods)
: PointerEvent(w, time, Tablet, mods, device), : PointerEvent(w, time, Tablet, mods, device),
buttons(b), local(local), global(global), buttons(b), local(local), global(global),
@ -381,8 +381,8 @@ public:
QPointF local; QPointF local;
QPointF global; QPointF global;
qreal pressure; qreal pressure;
int xTilt; qreal xTilt;
int yTilt; qreal yTilt;
qreal tangentialPressure; qreal tangentialPressure;
qreal rotation; qreal rotation;
int z; int z;

View File

@ -656,8 +656,8 @@ bool QWindowsTabletSupport::translateTabletPacketEvent()
const qreal tangentialPressure = m_currentDevice->type() == QInputDevice::DeviceType::Airbrush const qreal tangentialPressure = m_currentDevice->type() == QInputDevice::DeviceType::Airbrush
? current.scaleTangentialPressure(packet.pkTangentPressure) : qreal(0); ? current.scaleTangentialPressure(packet.pkTangentPressure) : qreal(0);
int tiltX = 0; qreal tiltX = 0;
int tiltY = 0; qreal tiltY = 0;
qreal rotation = 0; qreal rotation = 0;
if (m_tiltSupport) { if (m_tiltSupport) {
// Convert from azimuth and altitude to x tilt and y tilt. What // Convert from azimuth and altitude to x tilt and y tilt. What
@ -672,8 +672,8 @@ bool QWindowsTabletSupport::translateTabletPacketEvent()
const double radX = std::atan(std::sin(radAzim) / tanAlt); const double radX = std::atan(std::sin(radAzim) / tanAlt);
const double radY = std::atan(std::cos(radAzim) / tanAlt); const double radY = std::atan(std::cos(radAzim) / tanAlt);
tiltX = int(qRadiansToDegrees(radX)); tiltX = qRadiansToDegrees(radX);
tiltY = int(qRadiansToDegrees(-radY)); tiltY = qRadiansToDegrees(-radY);
rotation = 360.0 - (packet.pkOrientation.orTwist / 10.0); rotation = 360.0 - (packet.pkOrientation.orTwist / 10.0);
if (rotation > 180.0) if (rotation > 180.0)
rotation -= 360.0; rotation -= 360.0;

View File

@ -1598,7 +1598,7 @@ void QXcbConnection::xi2ReportTabletEvent(const void *event, TabletData *tabletD
QPointF local(fixed1616ToReal(ev->event_x), fixed1616ToReal(ev->event_y)); QPointF local(fixed1616ToReal(ev->event_x), fixed1616ToReal(ev->event_y));
QPointF global(fixed1616ToReal(ev->root_x), fixed1616ToReal(ev->root_y)); QPointF global(fixed1616ToReal(ev->root_x), fixed1616ToReal(ev->root_y));
double pressure = 0, rotation = 0, tangentialPressure = 0; double pressure = 0, rotation = 0, tangentialPressure = 0;
int xTilt = 0, yTilt = 0; qreal xTilt = 0, yTilt = 0;
static const bool useValuators = !qEnvironmentVariableIsSet("QT_XCB_TABLET_LEGACY_COORDINATES"); static const bool useValuators = !qEnvironmentVariableIsSet("QT_XCB_TABLET_LEGACY_COORDINATES");
const QPointingDevice *dev = QPointingDevicePrivate::tabletDevice(QInputDevice::DeviceType(tabletData->tool), const QPointingDevice *dev = QPointingDevicePrivate::tabletDevice(QInputDevice::DeviceType(tabletData->tool),
QPointingDevice::PointerType(tabletData->pointerType), QPointingDevice::PointerType(tabletData->pointerType),
@ -1664,7 +1664,7 @@ void QXcbConnection::xi2ReportTabletEvent(const void *event, TabletData *tabletD
if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled())) if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled()))
qCDebug(lcQpaXInputEvents, "XI2 event on tablet %d with tool %s %llx type %s seq %d detail %d time %d " qCDebug(lcQpaXInputEvents, "XI2 event on tablet %d with tool %s %llx type %s seq %d detail %d time %d "
"pos %6.1f, %6.1f root pos %6.1f, %6.1f buttons 0x%x pressure %4.2lf tilt %d, %d rotation %6.2lf modifiers 0x%x", "pos %6.1f, %6.1f root pos %6.1f, %6.1f buttons 0x%x pressure %4.2lf tilt %4.2lf, %4.2lf rotation %6.2lf modifiers 0x%x",
tabletData->deviceId, toolName(tabletData->tool), tabletData->serialId, pointerTypeName(tabletData->pointerType), tabletData->deviceId, toolName(tabletData->tool), tabletData->serialId, pointerTypeName(tabletData->pointerType),
ev->sequence, ev->detail, ev->time, ev->sequence, ev->detail, ev->time,
local.x(), local.y(), global.x(), global.y(), local.x(), local.y(), global.x(), global.y(),