diff options
author | HIDAKA Takahiro <[email protected]> | 2024-09-11 03:56:49 +0900 |
---|---|---|
committer | Hidaka Takahiro <[email protected]> | 2025-01-16 18:44:40 +0000 |
commit | 38aa7f5fe70103b08298fb0c1a3431beb217f950 (patch) | |
tree | 0b0e654f67beecc27a03fc8d1cffefd7cf50e731 | |
parent | 0a017308cca154b6f906c6e143fb33fe109316bc (diff) |
iOS: Add QPointingDevice for Apple Pencil
For Apple Pencil 1st generation, it supports xTilt and yTilt
capabilities.
Task-number: QTBUG-128466
Change-Id: I572a303a4d213417004cacadbc7cef9c96334720
Reviewed-by: Tor Arne Vestbø <[email protected]>
-rw-r--r-- | src/plugins/platforms/ios/qiosintegration.h | 6 | ||||
-rw-r--r-- | src/plugins/platforms/ios/qiosintegration.mm | 13 | ||||
-rw-r--r-- | src/plugins/platforms/ios/quiview.mm | 12 |
3 files changed, 26 insertions, 5 deletions
diff --git a/src/plugins/platforms/ios/qiosintegration.h b/src/plugins/platforms/ios/qiosintegration.h index 6c2014d048f..47ffbce3701 100644 --- a/src/plugins/platforms/ios/qiosintegration.h +++ b/src/plugins/platforms/ios/qiosintegration.h @@ -72,6 +72,9 @@ public: QPlatformNativeInterface *nativeInterface() const override; QPointingDevice *touchDevice(); +#if QT_CONFIG(tabletevent) + QPointingDevice *pencilDevice(); +#endif #if QT_CONFIG(accessibility) QPlatformAccessibility *accessibility() const override; #endif @@ -109,6 +112,9 @@ private: #endif QPlatformInputContext *m_inputContext; QPointingDevice *m_touchDevice; +#if QT_CONFIG(tabletevent) + QPointingDevice *m_pencilDevice = nullptr; +#endif QIOSServices *m_platformServices; mutable QPlatformAccessibility *m_accessibility; QFactoryLoader *m_optionalPlugins; diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm index 69b79b111b3..a2a387cdcc5 100644 --- a/src/plugins/platforms/ios/qiosintegration.mm +++ b/src/plugins/platforms/ios/qiosintegration.mm @@ -104,6 +104,12 @@ void QIOSIntegration::initialize() QWindowSystemInterface::registerInputDevice(m_touchDevice); #if QT_CONFIG(tabletevent) QWindowSystemInterfacePrivate::TabletEvent::setPlatformSynthesizesMouse(false); + m_pencilDevice = new QPointingDevice( + "Apple Pencil", 0, QInputDevice::DeviceType::Stylus, QPointingDevice::PointerType::Pen, + QInputDevice::Capability::Position | QInputDevice::Capability::Pressure + | QInputDevice::Capability::XTilt | QInputDevice::Capability::YTilt, + 1, 0); + QWindowSystemInterface::registerInputDevice(m_pencilDevice); #endif QMacMimeRegistry::initializeMimeTypes(); @@ -271,6 +277,13 @@ QPointingDevice *QIOSIntegration::touchDevice() return m_touchDevice; } +#if QT_CONFIG(tabletevent) +QPointingDevice *QIOSIntegration::pencilDevice() +{ + return m_pencilDevice; +} +#endif + #if QT_CONFIG(accessibility) QPlatformAccessibility *QIOSIntegration::accessibility() const { diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm index ae6d98dd7b1..c069296f24a 100644 --- a/src/plugins/platforms/ios/quiview.mm +++ b/src/plugins/platforms/ios/quiview.mm @@ -387,13 +387,15 @@ inline ulong getTimeStamp(UIEvent *event) qCDebug(lcQpaTablet) << i << ":" << timeStamp << localViewPosition << pressure << state << "azimuth" << azimuth.dx << azimuth.dy << "angle" << azimuthAngle << "altitude" << cTouch.altitudeAngle << "xTilt" << qBound(-60.0, altitudeAngle * azimuth.dx, 60.0) << "yTilt" << qBound(-60.0, altitudeAngle * azimuth.dy, 60.0); - QWindowSystemInterface::handleTabletEvent(self.platformWindow->window(), timeStamp, localViewPosition, globalScreenPosition, - // device, pointerType, buttons - int(QInputDevice::DeviceType::Stylus), int(QPointingDevice::PointerType::Pen), state == QEventPoint::State::Released ? Qt::NoButton : Qt::LeftButton, + QWindowSystemInterface::handleTabletEvent(self.platformWindow->window(), timeStamp, + // device, local, global + iosIntegration->pencilDevice(), localViewPosition, globalScreenPosition, + // buttons + state == QEventPoint::State::Released ? Qt::NoButton : Qt::LeftButton, // pressure, xTilt, yTilt pressure, qBound(-60.0, altitudeAngle * azimuth.dx, 60.0), qBound(-60.0, altitudeAngle * azimuth.dy, 60.0), - // tangentialPressure, rotation, z, uid, modifiers - 0, azimuthAngle, 0, 0, Qt::NoModifier); + // tangentialPressure, rotation, z, modifiers + 0, azimuthAngle, 0, Qt::NoModifier); ++i; } } |