aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquickevents.cpp10
-rw-r--r--src/quick/items/qquickevents_p_p.h10
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;