summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHIDAKA Takahiro <[email protected]>2024-09-11 03:56:49 +0900
committerHidaka Takahiro <[email protected]>2025-01-16 18:44:40 +0000
commit38aa7f5fe70103b08298fb0c1a3431beb217f950 (patch)
tree0b0e654f67beecc27a03fc8d1cffefd7cf50e731
parent0a017308cca154b6f906c6e143fb33fe109316bc (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.h6
-rw-r--r--src/plugins/platforms/ios/qiosintegration.mm13
-rw-r--r--src/plugins/platforms/ios/quiview.mm12
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;
}
}