diff options
-rw-r--r-- | src/quick/items/qquickitem.cpp | 64 | ||||
-rw-r--r-- | src/quick/items/qquickitem.h | 2 | ||||
-rw-r--r-- | src/quick/items/qquickitem_p.h | 2 |
3 files changed, 68 insertions, 0 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index ae7b197619..bea0e7bd57 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -3045,6 +3045,28 @@ void QQuickItemPrivate::itemToParentTransform(QTransform &t) const } /*! + Returns a transform that maps points from window space into global space. +*/ +QTransform QQuickItemPrivate::windowToGlobalTransform() const +{ + QPoint quickWidgetOffset; + QWindow *renderWindow = QQuickRenderControl::renderWindowFor(window, &quickWidgetOffset); + QPointF pos = (renderWindow ? renderWindow : window)->mapToGlobal(quickWidgetOffset); + return QTransform::fromTranslate(pos.x(), pos.y()); +} + +/*! + Returns a transform that maps points from global space into window space. +*/ +QTransform QQuickItemPrivate::globalToWindowTransform() const +{ + QPoint quickWidgetOffset; + QWindow *renderWindow = QQuickRenderControl::renderWindowFor(window, &quickWidgetOffset); + QPointF pos = (renderWindow ? renderWindow : window)->mapToGlobal(quickWidgetOffset); + return QTransform::fromTranslate(-pos.x(), -pos.y()); +} + +/*! Returns true if construction of the QML component is complete; otherwise returns false. @@ -7281,6 +7303,27 @@ QPointF QQuickItem::mapToScene(const QPointF &point) const } /*! + Maps the given \a point in this item's coordinate system to the equivalent + point within global screen coordinate system, and returns the mapped + coordinate. + + For example, this may be helpful to add a popup to a Qt Quick component. + + \note Window positioning is done by the window manager and this value is + treated only as a hint. So, the resulting window position may differ from + what is expected. + + \since 5.7 + + \sa {Concepts - Visual Coordinates in Qt Quick} +*/ +QPointF QQuickItem::mapToGlobal(const QPointF &point) const +{ + Q_D(const QQuickItem); + return d->windowToGlobalTransform().map(mapToScene(point)); +} + +/*! Maps the given \a rect in this item's coordinate system to the equivalent rectangular area within \a item's coordinate system, and returns the mapped rectangle value. @@ -7342,6 +7385,27 @@ QPointF QQuickItem::mapFromScene(const QPointF &point) const } /*! + Maps the given \a point in the global screen coordinate system to the + equivalent point within this item's coordinate system, and returns the + mapped coordinate. + + For example, this may be helpful to add a popup to a Qt Quick component. + + \note Window positioning is done by the window manager and this value is + treated only as a hint. So, the resulting window position may differ from + what is expected. + + \since 5.7 + + \sa {Concepts - Visual Coordinates in Qt Quick} +*/ +QPointF QQuickItem::mapFromGlobal(const QPointF &point) const +{ + Q_D(const QQuickItem); + return mapFromScene(d->globalToWindowTransform().map(point)); +} + +/*! Maps the given \a rect in \a item's coordinate system to the equivalent rectangular area within this item's coordinate system, and returns the mapped rectangle value. diff --git a/src/quick/items/qquickitem.h b/src/quick/items/qquickitem.h index 50d691b1b6..013128e95f 100644 --- a/src/quick/items/qquickitem.h +++ b/src/quick/items/qquickitem.h @@ -313,10 +313,12 @@ public: QTransform itemTransform(QQuickItem *, bool *) const; QPointF mapToItem(const QQuickItem *item, const QPointF &point) const; QPointF mapToScene(const QPointF &point) const; + Q_REVISION(7) Q_INVOKABLE QPointF mapToGlobal(const QPointF &point) const; QRectF mapRectToItem(const QQuickItem *item, const QRectF &rect) const; QRectF mapRectToScene(const QRectF &rect) const; QPointF mapFromItem(const QQuickItem *item, const QPointF &point) const; QPointF mapFromScene(const QPointF &point) const; + Q_REVISION(7) Q_INVOKABLE QPointF mapFromGlobal(const QPointF &point) const; QRectF mapRectFromItem(const QQuickItem *item, const QRectF &rect) const; QRectF mapRectFromScene(const QRectF &rect) const; diff --git a/src/quick/items/qquickitem_p.h b/src/quick/items/qquickitem_p.h index 634aa2b658..127352aaa7 100644 --- a/src/quick/items/qquickitem_p.h +++ b/src/quick/items/qquickitem_p.h @@ -503,6 +503,8 @@ public: QTransform windowToItemTransform() const; QTransform itemToWindowTransform() const; void itemToParentTransform(QTransform &) const; + QTransform globalToWindowTransform() const; + QTransform windowToGlobalTransform() const; static bool focusNextPrev(QQuickItem *item, bool forward); static QQuickItem *nextTabChildItem(const QQuickItem *item, int start); |