aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorSimjees Abraham <simjees.abraham@nokia.com>2012-04-11 11:21:28 +0200
committerQt by Nokia <qt-info@nokia.com>2012-04-12 01:39:43 +0200
commit0f1696ffb27b1a4326ee2a86104e289ce776318d (patch)
treef25aaeda63299ea2d50ecbdb5997c3e838295e42 /src/plugins
parente2a1f1fa55ca590be3023a88dc9acbef711cb57e (diff)
Debugger: Fix bugs in inspection tool
Incorrect display of hover and selection highlight for child items having rotation and a different transform origin corrected. Change-Id: Id25c5bf52b5c1abc3f98ac6bc90d89262cc4f2cd Reviewed-by: Kai Koehne <kai.koehne@nokia.com> Reviewed-by: Aurindam Jana <aurindam.jana@nokia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.cpp13
-rw-r--r--src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.cpp44
-rw-r--r--src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.h3
3 files changed, 47 insertions, 13 deletions
diff --git a/src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.cpp b/src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.cpp
index 67b12822be..d39cf16843 100644
--- a/src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.cpp
+++ b/src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.cpp
@@ -83,6 +83,7 @@ InspectTool::InspectTool(QQuickViewInspector *inspector, QQuickView *view) :
m_pressAndHoldTimer.setInterval(Constants::PressAndHoldTimeout);
connect(&m_pressAndHoldTimer, SIGNAL(timeout()), SLOT(zoomTo100()));
enable(true);
+ inspector->addToUnselectableItems(m_hoverHighlight);
}
InspectTool::~InspectTool()
@@ -128,16 +129,20 @@ void InspectTool::mouseReleaseEvent(QMouseEvent *event)
{
m_mousePosition = event->posF();
m_pressAndHoldTimer.stop();
- if (event->button() == Qt::LeftButton)
+ if (event->button() == Qt::LeftButton && !m_dragStarted) {
selectItem();
+ m_hoverHighlight->setVisible(false);
+ }
}
void InspectTool::mouseDoubleClickEvent(QMouseEvent *event)
{
m_mousePosition = event->posF();
m_pressAndHoldTimer.stop();
- if (event->button() == Qt::LeftButton)
+ if (event->button() == Qt::LeftButton) {
selectNextItem();
+ m_hoverHighlight->setVisible(false);
+ }
}
void InspectTool::mouseMoveEvent(QMouseEvent *event)
@@ -154,6 +159,10 @@ void InspectTool::hoverMoveEvent(QMouseEvent *event)
if (!item || item == m_lastClickedItem) {
m_hoverHighlight->setVisible(false);
} else {
+ if (item->parentItem())
+ m_hoverHighlight->setParentItem(item->parentItem());
+ else
+ m_hoverHighlight->setParentItem(inspector()->overlay());
m_hoverHighlight->setItem(item);
m_hoverHighlight->setVisible(true);
}
diff --git a/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.cpp b/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.cpp
index 95ce86678c..756a63fa1e 100644
--- a/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.cpp
+++ b/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.cpp
@@ -58,10 +58,11 @@ namespace QtQuick2 {
/*
* Collects all the items at the given position, from top to bottom.
*/
-static void collectItemsAt(QQuickItem *item, const QPointF &pos, QQuickItem *overlay,
+static void collectItemsAt(QQuickItem *item, const QPointF &pos,
+ const QList<QQuickItem *> &unselectableItems,
QList<QQuickItem *> &resultList)
{
- if (item == overlay)
+ if (unselectableItems.contains(item))
return;
if (item->flags() & QQuickItem::ItemClipsChildrenToShape) {
@@ -72,7 +73,7 @@ static void collectItemsAt(QQuickItem *item, const QPointF &pos, QQuickItem *ove
QList<QQuickItem *> children = QQuickItemPrivate::get(item)->paintOrderChildItems();
for (int i = children.count() - 1; i >= 0; --i) {
QQuickItem *child = children.at(i);
- collectItemsAt(child, item->mapToItem(child, pos), overlay, resultList);
+ collectItemsAt(child, item->mapToItem(child, pos), unselectableItems, resultList);
}
if (!QRectF(0, 0, item->width(), item->height()).contains(pos))
@@ -85,9 +86,10 @@ static void collectItemsAt(QQuickItem *item, const QPointF &pos, QQuickItem *ove
* Returns the first visible item at the given position, or 0 when no such
* child exists.
*/
-static QQuickItem *itemAt(QQuickItem *item, const QPointF &pos, QQuickItem *overlay)
+static QQuickItem *itemAt(QQuickItem *item, const QPointF &pos,
+ const QList<QQuickItem *> &unselectableItems)
{
- if (item == overlay)
+ if (unselectableItems.contains(item))
return 0;
if (!item->isVisible() || item->opacity() == 0.0)
@@ -101,7 +103,8 @@ static QQuickItem *itemAt(QQuickItem *item, const QPointF &pos, QQuickItem *over
QList<QQuickItem *> children = QQuickItemPrivate::get(item)->paintOrderChildItems();
for (int i = children.count() - 1; i >= 0; --i) {
QQuickItem *child = children.at(i);
- if (QQuickItem *betterCandidate = itemAt(child, item->mapToItem(child, pos), overlay))
+ if (QQuickItem *betterCandidate = itemAt(child, item->mapToItem(child, pos),
+ unselectableItems))
return betterCandidate;
}
@@ -128,6 +131,7 @@ QQuickViewInspector::QQuickViewInspector(QQuickView *view, QObject *parent) :
if (QQuickItem *root = view->rootItem())
m_overlay->setParentItem(root);
+ m_unselectableItems.append(m_overlay);
view->installEventFilter(this);
setCurrentTool(m_inspectTool);
}
@@ -171,6 +175,8 @@ void QQuickViewInspector::changeTool(InspectorProtocol::Tool tool)
setCurrentTool(m_inspectTool);
emit inspectToolActivated();
break;
+ default:
+ break;
}
}
@@ -206,14 +212,15 @@ QQmlEngine *QQuickViewInspector::declarativeEngine() const
QQuickItem *QQuickViewInspector::topVisibleItemAt(const QPointF &pos) const
{
QQuickItem *root = m_view->rootItem();
- return itemAt(root, root->mapFromScene(pos), m_overlay);
+ return itemAt(root, root->mapFromScene(pos), m_unselectableItems);
}
QList<QQuickItem *> QQuickViewInspector::itemsAt(const QPointF &pos) const
{
QQuickItem *root = m_view->rootItem();
QList<QQuickItem *> resultList;
- collectItemsAt(root, root->mapFromScene(pos), m_overlay, resultList);
+ collectItemsAt(root, root->mapFromScene(pos), m_unselectableItems,
+ resultList);
return resultList;
}
@@ -253,6 +260,7 @@ bool QQuickViewInspector::syncSelectedItems(const QList<QQuickItem *> &items)
selectionChanged = true;
item.data()->disconnect(this);
m_selectedItems.removeOne(item);
+ m_unselectableItems.removeOne(m_highlightItems.value(item.data()));
delete m_highlightItems.take(item.data());
}
@@ -264,7 +272,13 @@ bool QQuickViewInspector::syncSelectedItems(const QList<QQuickItem *> &items)
selectionChanged = true;
connect(item, SIGNAL(destroyed(QObject*)), this, SLOT(removeFromSelectedItems(QObject*)));
m_selectedItems.append(item);
- m_highlightItems.insert(item, new SelectionHighlight(item, m_overlay));
+ SelectionHighlight *selectionHighlightItem;
+ if (item->parentItem())
+ selectionHighlightItem = new SelectionHighlight(item, item->parentItem());
+ else
+ selectionHighlightItem = new SelectionHighlight(item, m_overlay);
+ m_unselectableItems.append(selectionHighlightItem);
+ m_highlightItems.insert(item, selectionHighlightItem);
}
return selectionChanged;
@@ -273,8 +287,11 @@ bool QQuickViewInspector::syncSelectedItems(const QList<QQuickItem *> &items)
void QQuickViewInspector::removeFromSelectedItems(QObject *object)
{
if (QQuickItem *item = qobject_cast<QQuickItem*>(object)) {
- if (m_selectedItems.removeOne(item))
- delete m_highlightItems.take(item);
+ if (m_selectedItems.removeOne(item)) {
+ QQuickItem *highlightItem = m_highlightItems.take(item);
+ m_unselectableItems.removeOne(highlightItem);
+ delete highlightItem;
+ }
}
}
@@ -320,5 +337,10 @@ QString QQuickViewInspector::titleForItem(QQuickItem *item) const
return constructedName;
}
+void QQuickViewInspector::addToUnselectableItems(QQuickItem *item)
+{
+ m_unselectableItems.append(item);
+}
+
} // namespace QtQuick2
} // namespace QmlJSDebugger
diff --git a/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.h b/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.h
index 0fd2948279..cc842d1953 100644
--- a/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.h
+++ b/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.h
@@ -84,6 +84,8 @@ public:
QString titleForItem(QQuickItem *item) const;
+ void addToUnselectableItems(QQuickItem *item);
+
protected:
bool eventFilter(QObject *obj, QEvent *event);
@@ -97,6 +99,7 @@ private:
QQuickView *m_view;
QQuickItem *m_overlay;
+ QList<QQuickItem *> m_unselectableItems;
InspectTool *m_inspectTool;