diff options
-rw-r--r-- | src/quick/items/qquickevents.cpp | 10 | ||||
-rw-r--r-- | src/quick/items/qquickevents_p_p.h | 10 |
2 files changed, 14 insertions, 6 deletions
diff --git a/src/quick/items/qquickevents.cpp b/src/quick/items/qquickevents.cpp index d670898020..c79f77061a 100644 --- a/src/quick/items/qquickevents.cpp +++ b/src/quick/items/qquickevents.cpp @@ -475,6 +475,7 @@ void QQuickPointerEvent::initFromMouse(QMouseEvent *ev) { if (!m_mousePoint) m_mousePoint = new QQuickEventPoint; + m_pointCount = 1; m_mousePoint->reset(state, ev->windowPos(), 0); // mouse is 0 } @@ -485,11 +486,12 @@ void QQuickPointerEvent::initFromTouch(QTouchEvent *ev) { m_pressedButtons = Qt::NoButton; const QList<QTouchEvent::TouchPoint> &tps = ev->touchPoints(); - const int pointCount = tps.count(); - while (pointCount > m_touchPoints.count()) - m_touchPoints.append(new QQuickEventTouchPoint); + m_pointCount = tps.count(); + m_touchPoints.reserve(m_pointCount); + for (int i = m_touchPoints.size(); i < m_pointCount; ++i) + m_touchPoints.insert(i, new QQuickEventTouchPoint); - for (int i = 0; i < pointCount; ++i) + for (int i = 0; i < m_pointCount; ++i) m_touchPoints.at(i)->reset(tps.at(i)); } diff --git a/src/quick/items/qquickevents_p_p.h b/src/quick/items/qquickevents_p_p.h index ae55f2f399..0ce395d7df 100644 --- a/src/quick/items/qquickevents_p_p.h +++ b/src/quick/items/qquickevents_p_p.h @@ -395,6 +395,7 @@ public: , m_event(nullptr) , m_button(Qt::NoButton) , m_pressedButtons(Qt::NoButton) + , m_pointCount(0) , m_mousePoint(nullptr) { } /** Reset the current event to \a ev. @@ -424,11 +425,15 @@ public: bool isTabletEvent() const; bool isValid() const { return m_event != nullptr; } - int pointCount() const { return isTouchEvent() ? m_touchPoints.count() : 1; } + int pointCount() const { return m_pointCount; } const QQuickEventPoint *point(int i) const { + if (Q_UNLIKELY(i < 0 || i >= m_pointCount)) + return nullptr; if (isTouchEvent()) return m_touchPoints.at(i); - return i == 0 ? m_mousePoint : nullptr; + if (isMouseEvent()) + return m_mousePoint; + return nullptr; } const QTouchEvent::TouchPoint *touchPointById(int pointId) const; @@ -440,6 +445,7 @@ protected: QInputEvent *m_event; // original event as received by QQuickWindow Qt::MouseButton m_button; Qt::MouseButtons m_pressedButtons; + int m_pointCount; QVector<QQuickEventTouchPoint *> m_touchPoints; QQuickEventPoint *m_mousePoint; |