From adb0848513198db72c6066b9a97077c7083df9fe Mon Sep 17 00:00:00 2001 From: Adriano Rezende Date: Sun, 26 Feb 2012 17:26:53 +0100 Subject: [PATCH] Add contains method to QQuickItem public API This method can be overwritten in order to provide fine grained control over the mouse events handled by the item. Change-Id: I23cb61958d3ac0b2f5091c47fa9e0ed07dc5e5d0 Reviewed-by: Martin Jones --- examples/quick/maskedmousearea/images/cloud_1.png | Bin 0 -> 49524 bytes examples/quick/maskedmousearea/images/cloud_2.png | Bin 0 -> 32288 bytes examples/quick/maskedmousearea/images/moon.png | Bin 0 -> 13263 bytes examples/quick/maskedmousearea/main.cpp | 57 +++++++ examples/quick/maskedmousearea/maskedmousearea.cpp | 141 ++++++++++++++++ examples/quick/maskedmousearea/maskedmousearea.h | 98 +++++++++++ examples/quick/maskedmousearea/maskedmousearea.pro | 14 ++ examples/quick/maskedmousearea/maskedmousearea.qml | 135 +++++++++++++++ .../maskedmousearea/maskedmousearea.qmlproject | 16 ++ src/quick/items/qquickcanvas.cpp | 23 ++-- src/quick/items/qquickflickable.cpp | 6 +- src/quick/items/qquickitem.cpp | 22 +++- src/quick/items/qquickitem.h | 2 + src/quick/items/qquickmousearea.cpp | 16 +- src/quick/items/qquickmultipointtoucharea.cpp | 18 +-- src/quick/items/qquickpathview.cpp | 13 +- src/quick/items/qquickpincharea.cpp | 6 +- .../auto/quick/qquickitem2/data/hollowTestItem.qml | 38 +++++ tests/auto/quick/qquickitem2/tst_qquickitem.cpp | 171 ++++++++++++++++++++ 19 files changed, 730 insertions(+), 46 deletions(-) create mode 100644 examples/quick/maskedmousearea/images/cloud_1.png create mode 100644 examples/quick/maskedmousearea/images/cloud_2.png create mode 100644 examples/quick/maskedmousearea/images/moon.png create mode 100644 examples/quick/maskedmousearea/main.cpp create mode 100644 examples/quick/maskedmousearea/maskedmousearea.cpp create mode 100644 examples/quick/maskedmousearea/maskedmousearea.h create mode 100644 examples/quick/maskedmousearea/maskedmousearea.pro create mode 100644 examples/quick/maskedmousearea/maskedmousearea.qml create mode 100644 examples/quick/maskedmousearea/maskedmousearea.qmlproject create mode 100644 tests/auto/quick/qquickitem2/data/hollowTestItem.qml diff --git a/examples/quick/maskedmousearea/images/cloud_1.png b/examples/quick/maskedmousearea/images/cloud_1.png new file mode 100644 index 0000000000000000000000000000000000000000..87c54af253c8b294d4a750a9bd604a151750dcbf GIT binary patch literal 49524 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 N002ovPDHLkV1jFFj}`y` literal 0 HcmV?d00001 diff --git a/examples/quick/maskedmousearea/main.cpp b/examples/quick/maskedmousearea/main.cpp new file mode 100644 index 0000000..407497e --- /dev/null +++ b/examples/quick/maskedmousearea/main.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include "maskedmousearea.h" + + +int main(int argc, char* argv[]) +{ + QGuiApplication app(argc,argv); + QQuickView view; + + qmlRegisterType("Example", 1, 0, "MaskedMouseArea"); + + view.setSource(QUrl::fromLocalFile("maskedmousearea.qml")); + view.show(); + return app.exec(); +} diff --git a/examples/quick/maskedmousearea/maskedmousearea.cpp b/examples/quick/maskedmousearea/maskedmousearea.cpp new file mode 100644 index 0000000..3f872a6 --- /dev/null +++ b/examples/quick/maskedmousearea/maskedmousearea.cpp @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "maskedmousearea.h" + +#include +#include + + +MaskedMouseArea::MaskedMouseArea(QQuickItem *parent) + : QQuickItem(parent), + m_pressed(false), + m_alphaThreshold(0.0), + m_containsMouse(false) +{ + setAcceptHoverEvents(true); + setAcceptedMouseButtons(Qt::LeftButton); +} + +void MaskedMouseArea::setPressed(bool pressed) +{ + if (m_pressed != pressed) { + m_pressed = pressed; + emit pressedChanged(); + } +} + +void MaskedMouseArea::setContainsMouse(bool containsMouse) +{ + if (m_containsMouse != containsMouse) { + m_containsMouse = containsMouse; + emit containsMouseChanged(); + } +} + +void MaskedMouseArea::setMaskSource(const QUrl &source) +{ + if (m_maskSource != source) { + m_maskSource = source; + m_maskImage = QImage(source.toLocalFile()); + emit maskSourceChanged(); + } +} + +void MaskedMouseArea::setAlphaThreshold(qreal threshold) +{ + if (m_alphaThreshold != threshold) { + m_alphaThreshold = threshold; + emit alphaThresholdChanged(); + } +} + +bool MaskedMouseArea::contains(const QPointF &point) const +{ + if (!QQuickItem::contains(point) || m_maskImage.isNull()) + return false; + + QPoint p = point.toPoint(); + + if (p.x() < 0 || p.x() >= m_maskImage.width() || + p.y() < 0 || p.y() >= m_maskImage.height()) + return false; + + qreal r = qBound(0, m_alphaThreshold * 255, 255); + return qAlpha(m_maskImage.pixel(p)) > r; +} + +void MaskedMouseArea::mousePressEvent(QMouseEvent *event) +{ + setPressed(true); + m_pressPoint = event->pos(); + emit pressed(); +} + +void MaskedMouseArea::mouseReleaseEvent(QMouseEvent *event) +{ + setPressed(false); + emit released(); + + const int threshold = qApp->styleHints()->startDragDistance(); + const bool isClick = (threshold >= qAbs(event->x() - m_pressPoint.x()) && + threshold >= qAbs(event->y() - m_pressPoint.y())); + + if (isClick) + emit clicked(); +} + +void MaskedMouseArea::mouseUngrabEvent() +{ + setPressed(false); + emit canceled(); +} + +void MaskedMouseArea::hoverEnterEvent(QHoverEvent *event) +{ + Q_UNUSED(event); + setContainsMouse(true); +} + +void MaskedMouseArea::hoverLeaveEvent(QHoverEvent *event) +{ + Q_UNUSED(event); + setContainsMouse(false); +} diff --git a/examples/quick/maskedmousearea/maskedmousearea.h b/examples/quick/maskedmousearea/maskedmousearea.h new file mode 100644 index 0000000..045d02d --- /dev/null +++ b/examples/quick/maskedmousearea/maskedmousearea.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MASKEDMOUSEAREA_H +#define MASKEDMOUSEAREA_H + +#include +#include + + +class MaskedMouseArea : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(bool pressed READ isPressed NOTIFY pressedChanged) + Q_PROPERTY(bool containsMouse READ containsMouse NOTIFY containsMouseChanged) + Q_PROPERTY(QUrl maskSource READ maskSource WRITE setMaskSource NOTIFY maskSourceChanged) + Q_PROPERTY(qreal alphaThreshold READ alphaThreshold WRITE setAlphaThreshold NOTIFY alphaThresholdChanged) + +public: + MaskedMouseArea(QQuickItem *parent = 0); + + bool contains(const QPointF &point) const; + + bool isPressed() const { return m_pressed; } + bool containsMouse() const { return m_containsMouse; } + + QUrl maskSource() const { return m_maskSource; } + void setMaskSource(const QUrl &source); + + qreal alphaThreshold() const { return m_alphaThreshold; } + void setAlphaThreshold(qreal threshold); + +signals: + void pressed(); + void released(); + void clicked(); + void canceled(); + void pressedChanged(); + void maskSourceChanged(); + void containsMouseChanged(); + void alphaThresholdChanged(); + +protected: + void setPressed(bool pressed); + void setContainsMouse(bool containsMouse); + void mousePressEvent(QMouseEvent *event); + void mouseReleaseEvent(QMouseEvent *event); + void hoverEnterEvent(QHoverEvent *event); + void hoverLeaveEvent(QHoverEvent *event); + void mouseUngrabEvent(); + +private: + bool m_pressed; + QUrl m_maskSource; + QImage m_maskImage; + QPointF m_pressPoint; + qreal m_alphaThreshold; + bool m_containsMouse; +}; + +#endif diff --git a/examples/quick/maskedmousearea/maskedmousearea.pro b/examples/quick/maskedmousearea/maskedmousearea.pro new file mode 100644 index 0000000..53e14aa --- /dev/null +++ b/examples/quick/maskedmousearea/maskedmousearea.pro @@ -0,0 +1,14 @@ +TEMPLATE = app + +QT += quick qml + +HEADERS += maskedmousearea.h + +SOURCES += main.cpp \ + maskedmousearea.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/qtquick/maskedmousearea +qml.files = maskedmousearea.qml images +qml.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/qtquick/maskedmousearea +INSTALLS += target qml + diff --git a/examples/quick/maskedmousearea/maskedmousearea.qml b/examples/quick/maskedmousearea/maskedmousearea.qml new file mode 100644 index 0000000..82d351b --- /dev/null +++ b/examples/quick/maskedmousearea/maskedmousearea.qml @@ -0,0 +1,135 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import Example 1.0 + +Rectangle { + height: 480 + width: 320 + color: "black" + + Text { + text: qsTr("CLICK AND HOVER") + opacity: 0.6 + color: "white" + font.pixelSize: 20 + anchors.top: parent.top + anchors.horizontalCenter: parent.horizontalCenter + anchors.topMargin: 50 + } + + Image { + id: moon + smooth: true + anchors.centerIn: parent + scale: moonArea.pressed ? 1.1 : 1.0 + opacity: moonArea.containsMouse ? 1.0 : 0.7 + source: Qt.resolvedUrl("images/moon.png") + + MaskedMouseArea { + id: moonArea + anchors.fill: parent + alphaThreshold: 0.4 + maskSource: moon.source + } + + Behavior on opacity { + NumberAnimation { duration: 200 } + } + Behavior on scale { + NumberAnimation { duration: 100 } + } + } + + Image { + id: rightCloud + anchors { + centerIn: moon + verticalCenterOffset: 30 + horizontalCenterOffset: 80 + } + smooth: true + scale: rightCloudArea.pressed ? 1.1 : 1.0 + opacity: rightCloudArea.containsMouse ? 1.0 : 0.7 + source: Qt.resolvedUrl("images/cloud_2.png") + + MaskedMouseArea { + id: rightCloudArea + anchors.fill: parent + alphaThreshold: 0.4 + maskSource: rightCloud.source + } + + Behavior on opacity { + NumberAnimation { duration: 200 } + } + Behavior on scale { + NumberAnimation { duration: 100 } + } + } + + Image { + id: leftCloud + anchors { + centerIn: moon + verticalCenterOffset: 40 + horizontalCenterOffset: -80 + } + smooth: true + scale: leftCloudArea.pressed ? 1.1 : 1.0 + opacity: leftCloudArea.containsMouse ? 1.0 : 0.7 + source: Qt.resolvedUrl("images/cloud_1.png") + + MaskedMouseArea { + id: leftCloudArea + anchors.fill: parent + alphaThreshold: 0.4 + maskSource: leftCloud.source + } + + Behavior on opacity { + NumberAnimation { duration: 200 } + } + Behavior on scale { + NumberAnimation { duration: 100 } + } + } +} diff --git a/examples/quick/maskedmousearea/maskedmousearea.qmlproject b/examples/quick/maskedmousearea/maskedmousearea.qmlproject new file mode 100644 index 0000000..709c198 --- /dev/null +++ b/examples/quick/maskedmousearea/maskedmousearea.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.1 + +Project { + mainFile: "maskedmousearea.qml" + + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } +} diff --git a/src/quick/items/qquickcanvas.cpp b/src/quick/items/qquickcanvas.cpp index a288531..9110233 100644 --- a/src/quick/items/qquickcanvas.cpp +++ b/src/quick/items/qquickcanvas.cpp @@ -1039,7 +1039,7 @@ bool QQuickCanvasPrivate::deliverInitialMousePressEvent(QQuickItem *item, QMouse if (itemPrivate->flags & QQuickItem::ItemClipsChildrenToShape) { QPointF p = item->mapFromScene(event->windowPos()); - if (!QRectF(0, 0, item->width(), item->height()).contains(p)) + if (!item->contains(p)) return false; } @@ -1054,7 +1054,7 @@ bool QQuickCanvasPrivate::deliverInitialMousePressEvent(QQuickItem *item, QMouse if (itemPrivate->acceptedMouseButtons() & event->button()) { QPointF p = item->mapFromScene(event->windowPos()); - if (QRectF(0, 0, item->width(), item->height()).contains(p)) { + if (item->contains(p)) { QMouseEvent me(event->type(), p, event->windowPos(), event->screenPos(), event->button(), event->buttons(), event->modifiers()); me.accept(); @@ -1218,7 +1218,7 @@ bool QQuickCanvasPrivate::deliverHoverEvent(QQuickItem *item, const QPointF &sce if (itemPrivate->flags & QQuickItem::ItemClipsChildrenToShape) { QPointF p = item->mapFromScene(scenePos); - if (!QRectF(0, 0, item->width(), item->height()).contains(p)) + if (!item->contains(p)) return false; } @@ -1233,7 +1233,7 @@ bool QQuickCanvasPrivate::deliverHoverEvent(QQuickItem *item, const QPointF &sce if (itemPrivate->hoverEnabled) { QPointF p = item->mapFromScene(scenePos); - if (QRectF(0, 0, item->width(), item->height()).contains(p)) { + if (item->contains(p)) { if (!hoverItems.isEmpty() && hoverItems[0] == item) { //move accepted = sendHoverEvent(QEvent::HoverMove, item, scenePos, lastScenePos, modifiers, accepted); @@ -1286,7 +1286,7 @@ bool QQuickCanvasPrivate::deliverWheelEvent(QQuickItem *item, QWheelEvent *event if (itemPrivate->flags & QQuickItem::ItemClipsChildrenToShape) { QPointF p = item->mapFromScene(event->posF()); - if (!QRectF(0, 0, item->width(), item->height()).contains(p)) + if (!item->contains(p)) return false; } @@ -1300,7 +1300,8 @@ bool QQuickCanvasPrivate::deliverWheelEvent(QQuickItem *item, QWheelEvent *event } QPointF p = item->mapFromScene(event->posF()); - if (QRectF(0, 0, item->width(), item->height()).contains(p)) { + + if (item->contains(p)) { QWheelEvent wheel(p, p, event->pixelDelta(), event->angleDelta(), event->delta(), event->orientation(), event->buttons(), event->modifiers()); wheel.accept(); @@ -1422,10 +1423,9 @@ bool QQuickCanvasPrivate::deliverTouchPoints(QQuickItem *item, QTouchEvent *even return false; if (itemPrivate->flags & QQuickItem::ItemClipsChildrenToShape) { - QRectF bounds(0, 0, item->width(), item->height()); for (int i=0; imapFromScene(newPoints[i].scenePos()); - if (!bounds.contains(p)) + if (!item->contains(p)) return false; } } @@ -1441,12 +1441,11 @@ bool QQuickCanvasPrivate::deliverTouchPoints(QQuickItem *item, QTouchEvent *even QList matchingPoints; if (newPoints.count() > 0 && acceptedNewPoints->count() < newPoints.count()) { - QRectF bounds(0, 0, item->width(), item->height()); for (int i=0; icontains(newPoints[i].id())) continue; QPointF p = item->mapFromScene(newPoints[i].scenePos()); - if (bounds.contains(p)) + if (item->contains(p)) matchingPoints << newPoints[i]; } } @@ -1537,7 +1536,7 @@ void QQuickCanvasPrivate::deliverDragEvent(QQuickDragGrabber *grabber, QEvent *e moveEvent->setAccepted(true); for (++grabItem; grabItem != grabber->end();) { QPointF p = (**grabItem)->mapFromScene(moveEvent->pos()); - if (QRectF(0, 0, (**grabItem)->width(), (**grabItem)->height()).contains(p)) { + if ((**grabItem)->contains(p)) { QDragMoveEvent translatedEvent( p.toPoint(), moveEvent->possibleActions(), @@ -1582,7 +1581,7 @@ bool QQuickCanvasPrivate::deliverDragEvent(QQuickDragGrabber *grabber, QQuickIte return false; QPointF p = item->mapFromScene(event->pos()); - if (QRectF(0, 0, item->width(), item->height()).contains(p)) { + if (item->contains(p)) { if (event->type() == QEvent::DragMove || itemPrivate->flags & QQuickItem::ItemAcceptsDrops) { QDragMoveEvent translatedEvent( p.toPoint(), diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp index 75c9919..76d3698 100644 --- a/src/quick/items/qquickflickable.cpp +++ b/src/quick/items/qquickflickable.cpp @@ -1772,14 +1772,14 @@ void QQuickFlickable::mouseUngrabEvent() bool QQuickFlickable::sendMouseEvent(QMouseEvent *event) { Q_D(QQuickFlickable); - QRectF myRect = mapRectToScene(QRectF(0, 0, width(), height())); + QPointF localPos = mapFromScene(event->windowPos()); QQuickCanvas *c = canvas(); QQuickItem *grabber = c ? c->mouseGrabberItem() : 0; bool disabledItem = grabber && !grabber->isEnabled(); bool stealThisEvent = d->stealMouse; - if ((stealThisEvent || myRect.contains(event->windowPos())) && (!grabber || !grabber->keepMouseGrab() || disabledItem)) { - QQuickMouseEventEx mouseEvent(event->type(), mapFromScene(event->windowPos()), + if ((stealThisEvent || contains(localPos)) && (!grabber || !grabber->keepMouseGrab() || disabledItem)) { + QQuickMouseEventEx mouseEvent(event->type(), localPos, event->windowPos(), event->screenPos(), event->button(), event->buttons(), event->modifiers()); QQuickMouseEventEx *eventEx = QQuickMouseEventEx::extended(event); diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index ffaec54..628e19d 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -4886,9 +4886,7 @@ bool QQuickItem::isUnderMouse() const return false; QPointF cursorPos = QGuiApplicationPrivate::lastCursorPosition; - if (QRectF(0, 0, width(), height()).contains(mapFromScene(cursorPos))) // ### refactor: d->canvas->mapFromGlobal(cursorPos)))) - return true; - return false; + return contains(mapFromScene(cursorPos)); // ### refactor: d->canvas->mapFromGlobal(cursorPos)))) } bool QQuickItem::acceptHoverEvents() const @@ -5056,6 +5054,24 @@ void QQuickItem::setKeepTouchGrab(bool keep) } /*! + Returns true if this item contains \a point, which is in local coordinates; + returns false otherwise. + + This function can be overwritten in order to handle point collisions in items + with custom shapes. The default implementation checks if the point is inside + the item's bounding rect. + + Note that it's normally used to check if the item is under the mouse cursor, + and for that reason, the implementation of this function should be as light-weight + as possible. +*/ +bool QQuickItem::contains(const QPointF &point) const +{ + Q_D(const QQuickItem); + return QRectF(0, 0, d->width, d->height).contains(point); +} + +/*! \qmlmethod object QtQuick2::Item::mapFromItem(Item item, real x, real y) Maps the point (\a x, \a y), which is in \a item's coordinate system, to diff --git a/src/quick/items/qquickitem.h b/src/quick/items/qquickitem.h index 16dee80..0d74cc0 100644 --- a/src/quick/items/qquickitem.h +++ b/src/quick/items/qquickitem.h @@ -292,6 +292,8 @@ public: bool keepTouchGrab() const; void setKeepTouchGrab(bool); + Q_INVOKABLE virtual bool contains(const QPointF &point) const; + QTransform itemTransform(QQuickItem *, bool *) const; QPointF mapToItem(const QQuickItem *item, const QPointF &point) const; QPointF mapToScene(const QPointF &point) const; diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp index b855512..956ca09 100644 --- a/src/quick/items/qquickmousearea.cpp +++ b/src/quick/items/qquickmousearea.cpp @@ -263,7 +263,7 @@ bool QQuickMouseAreaPrivate::propagateHelper(QQuickMouseEvent *ev, QQuickItem *i if (itemPrivate->flags & QQuickItem::ItemClipsChildrenToShape) { QPointF p = item->mapFromScene(sp); - if (!QRectF(0, 0, item->width(), item->height()).contains(p)) + if (!item->contains(p)) return false; } @@ -293,7 +293,7 @@ bool QQuickMouseAreaPrivate::propagateHelper(QQuickMouseEvent *ev, QQuickItem *i break; } QPointF p = item->mapFromScene(sp); - if (QRectF(0, 0, item->width(), item->height()).contains(p)) { + if (item->contains(p)) { ev->setX(p.x()); ev->setY(p.y()); ev->setAccepted(true);//It is connected, they have to explicitly ignore to let it slide @@ -725,10 +725,10 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event) // ### we should skip this if these signals aren't used // ### can GV handle this for us? - bool contains = boundingRect().contains(d->lastPos); - if (d->hovered && !contains) + const bool isInside = contains(d->lastPos); + if (d->hovered && !isInside) setHovered(false); - else if (!d->hovered && contains) + else if (!d->hovered && isInside) setHovered(true); if (d->drag && d->drag->target()) { @@ -921,13 +921,13 @@ void QQuickMouseArea::mouseUngrabEvent() bool QQuickMouseArea::sendMouseEvent(QMouseEvent *event) { Q_D(QQuickMouseArea); - QRectF myRect = mapRectToScene(QRectF(0, 0, width(), height())); + QPointF localPos = mapFromScene(event->windowPos()); QQuickCanvas *c = canvas(); QQuickItem *grabber = c ? c->mouseGrabberItem() : 0; bool stealThisEvent = d->stealMouse; - if ((stealThisEvent || myRect.contains(event->windowPos())) && (!grabber || !grabber->keepMouseGrab())) { - QMouseEvent mouseEvent(event->type(), mapFromScene(event->windowPos()), event->windowPos(), event->screenPos(), + if ((stealThisEvent || contains(localPos)) && (!grabber || !grabber->keepMouseGrab())) { + QMouseEvent mouseEvent(event->type(), localPos, event->windowPos(), event->screenPos(), event->button(), event->buttons(), event->modifiers()); mouseEvent.setAccepted(false); diff --git a/src/quick/items/qquickmultipointtoucharea.cpp b/src/quick/items/qquickmultipointtoucharea.cpp index 2ba7b80..df5edfb 100644 --- a/src/quick/items/qquickmultipointtoucharea.cpp +++ b/src/quick/items/qquickmultipointtoucharea.cpp @@ -644,13 +644,13 @@ void QQuickMultiPointTouchArea::touchUngrabEvent() bool QQuickMultiPointTouchArea::sendMouseEvent(QMouseEvent *event) { - QRectF myRect = mapRectToScene(QRectF(0, 0, width(), height())); + QPointF localPos = mapFromScene(event->windowPos()); QQuickCanvas *c = canvas(); QQuickItem *grabber = c ? c->mouseGrabberItem() : 0; bool stealThisEvent = _stealMouse; - if ((stealThisEvent || myRect.contains(event->windowPos())) && (!grabber || !grabber->keepMouseGrab())) { - QMouseEvent mouseEvent(event->type(), mapFromScene(event->windowPos()), event->windowPos(), event->screenPos(), + if ((stealThisEvent || contains(localPos)) && (!grabber || !grabber->keepMouseGrab())) { + QMouseEvent mouseEvent(event->type(), localPos, event->windowPos(), event->screenPos(), event->button(), event->buttons(), event->modifiers()); mouseEvent.setAccepted(false); @@ -724,25 +724,23 @@ bool QQuickMultiPointTouchArea::shouldFilter(QEvent *event) QQuickItem *grabber = c ? c->mouseGrabberItem() : 0; bool disabledItem = grabber && !grabber->isEnabled(); bool stealThisEvent = _stealMouse; - bool contains = false; + bool containsPoint = false; if (!stealThisEvent) { switch (event->type()) { case QEvent::MouseButtonPress: case QEvent::MouseMove: case QEvent::MouseButtonRelease: { QMouseEvent *me = static_cast(event); - QRectF myRect = mapRectToScene(QRectF(0, 0, width(), height())); - contains = myRect.contains(me->windowPos()); + containsPoint = contains(mapFromScene(me->windowPos())); } break; case QEvent::TouchBegin: case QEvent::TouchUpdate: case QEvent::TouchEnd: { QTouchEvent *te = static_cast(event); - QRectF myRect = mapRectToScene(QRectF(0, 0, width(), height())); foreach (const QTouchEvent::TouchPoint &point, te->touchPoints()) { - if (myRect.contains(point.scenePos())) { - contains = true; + if (contains(mapFromScene(point.scenePos()))) { + containsPoint = true; break; } } @@ -752,7 +750,7 @@ bool QQuickMultiPointTouchArea::shouldFilter(QEvent *event) break; } } - if ((stealThisEvent || contains) && (!grabber || !grabber->keepMouseGrab() || disabledItem)) { + if ((stealThisEvent || containsPoint) && (!grabber || !grabber->keepMouseGrab() || disabledItem)) { return true; } ungrab(); diff --git a/src/quick/items/qquickpathview.cpp b/src/quick/items/qquickpathview.cpp index 836943c..ba5b237 100644 --- a/src/quick/items/qquickpathview.cpp +++ b/src/quick/items/qquickpathview.cpp @@ -1300,12 +1300,10 @@ void QQuickPathViewPrivate::handleMousePressEvent(QMouseEvent *event) if (!interactive || !items.count() || !model || !modelCount) return; velocityBuffer.clear(); - QPointF scenePoint = q->mapToScene(event->localPos()); int idx = 0; for (; idx < items.count(); ++idx) { - QRectF rect = items.at(idx)->boundingRect(); - rect = items.at(idx)->mapRectToScene(rect); - if (rect.contains(scenePoint)) + QQuickItem *item = items.at(idx); + if (item->contains(item->mapFromScene(event->windowPos()))) break; } if (idx == items.count() && dragMargin == 0.) // didn't click on an item @@ -1470,12 +1468,13 @@ void QQuickPathViewPrivate::handleMouseReleaseEvent(QMouseEvent *) bool QQuickPathView::sendMouseEvent(QMouseEvent *event) { Q_D(QQuickPathView); - QRectF myRect = mapRectToScene(QRectF(0, 0, width(), height())); + QPointF localPos = mapFromScene(event->windowPos()); + QQuickCanvas *c = canvas(); QQuickItem *grabber = c ? c->mouseGrabberItem() : 0; bool stealThisEvent = d->stealMouse; - if ((stealThisEvent || myRect.contains(event->windowPos())) && (!grabber || !grabber->keepMouseGrab())) { - QMouseEvent mouseEvent(event->type(), mapFromScene(event->windowPos()), event->windowPos(), event->screenPos(), + if ((stealThisEvent || contains(localPos)) && (!grabber || !grabber->keepMouseGrab())) { + QMouseEvent mouseEvent(event->type(), localPos, event->windowPos(), event->screenPos(), event->button(), event->buttons(), event->modifiers()); mouseEvent.setAccepted(false); diff --git a/src/quick/items/qquickpincharea.cpp b/src/quick/items/qquickpincharea.cpp index 6f79385..eba9d09 100644 --- a/src/quick/items/qquickpincharea.cpp +++ b/src/quick/items/qquickpincharea.cpp @@ -503,13 +503,13 @@ void QQuickPinchArea::mouseUngrabEvent() bool QQuickPinchArea::sendMouseEvent(QMouseEvent *event) { Q_D(QQuickPinchArea); - QRectF myRect = mapRectToScene(QRectF(0, 0, width(), height())); + QPointF localPos = mapFromScene(event->windowPos()); QQuickCanvas *c = canvas(); QQuickItem *grabber = c ? c->mouseGrabberItem() : 0; bool stealThisEvent = d->stealMouse; - if ((stealThisEvent || myRect.contains(event->windowPos())) && (!grabber || !grabber->keepMouseGrab())) { - QMouseEvent mouseEvent(event->type(), mapFromScene(event->windowPos()), event->windowPos(), event->screenPos(), + if ((stealThisEvent || contains(localPos)) && (!grabber || !grabber->keepMouseGrab())) { + QMouseEvent mouseEvent(event->type(), localPos, event->windowPos(), event->screenPos(), event->button(), event->buttons(), event->modifiers()); mouseEvent.setAccepted(false); diff --git a/tests/auto/quick/qquickitem2/data/hollowTestItem.qml b/tests/auto/quick/qquickitem2/data/hollowTestItem.qml new file mode 100644 index 0000000..d07d89c --- /dev/null +++ b/tests/auto/quick/qquickitem2/data/hollowTestItem.qml @@ -0,0 +1,38 @@ +import QtQuick 2.0 +import Test 1.0 + +Rectangle { + width: 400 + height: 400 + + Rectangle { + x: 100 + y: 100 + width: 200 + height: 200 + rotation: 45 + + Rectangle { + scale: 0.5 + color: "black" + anchors.fill: parent + radius: hollowItem.circle ? 100 : 0 + + Rectangle { + color: "white" + anchors.centerIn: parent + width: hollowItem.holeRadius * 2 + height: hollowItem.holeRadius * 2 + radius: hollowItem.circle ? 100 : 0 + } + + HollowTestItem { + id: hollowItem + anchors.fill: parent + objectName: "hollowItem" + holeRadius: 50 + circle: circleShapeTest + } + } + } +} diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp index c2390c4..34f5187 100644 --- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp @@ -93,6 +93,9 @@ private slots: void qtbug_16871(); void visibleChildren(); void parentLoop(); + void contains_data(); + void contains(); + private: QQmlEngine engine; }; @@ -178,6 +181,69 @@ public: QML_DECLARE_TYPE(KeyTestItem); +class HollowTestItem : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(bool circle READ isCircle WRITE setCircle) + Q_PROPERTY(qreal holeRadius READ holeRadius WRITE setHoleRadius) + +public: + HollowTestItem(QQuickItem *parent = 0) + : QQuickItem(parent), + m_isPressed(false), + m_isHovered(false), + m_isCircle(false), + m_holeRadius(50) + { + setAcceptHoverEvents(true); + setAcceptedMouseButtons(Qt::LeftButton); + } + + bool isPressed() const { return m_isPressed; } + bool isHovered() const { return m_isHovered; } + + bool isCircle() const { return m_isCircle; } + void setCircle(bool circle) { m_isCircle = circle; } + + qreal holeRadius() const { return m_holeRadius; } + void setHoleRadius(qreal radius) { m_holeRadius = radius; } + + bool contains(const QPointF &point) const { + const qreal w = width(); + const qreal h = height(); + const qreal r = m_holeRadius; + + // check boundaries + if (!QRectF(0, 0, w, h).contains(point)) + return false; + + // square shape + if (!m_isCircle) + return !QRectF(w / 2 - r, h / 2 - r, r * 2, r * 2).contains(point); + + // circle shape + const qreal dx = point.x() - (w / 2); + const qreal dy = point.y() - (h / 2); + const qreal dd = (dx * dx) + (dy * dy); + const qreal outerRadius = qMin(w / 2, h / 2); + return dd > (r * r) && dd <= outerRadius * outerRadius; + } + +protected: + void hoverEnterEvent(QHoverEvent *) { m_isHovered = true; } + void hoverLeaveEvent(QHoverEvent *) { m_isHovered = false; } + void mousePressEvent(QMouseEvent *) { m_isPressed = true; } + void mouseReleaseEvent(QMouseEvent *) { m_isPressed = false; } + +private: + bool m_isPressed; + bool m_isHovered; + bool m_isCircle; + qreal m_holeRadius; +}; + +QML_DECLARE_TYPE(HollowTestItem); + tst_QQuickItem::tst_QQuickItem() { @@ -187,6 +253,7 @@ void tst_QQuickItem::initTestCase() { QQmlDataTest::initTestCase(); qmlRegisterType("Test",1,0,"KeyTestItem"); + qmlRegisterType("Test", 1, 0, "HollowTestItem"); } void tst_QQuickItem::cleanup() @@ -1375,6 +1442,110 @@ void tst_QQuickItem::parentLoop() delete canvas; } +void tst_QQuickItem::contains_data() +{ + QTest::addColumn("circleTest"); + QTest::addColumn("insideTarget"); + QTest::addColumn >("points"); + + QList points; + + points << QPoint(176, 176) + << QPoint(176, 226) + << QPoint(226, 176) + << QPoint(226, 226) + << QPoint(150, 200) + << QPoint(200, 150) + << QPoint(200, 250) + << QPoint(250, 200); + QTest::newRow("hollow square: testing points inside") << false << true << points; + + points.clear(); + points << QPoint(162, 162) + << QPoint(162, 242) + << QPoint(242, 162) + << QPoint(242, 242) + << QPoint(200, 200) + << QPoint(175, 200) + << QPoint(200, 175) + << QPoint(200, 228) + << QPoint(228, 200) + << QPoint(200, 122) + << QPoint(122, 200) + << QPoint(200, 280) + << QPoint(280, 200); + QTest::newRow("hollow square: testing points outside") << false << false << points; + + points.clear(); + points << QPoint(174, 174) + << QPoint(174, 225) + << QPoint(225, 174) + << QPoint(225, 225) + << QPoint(165, 200) + << QPoint(200, 165) + << QPoint(200, 235) + << QPoint(235, 200); + QTest::newRow("hollow circle: testing points inside") << true << true << points; + + points.clear(); + points << QPoint(160, 160) + << QPoint(160, 240) + << QPoint(240, 160) + << QPoint(240, 240) + << QPoint(200, 200) + << QPoint(185, 185) + << QPoint(185, 216) + << QPoint(216, 185) + << QPoint(216, 216) + << QPoint(145, 200) + << QPoint(200, 145) + << QPoint(255, 200) + << QPoint(200, 255); + QTest::newRow("hollow circle: testing points outside") << true << false << points; +} + +void tst_QQuickItem::contains() +{ + QFETCH(bool, circleTest); + QFETCH(bool, insideTarget); + QFETCH(QList, points); + + QQuickView *canvas = new QQuickView(0); + canvas->rootContext()->setContextProperty("circleShapeTest", circleTest); + canvas->setBaseSize(QSize(400, 400)); + canvas->setSource(testFileUrl("hollowTestItem.qml")); + canvas->show(); + canvas->requestActivateWindow(); + QTest::qWaitForWindowShown(canvas); + QTRY_VERIFY(QGuiApplication::focusWindow() == canvas); + + QQuickItem *root = qobject_cast(canvas->rootObject()); + QVERIFY(root); + + HollowTestItem *hollowItem = root->findChild("hollowItem"); + QVERIFY(hollowItem); + + foreach (const QPoint &point, points) { + // check mouse hover + QTest::mouseMove(canvas, point); + QTest::qWait(10); + QCOMPARE(hollowItem->isHovered(), insideTarget); + + // check mouse press + QTest::mousePress(canvas, Qt::LeftButton, 0, point); + QTest::qWait(10); + QCOMPARE(hollowItem->isPressed(), insideTarget); + + // check mouse release + QTest::mouseRelease(canvas, Qt::LeftButton, 0, point); + QTest::qWait(10); + QCOMPARE(hollowItem->isPressed(), false); + } + + delete canvas; +} + + QTEST_MAIN(tst_QQuickItem) #include "tst_qquickitem.moc" -- 1.7.2.5