diff options
Diffstat (limited to 'src/quick/items/qquickitem.cpp')
-rw-r--r-- | src/quick/items/qquickitem.cpp | 284 |
1 files changed, 201 insertions, 83 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 7acb8b5ebf..8e53e8b029 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -1,31 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtQuick module of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL21$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -50,7 +56,7 @@ #include <QtGui/private/qguiapplication_p.h> #include <QtGui/qinputmethod.h> #include <QtCore/qcoreevent.h> -#include <QtCore/qnumeric.h> +#include <QtCore/private/qnumeric_p.h> #include <QtGui/qpa/qplatformtheme.h> #include <QtCore/qloggingcategory.h> @@ -65,6 +71,7 @@ #include <private/qv4engine_p.h> #include <private/qv4object_p.h> +#include <private/qv4qobjectwrapper_p.h> #include <private/qdebug_p.h> #ifndef QT_NO_CURSOR @@ -101,7 +108,7 @@ void debugFocusTree(QQuickItem *item, QQuickItem *scope = 0, int depth = 1) } } -static void QQuickItem_parentNotifier(QObject *o, qintptr, QQmlNotifier **n) +static void QQuickItem_parentNotifier(QObject *o, QQmlNotifier **n) { QQuickItemPrivate *d = QQuickItemPrivate::get(static_cast<QQuickItem *>(o)); *n = &d->parentNotifier; @@ -2095,6 +2102,9 @@ void QQuickItemPrivate::updateSubFocusItem(QQuickItem *scope, bool focus) \value ItemDevicePixelRatioHasChanged The device pixel ratio of the screen the item is on has changed. ItemChangedData::realValue contains the new device pixel ratio. + + \value ItemAntialiasingHasChanged The antialiasing has changed. The current + (boolean) value can be found in QQuickItem::antialiasing. */ /*! @@ -2350,10 +2360,11 @@ QQuickItem::~QQuickItem() // XXX todo - optimize while (!d->childItems.isEmpty()) - d->childItems.first()->setParentItem(0); + d->childItems.constFirst()->setParentItem(0); - for (int ii = 0; ii < d->changeListeners.count(); ++ii) { - QQuickAnchorsPrivate *anchor = d->changeListeners.at(ii).listener->anchorPrivate(); + const auto listeners = d->changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { + QQuickAnchorsPrivate *anchor = change.listener->anchorPrivate(); if (anchor) anchor->clearItem(this); } @@ -2362,14 +2373,13 @@ QQuickItem::~QQuickItem() update item anchors that depended on us unless they are our child (and will also be destroyed), or our sibling, and our parent is also being destroyed. */ - for (int ii = 0; ii < d->changeListeners.count(); ++ii) { - QQuickAnchorsPrivate *anchor = d->changeListeners.at(ii).listener->anchorPrivate(); + for (const QQuickItemPrivate::ChangeListener &change : listeners) { + QQuickAnchorsPrivate *anchor = change.listener->anchorPrivate(); if (anchor && anchor->item && anchor->item->parentItem() && anchor->item->parentItem() != this) anchor->update(); } - for (int ii = 0; ii < d->changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = d->changeListeners.at(ii); + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::Destroyed) change.listener->itemDestroyed(this); } @@ -2515,7 +2525,7 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo from = item->parentItem(); } else { if (!item->childItems().isEmpty()) - from = item->childItems().first(); + from = item->d_func()->childItems.constFirst(); else if (!isTabFence) from = item->parentItem(); } @@ -3086,6 +3096,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. @@ -3589,8 +3621,8 @@ QQuickAnchors *QQuickItemPrivate::anchors() const void QQuickItemPrivate::siblingOrderChanged() { Q_Q(QQuickItem); - for (int ii = 0; ii < changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = changeListeners.at(ii); + const auto listeners = changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::SiblingOrder) { change.listener->itemSiblingOrderChanged(q); } @@ -3698,8 +3730,8 @@ void QQuickItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeo bool widthChange = (newGeometry.width() != oldGeometry.width()); bool heightChange = (newGeometry.height() != oldGeometry.height()); - for (int ii = 0; ii < d->changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = d->changeListeners.at(ii); + const auto listeners = d->changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::Geometry) { if (change.gTypes == QQuickItemPrivate::GeometryChange) { change.listener->itemGeometryChanged(this, newGeometry, oldGeometry); @@ -3835,7 +3867,7 @@ void QQuickItemPrivate::removeItemChangeListener(QQuickItemChangeListener *liste void QQuickItemPrivate::updateOrAddGeometryChangeListener(QQuickItemChangeListener *listener, GeometryChangeTypes types) { ChangeListener change(listener, types); - int index = changeListeners.find(change); + int index = changeListeners.indexOf(change); if (index > -1) changeListeners[index].gTypes = change.gTypes; //we may have different GeometryChangeTypes else @@ -3849,7 +3881,7 @@ void QQuickItemPrivate::updateOrRemoveGeometryChangeListener(QQuickItemChangeLis if (types == NoChange) { changeListeners.removeOne(change); } else { - int index = changeListeners.find(change); + int index = changeListeners.indexOf(change); if (index > -1) changeListeners[index].gTypes = change.gTypes; //we may have different GeometryChangeTypes } @@ -4139,6 +4171,7 @@ QVariant QQuickItem::inputMethodQuery(Qt::InputMethodQuery query) const v = (bool)(flags() & ItemAcceptsInputMethod); break; case Qt::ImHints: + case Qt::ImAnchorRectangle: case Qt::ImCursorRectangle: case Qt::ImFont: case Qt::ImCursorPosition: @@ -4154,6 +4187,23 @@ QVariant QQuickItem::inputMethodQuery(Qt::InputMethodQuery query) const if (d->extra.isAllocated() && d->extra->enterKeyAttached) v = d->extra->enterKeyAttached->type(); break; + case Qt::ImInputItemClipRectangle: + if (!(!window() ||!isVisible() || qFuzzyIsNull(opacity()))) { + QRectF rect = QRectF(0,0, width(), height()); + const QQuickItem *par = this; + while (QQuickItem *parpar = par->parentItem()) { + rect = parpar->mapRectFromItem(par, rect); + if (parpar->clip()) + rect = rect.intersected(parpar->clipRect()); + par = parpar; + } + rect = par->mapRectToScene(rect); + // once we have the rect in scene coordinates, clip to window + rect = rect.intersected(QRectF(QPoint(0,0), window()->size())); + // map it back to local coordinates + v = mapRectFromScene(rect); + } + break; default: break; } @@ -4165,43 +4215,43 @@ QVariant QQuickItem::inputMethodQuery(Qt::InputMethodQuery query) const QQuickAnchorLine QQuickItemPrivate::left() const { Q_Q(const QQuickItem); - return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchorLine::Left); + return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchors::LeftAnchor); } QQuickAnchorLine QQuickItemPrivate::right() const { Q_Q(const QQuickItem); - return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchorLine::Right); + return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchors::RightAnchor); } QQuickAnchorLine QQuickItemPrivate::horizontalCenter() const { Q_Q(const QQuickItem); - return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchorLine::HCenter); + return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchors::HCenterAnchor); } QQuickAnchorLine QQuickItemPrivate::top() const { Q_Q(const QQuickItem); - return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchorLine::Top); + return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchors::TopAnchor); } QQuickAnchorLine QQuickItemPrivate::bottom() const { Q_Q(const QQuickItem); - return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchorLine::Bottom); + return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchors::BottomAnchor); } QQuickAnchorLine QQuickItemPrivate::verticalCenter() const { Q_Q(const QQuickItem); - return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchorLine::VCenter); + return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchors::VCenterAnchor); } QQuickAnchorLine QQuickItemPrivate::baseline() const { Q_Q(const QQuickItem); - return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchorLine::Baseline); + return QQuickAnchorLine(const_cast<QQuickItem *>(q), QQuickAnchors::BaselineAnchor); } /*! @@ -4240,8 +4290,8 @@ void QQuickItem::setBaselineOffset(qreal offset) d->baselineOffset = offset; - for (int ii = 0; ii < d->changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = d->changeListeners.at(ii); + const auto listeners = d->changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::Geometry) { QQuickAnchorsPrivate *anchor = change.listener->anchorPrivate(); if (anchor) @@ -4568,9 +4618,9 @@ QQuickItem *QQuickItem::childAt(qreal x, qreal y) const // Map coordinates to the child element's coordinate space QPointF point = mapToItem(child, QPointF(x, y)); if (child->isVisible() && point.x() >= 0 - && child->width() >= point.x() + && child->width() > point.x() && point.y() >= 0 - && child->height() >= point.y()) + && child->height() > point.y()) return child; } return 0; @@ -5916,66 +5966,72 @@ void QQuickItemPrivate::itemChange(QQuickItem::ItemChange change, const QQuickIt { Q_Q(QQuickItem); switch (change) { - case QQuickItem::ItemChildAddedChange: + case QQuickItem::ItemChildAddedChange: { q->itemChange(change, data); - for (int ii = 0; ii < changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = changeListeners.at(ii); + const auto listeners = changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::Children) { change.listener->itemChildAdded(q, data.item); } } break; - case QQuickItem::ItemChildRemovedChange: + } + case QQuickItem::ItemChildRemovedChange: { q->itemChange(change, data); - for (int ii = 0; ii < changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = changeListeners.at(ii); + const auto listeners = changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::Children) { change.listener->itemChildRemoved(q, data.item); } } break; + } case QQuickItem::ItemSceneChange: q->itemChange(change, data); break; - case QQuickItem::ItemVisibleHasChanged: + case QQuickItem::ItemVisibleHasChanged: { q->itemChange(change, data); - for (int ii = 0; ii < changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = changeListeners.at(ii); + const auto listeners = changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::Visibility) { change.listener->itemVisibilityChanged(q); } } break; - case QQuickItem::ItemParentHasChanged: + } + case QQuickItem::ItemParentHasChanged: { q->itemChange(change, data); - for (int ii = 0; ii < changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = changeListeners.at(ii); + const auto listeners = changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::Parent) { change.listener->itemParentChanged(q, data.item); } } break; - case QQuickItem::ItemOpacityHasChanged: + } + case QQuickItem::ItemOpacityHasChanged: { q->itemChange(change, data); - for (int ii = 0; ii < changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = changeListeners.at(ii); + const auto listeners = changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::Opacity) { change.listener->itemOpacityChanged(q); } } break; + } case QQuickItem::ItemActiveFocusHasChanged: q->itemChange(change, data); break; - case QQuickItem::ItemRotationHasChanged: + case QQuickItem::ItemRotationHasChanged: { q->itemChange(change, data); - for (int ii = 0; ii < changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = changeListeners.at(ii); + const auto listeners = changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::Rotation) { change.listener->itemRotationChanged(q); } } break; + } case QQuickItem::ItemAntialiasingHasChanged: // fall through case QQuickItem::ItemDevicePixelRatioHasChanged: @@ -6248,8 +6304,8 @@ void QQuickItem::setX(qreal v) d->dirty(QQuickItemPrivate::Position); - geometryChanged(QRectF(x(), y(), width(), height()), - QRectF(oldx, y(), width(), height())); + geometryChanged(QRectF(d->x, d->y, d->width, d->height), + QRectF(oldx, d->y, d->width, d->height)); } void QQuickItem::setY(qreal v) @@ -6265,8 +6321,8 @@ void QQuickItem::setY(qreal v) d->dirty(QQuickItemPrivate::Position); - geometryChanged(QRectF(x(), y(), width(), height()), - QRectF(x(), oldy, width(), height())); + geometryChanged(QRectF(d->x, d->y, d->width, d->height), + QRectF(d->x, oldy, d->width, d->height)); } /*! @@ -6286,8 +6342,8 @@ void QQuickItem::setPosition(const QPointF &pos) d->dirty(QQuickItemPrivate::Position); - geometryChanged(QRectF(x(), y(), width(), height()), - QRectF(oldx, oldy, width(), height())); + geometryChanged(QRectF(d->x, d->y, d->width, d->height), + QRectF(oldx, oldy, d->width, d->height)); } /*! @@ -6304,7 +6360,7 @@ qreal QQuickItem::width() const void QQuickItem::setWidth(qreal w) { Q_D(QQuickItem); - if (qIsNaN(w)) + if (qt_is_nan(w)) return; d->widthValid = true; @@ -6316,8 +6372,8 @@ void QQuickItem::setWidth(qreal w) d->dirty(QQuickItemPrivate::Size); - geometryChanged(QRectF(x(), y(), width(), height()), - QRectF(x(), y(), oldWidth, height())); + geometryChanged(QRectF(d->x, d->y, d->width, d->height), + QRectF(d->x, d->y, oldWidth, d->height)); } void QQuickItem::resetWidth() @@ -6330,8 +6386,8 @@ void QQuickItem::resetWidth() void QQuickItemPrivate::implicitWidthChanged() { Q_Q(QQuickItem); - for (int ii = 0; ii < changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = changeListeners.at(ii); + const auto listeners = changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::ImplicitWidth) { change.listener->itemImplicitWidthChanged(q); } @@ -6438,8 +6494,8 @@ void QQuickItem::setImplicitWidth(qreal w) d->dirty(QQuickItemPrivate::Size); - geometryChanged(QRectF(x(), y(), width(), height()), - QRectF(x(), y(), oldWidth, height())); + geometryChanged(QRectF(d->x, d->y, d->width, d->height), + QRectF(d->x, d->y, oldWidth, d->height)); if (changed) d->implicitWidthChanged(); @@ -6468,7 +6524,7 @@ qreal QQuickItem::height() const void QQuickItem::setHeight(qreal h) { Q_D(QQuickItem); - if (qIsNaN(h)) + if (qt_is_nan(h)) return; d->heightValid = true; @@ -6480,8 +6536,8 @@ void QQuickItem::setHeight(qreal h) d->dirty(QQuickItemPrivate::Size); - geometryChanged(QRectF(x(), y(), width(), height()), - QRectF(x(), y(), width(), oldHeight)); + geometryChanged(QRectF(d->x, d->y, d->width, d->height), + QRectF(d->x, d->y, d->width, oldHeight)); } void QQuickItem::resetHeight() @@ -6494,8 +6550,8 @@ void QQuickItem::resetHeight() void QQuickItemPrivate::implicitHeightChanged() { Q_Q(QQuickItem); - for (int ii = 0; ii < changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = changeListeners.at(ii); + const auto listeners = changeListeners; + for (const QQuickItemPrivate::ChangeListener &change : listeners) { if (change.types & QQuickItemPrivate::ImplicitHeight) { change.listener->itemImplicitHeightChanged(q); } @@ -6532,8 +6588,8 @@ void QQuickItem::setImplicitHeight(qreal h) d->dirty(QQuickItemPrivate::Size); - geometryChanged(QRectF(x(), y(), width(), height()), - QRectF(x(), y(), width(), oldHeight)); + geometryChanged(QRectF(d->x, d->y, d->width, d->height), + QRectF(d->x, d->y, d->width, oldHeight)); if (changed) d->implicitHeightChanged(); @@ -6577,8 +6633,8 @@ void QQuickItem::setImplicitSize(qreal w, qreal h) d->dirty(QQuickItemPrivate::Size); - geometryChanged(QRectF(x(), y(), width(), height()), - QRectF(x(), y(), oldWidth, oldHeight)); + geometryChanged(QRectF(d->x, d->y, d->width, d->height), + QRectF(d->x, d->y, oldWidth, oldHeight)); if (!wDone && wChanged) d->implicitWidthChanged(); @@ -6614,8 +6670,8 @@ void QQuickItem::setSize(const QSizeF &size) d->dirty(QQuickItemPrivate::Size); - geometryChanged(QRectF(x(), y(), width(), height()), - QRectF(x(), y(), oldWidth, oldHeight)); + geometryChanged(QRectF(d->x, d->y, d->width, d->height), + QRectF(d->x, d->y, oldWidth, oldHeight)); } /*! @@ -6870,6 +6926,26 @@ QQuickItem *QQuickItem::scopedFocusItem() const } /*! + Returns \c true if this item is an ancestor of \a child (i.e., if this item + is \a child's parent, or one of \a child's parent's ancestors). + + \since 5.7 + + \sa parentItem() + */ +bool QQuickItem::isAncestorOf(const QQuickItem *child) const +{ + if (!child || child == this) + return false; + const QQuickItem *ancestor = child; + while ((ancestor = ancestor->parentItem())) { + if (ancestor == this) + return true; + } + return false; +} + +/*! Returns the mouse buttons accepted by this item. The default value is Qt::NoButton; that is, no mouse buttons are accepted. @@ -7297,6 +7373,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. @@ -7358,6 +7455,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. |