QPoint/F: add transposed()

For symmetry with QSize and QRect and because there were some users in Qt.

Port those users.

[ChangeLog][QtCore][QPoint/QPointF] Added transposed().

Change-Id: If4f23dbcf7d67983a6b1885e0d1d538115b49e2b
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
Marc Mutz 2019-08-03 09:27:49 +03:00
parent 247ab241c7
commit 1563c38a4b
6 changed files with 45 additions and 4 deletions

View File

@ -138,6 +138,17 @@ QT_BEGIN_NAMESPACE
\sa y(), setX() \sa y(), setX()
*/ */
/*!
\fn QPoint::transposed() const
\since 5.14
Returns a point with x and y coordinates exchanged:
\code
QPoint{1, 2}.transposed() // {2, 1}
\endcode
\sa x(), y(), setX(), setY()
*/
/*! /*!
\fn int &QPoint::rx() \fn int &QPoint::rx()
@ -582,6 +593,18 @@ QDebug operator<<(QDebug dbg, const QPointF &p)
\sa y(), setX() \sa y(), setX()
*/ */
/*!
\fn QPointF::transposed() const
\since 5.14
Returns a point with x and y coordinates exchanged:
\code
QPointF{1.0, 2.0}.transposed() // {2.0, 1.0}
\endcode
\sa x(), y(), setX(), setY()
*/
/*! /*!
\fn qreal& QPointF::rx() \fn qreal& QPointF::rx()

View File

@ -64,6 +64,8 @@ public:
Q_DECL_CONSTEXPR inline int manhattanLength() const; Q_DECL_CONSTEXPR inline int manhattanLength() const;
Q_DECL_CONSTEXPR QPoint transposed() const noexcept { return {yp, xp}; }
Q_DECL_RELAXED_CONSTEXPR inline int &rx(); Q_DECL_RELAXED_CONSTEXPR inline int &rx();
Q_DECL_RELAXED_CONSTEXPR inline int &ry(); Q_DECL_RELAXED_CONSTEXPR inline int &ry();
@ -232,6 +234,8 @@ public:
Q_DECL_RELAXED_CONSTEXPR inline void setX(qreal x); Q_DECL_RELAXED_CONSTEXPR inline void setX(qreal x);
Q_DECL_RELAXED_CONSTEXPR inline void setY(qreal y); Q_DECL_RELAXED_CONSTEXPR inline void setY(qreal y);
Q_DECL_CONSTEXPR QPointF transposed() const noexcept { return {yp, xp}; }
Q_DECL_RELAXED_CONSTEXPR inline qreal &rx(); Q_DECL_RELAXED_CONSTEXPR inline qreal &rx();
Q_DECL_RELAXED_CONSTEXPR inline qreal &ry(); Q_DECL_RELAXED_CONSTEXPR inline qreal &ry();

View File

@ -997,8 +997,8 @@ void QXcbConnection::xi2HandleScrollEvent(void *event, ScrollingDevice &scrollin
QPoint global(fixed1616ToReal(xiDeviceEvent->root_x), fixed1616ToReal(xiDeviceEvent->root_y)); QPoint global(fixed1616ToReal(xiDeviceEvent->root_x), fixed1616ToReal(xiDeviceEvent->root_y));
Qt::KeyboardModifiers modifiers = keyboard()->translateModifiers(xiDeviceEvent->mods.effective); Qt::KeyboardModifiers modifiers = keyboard()->translateModifiers(xiDeviceEvent->mods.effective);
if (modifiers & Qt::AltModifier) { if (modifiers & Qt::AltModifier) {
std::swap(angleDelta.rx(), angleDelta.ry()); angleDelta = angleDelta.transposed();
std::swap(rawDelta.rx(), rawDelta.ry()); rawDelta = rawDelta.transposed();
} }
qCDebug(lcQpaXInputEvents) << "scroll wheel @ window pos" << local << "delta px" << rawDelta << "angle" << angleDelta; qCDebug(lcQpaXInputEvents) << "scroll wheel @ window pos" << local << "delta px" << rawDelta << "angle" << angleDelta;
QWindowSystemInterface::handleWheelEvent(platformWindow->window(), xiDeviceEvent->time, local, global, rawDelta, angleDelta, modifiers); QWindowSystemInterface::handleWheelEvent(platformWindow->window(), xiDeviceEvent->time, local, global, rawDelta, angleDelta, modifiers);
@ -1024,7 +1024,7 @@ void QXcbConnection::xi2HandleScrollEvent(void *event, ScrollingDevice &scrollin
QPoint global(fixed1616ToReal(xiDeviceEvent->root_x), fixed1616ToReal(xiDeviceEvent->root_y)); QPoint global(fixed1616ToReal(xiDeviceEvent->root_x), fixed1616ToReal(xiDeviceEvent->root_y));
Qt::KeyboardModifiers modifiers = keyboard()->translateModifiers(xiDeviceEvent->mods.effective); Qt::KeyboardModifiers modifiers = keyboard()->translateModifiers(xiDeviceEvent->mods.effective);
if (modifiers & Qt::AltModifier) if (modifiers & Qt::AltModifier)
std::swap(angleDelta.rx(), angleDelta.ry()); angleDelta = angleDelta.transposed();
qCDebug(lcQpaXInputEvents) << "scroll wheel (button" << xiDeviceEvent->detail << ") @ window pos" << local << "delta angle" << angleDelta; qCDebug(lcQpaXInputEvents) << "scroll wheel (button" << xiDeviceEvent->detail << ") @ window pos" << local << "delta angle" << angleDelta;
QWindowSystemInterface::handleWheelEvent(platformWindow->window(), xiDeviceEvent->time, local, global, QPoint(), angleDelta, modifiers); QWindowSystemInterface::handleWheelEvent(platformWindow->window(), xiDeviceEvent->time, local, global, QPoint(), angleDelta, modifiers);
} }

View File

@ -1908,7 +1908,7 @@ void QXcbWindow::handleButtonPressEvent(int event_x, int event_y, int root_x, in
else if (detail == 7) else if (detail == 7)
angleDelta.setX(-120); angleDelta.setX(-120);
if (modifiers & Qt::AltModifier) if (modifiers & Qt::AltModifier)
std::swap(angleDelta.rx(), angleDelta.ry()); angleDelta = angleDelta.transposed();
QWindowSystemInterface::handleWheelEvent(window(), timestamp, local, global, QPoint(), angleDelta, modifiers); QWindowSystemInterface::handleWheelEvent(window(), timestamp, local, global, QPoint(), angleDelta, modifiers);
#if QT_CONFIG(xcb_xinput) #if QT_CONFIG(xcb_xinput)
} }

View File

@ -42,6 +42,8 @@ private slots:
void getSet_data(); void getSet_data();
void getSet(); void getSet();
void transposed();
void rx(); void rx();
void ry(); void ry();
@ -126,6 +128,11 @@ void tst_QPoint::getSet()
QCOMPARE(point.y(), i); QCOMPARE(point.y(), i);
} }
void tst_QPoint::transposed()
{
QCOMPARE(QPoint(1, 2).transposed(), QPoint(2, 1));
}
void tst_QPoint::rx() void tst_QPoint::rx()
{ {
const QPoint originalPoint(-1, 0); const QPoint originalPoint(-1, 0);

View File

@ -46,6 +46,8 @@ private slots:
void getSet_data(); void getSet_data();
void getSet(); void getSet();
void transposed();
void rx(); void rx();
void ry(); void ry();
@ -154,6 +156,11 @@ void tst_QPointF::getSet()
QCOMPARE(point.y(), r); QCOMPARE(point.y(), r);
} }
void tst_QPointF::transposed()
{
QCOMPARE(QPointF(1, 2).transposed(), QPointF(2, 1));
}
void tst_QPointF::rx() void tst_QPointF::rx()
{ {
const QPointF originalPoint(-1, 0); const QPointF originalPoint(-1, 0);