diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2018-01-12 13:32:10 +0100 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2018-03-02 12:54:04 +0000 |
commit | 73ab709ae2c0ab2bf7468b181a14ce3ec507abf4 (patch) | |
tree | 371f03c03a53f5f3710eae4b34e2298df074132a /src/quick | |
parent | 6479eb1967135b3b9d7c3b90501623c23d5cefa9 (diff) |
allow DeviceType and PointerType enums 16 bits each; bit packing
Now in QQuickPointerDevice, the types, flags and capabilities take up
64 bits together, and we reserve enough bits to add more types later.
In C++11 enums can be strongly typed by "inheriting" an integer type,
so we do that. They are signed because button count and
maximum touch points are signed, and because MS compilers do that
by default with enums.
Change-Id: I45f27bcceeef275cbee256472b35f78fbdeeaad6
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/items/qquickevents_p_p.h | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/quick/items/qquickevents_p_p.h b/src/quick/items/qquickevents_p_p.h index e06455124e..c4f0b60d92 100644 --- a/src/quick/items/qquickevents_p_p.h +++ b/src/quick/items/qquickevents_p_p.h @@ -566,7 +566,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPointerDevice : public QObject Q_PROPERTY(QPointingDeviceUniqueId uniqueId READ uniqueId CONSTANT) public: - enum DeviceType { + enum DeviceType : qint16 { UnknownDevice = 0x0000, Mouse = 0x0001, TouchScreen = 0x0002, @@ -574,25 +574,25 @@ public: Puck = 0x0008, Stylus = 0x0010, Airbrush = 0x0020, - AllDevices = 0x003F + AllDevices = 0x7FFF }; Q_DECLARE_FLAGS(DeviceTypes, DeviceType) Q_ENUM(DeviceType) Q_FLAG(DeviceTypes) - enum PointerType { + enum PointerType : qint16 { GenericPointer = 0x0001, Finger = 0x0002, Pen = 0x0004, Eraser = 0x0008, Cursor = 0x0010, - AllPointerTypes = 0x001F + AllPointerTypes = 0x7FFF }; Q_DECLARE_FLAGS(PointerTypes, PointerType) Q_ENUM(PointerType) Q_FLAG(PointerTypes) - enum CapabilityFlag { + enum CapabilityFlag : qint16 { Position = QTouchDevice::Position, Area = QTouchDevice::Area, Pressure = QTouchDevice::Pressure, @@ -610,7 +610,7 @@ public: DeviceType type() const { return m_deviceType; } PointerType pointerType() const { return m_pointerType; } - Capabilities capabilities() const { return m_capabilities; } + Capabilities capabilities() const { return static_cast<Capabilities>(m_capabilities); } bool hasCapability(CapabilityFlag cap) { return m_capabilities & cap; } int maximumTouchPoints() const { return m_maximumTouchPoints; } int buttonCount() const { return m_buttonCount; } @@ -626,19 +626,21 @@ public: private: QQuickPointerDevice(DeviceType devType, PointerType pType, Capabilities caps, int maxPoints, int buttonCount, const QString &name, qint64 uniqueId = 0) - : m_deviceType(devType), m_pointerType(pType), m_capabilities(caps) - , m_maximumTouchPoints(maxPoints), m_buttonCount(buttonCount), m_name(name) + : m_deviceType(devType), m_pointerType(pType), m_capabilities(static_cast<qint16>(caps)) + , m_maximumTouchPoints(static_cast<qint8>(maxPoints)), m_buttonCount(static_cast<qint8>(buttonCount)), m_name(name) , m_uniqueId(QPointingDeviceUniqueId::fromNumericId(uniqueId)) { } ~QQuickPointerDevice() override { } private: + // begin 64-bit field DeviceType m_deviceType; PointerType m_pointerType; - Capabilities m_capabilities; - int m_maximumTouchPoints; - int m_buttonCount; + qint16 m_capabilities; + qint8 m_maximumTouchPoints; + qint8 m_buttonCount; + // end 64-bit field QString m_name; QPointingDeviceUniqueId m_uniqueId; QVector<QQuickPointerHandler *> m_eventDeliveryTargets; // during delivery, handlers which have already seen the event |