From: Shawn Rutledge Date: Tue, 5 Feb 2013 17:11:34 +0000 (+0100) Subject: QQuickItem::childAt(x, y) takes child transformations into account X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=536c9481170c7cd84e5e78edf99ebc943d439b1a;p=konrad%2Fqtdeclarative.git QQuickItem::childAt(x, y) takes child transformations into account Task-number: QTBUG-28706 Change-Id: Ib1738eac1319361398b1898db341d6e4be0fe5fd Reviewed-by: Shawn Rutledge --- diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index e87f870..26af695 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -3808,14 +3808,15 @@ void QQuickItem::forceActiveFocus() */ QQuickItem *QQuickItem::childAt(qreal x, qreal y) const { - // XXX todo - should this include transform etc.? const QList children = childItems(); for (int i = children.count()-1; i >= 0; --i) { QQuickItem *child = children.at(i); - if (child->isVisible() && child->x() <= x - && child->x() + child->width() >= x - && child->y() <= y - && child->y() + child->height() >= y) + // 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() + && point.y() >= 0 + && child->height() >= point.y()) return child; } return 0;