From 2c21a3a61f5e6477e637d25d822643db18c67873 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Thu, 16 Feb 2012 13:45:40 +1000 Subject: Provide visual debugging for MouseArea and TouchArea Display MouseAreas and TouchAreas as semi transparent rectangles when the environment variable QML_VISUAL_TOUCH_DEBUGGING is set. Task-number: QTBUG-24283 Change-Id: Iec8482a79ed1d4b802c29a5f7104af4e0a6eab7d Reviewed-by: Aaron Kennedy --- src/quick/items/qquickmousearea.cpp | 23 +++++++++++++++++++++++ src/quick/items/qquickmousearea_p.h | 1 + src/quick/items/qquickmultipointtoucharea.cpp | 23 +++++++++++++++++++++++ src/quick/items/qquickmultipointtoucharea_p.h | 1 + 4 files changed, 48 insertions(+) diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp index cf6045e45e..b870443bc9 100644 --- a/src/quick/items/qquickmousearea.cpp +++ b/src/quick/items/qquickmousearea.cpp @@ -52,6 +52,9 @@ #include QT_BEGIN_NAMESPACE + +DEFINE_BOOL_CONFIG_OPTION(qmlVisualTouchDebugging, QML_VISUAL_TOUCH_DEBUGGING) + static const int PressAndHoldDelay = 800; QQuickDrag::QQuickDrag(QObject *parent) @@ -198,6 +201,9 @@ void QQuickMouseAreaPrivate::init() Q_Q(QQuickMouseArea); q->setAcceptedMouseButtons(Qt::LeftButton); q->setFiltersChildMouseEvents(true); + if (qmlVisualTouchDebugging()) { + q->setFlag(QQuickItem::ItemHasContents); + } } void QQuickMouseAreaPrivate::saveEvent(QMouseEvent *event) @@ -1165,4 +1171,21 @@ QQuickDrag *QQuickMouseArea::drag() return d->drag; } +QSGNode *QQuickMouseArea::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) +{ + Q_UNUSED(data); + Q_D(QQuickMouseArea); + + if (!qmlVisualTouchDebugging()) + return 0; + + QSGRectangleNode *rectangle = static_cast(oldNode); + if (!rectangle) rectangle = d->sceneGraphContext()->createRectangleNode(); + + rectangle->setRect(QRectF(0, 0, width(), height())); + rectangle->setColor(QColor(255, 0, 0, 50)); + rectangle->update(); + return rectangle; +} + QT_END_NAMESPACE diff --git a/src/quick/items/qquickmousearea_p.h b/src/quick/items/qquickmousearea_p.h index 98034a648a..7513ca334b 100644 --- a/src/quick/items/qquickmousearea_p.h +++ b/src/quick/items/qquickmousearea_p.h @@ -207,6 +207,7 @@ protected: virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); virtual void itemChange(ItemChange change, const ItemChangeData& value); + virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *); private: void handlePress(); diff --git a/src/quick/items/qquickmultipointtoucharea.cpp b/src/quick/items/qquickmultipointtoucharea.cpp index 32c8c386bf..766ce67e43 100644 --- a/src/quick/items/qquickmultipointtoucharea.cpp +++ b/src/quick/items/qquickmultipointtoucharea.cpp @@ -41,6 +41,8 @@ #include "qquickmultipointtoucharea_p.h" #include +#include +#include #include #include #include @@ -48,6 +50,8 @@ QT_BEGIN_NAMESPACE +DEFINE_BOOL_CONFIG_OPTION(qmlVisualTouchDebugging, QML_VISUAL_TOUCH_DEBUGGING) + /*! \qmlclass TouchPoint QQuickTouchPoint \inqmlmodule QtQuick 2 @@ -307,6 +311,9 @@ QQuickMultiPointTouchArea::QQuickMultiPointTouchArea(QQuickItem *parent) { setAcceptedMouseButtons(Qt::LeftButton); setFiltersChildMouseEvents(true); + if (qmlVisualTouchDebugging()) { + setFlag(QQuickItem::ItemHasContents); + } } QQuickMultiPointTouchArea::~QQuickMultiPointTouchArea() @@ -738,4 +745,20 @@ bool QQuickMultiPointTouchArea::shouldFilter(QEvent *event) return false; } +QSGNode *QQuickMultiPointTouchArea::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) +{ + Q_UNUSED(data); + + if (!qmlVisualTouchDebugging()) + return 0; + + QSGRectangleNode *rectangle = static_cast(oldNode); + if (!rectangle) rectangle = QQuickItemPrivate::get(this)->sceneGraphContext()->createRectangleNode(); + + rectangle->setRect(QRectF(0, 0, width(), height())); + rectangle->setColor(QColor(255, 0, 0, 50)); + rectangle->update(); + return rectangle; +} + QT_END_NAMESPACE diff --git a/src/quick/items/qquickmultipointtoucharea_p.h b/src/quick/items/qquickmultipointtoucharea_p.h index b56d88bb27..e611ce3ace 100644 --- a/src/quick/items/qquickmultipointtoucharea_p.h +++ b/src/quick/items/qquickmultipointtoucharea_p.h @@ -251,6 +251,7 @@ protected: bool sendMouseEvent(QMouseEvent *event); bool shouldFilter(QEvent *event); void grabGesture(); + virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *); private: void ungrab(); -- cgit v1.2.3