diff options
author | Simjees Abraham <simjees.abraham@nokia.com> | 2012-04-13 10:51:06 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-04-13 16:29:25 +0200 |
commit | e078b11ecf20c5a4bb30fda4fadf5ce94572000c (patch) | |
tree | f8e8b5b2617920ccfdac7b4766887fbbfc51469d /src/plugins | |
parent | 519a2716d6ffa9f3556946f4f4da11e77e83023d (diff) |
Debugger: Fix bug in Inspect Tool
Changes made such that the reparenting of SelectionHighlight and
HoverHighlight is not done. Now the overlay remains the parent for
both.
Reparenting of SelectionHighlight and HoverHighlight created
issues when selection was done on QML lists. Even the highlight items
were getting added into the lists. This fixes the issue.
Change-Id: I116780408d62d2b3da0a17a92e11d6c4f63dd3dc
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
Diffstat (limited to 'src/plugins')
5 files changed, 72 insertions, 47 deletions
diff --git a/src/plugins/qmltooling/qmldbg_qtquick2/highlight.cpp b/src/plugins/qmltooling/qmldbg_qtquick2/highlight.cpp index 082f8e8854..f82a5201f9 100644 --- a/src/plugins/qmltooling/qmldbg_qtquick2/highlight.cpp +++ b/src/plugins/qmltooling/qmldbg_qtquick2/highlight.cpp @@ -42,6 +42,7 @@ #include "highlight.h" #include <QtGui/QPainter> +#include <QtQuick/QQuickCanvas> namespace QmlJSDebugger { namespace QtQuick2 { @@ -66,7 +67,17 @@ void Highlight::setItem(QQuickItem *item) connect(item, SIGNAL(transformOriginChanged(TransformOrigin)), SLOT(adjust())); } - + QQuickCanvas *view = item->canvas(); + QQuickItem * rootItem = view->rootItem(); + if (rootItem) { + connect(rootItem, SIGNAL(xChanged()), SLOT(adjust())); + connect(rootItem, SIGNAL(yChanged()), SLOT(adjust())); + connect(rootItem, SIGNAL(widthChanged()), SLOT(adjust())); + connect(rootItem, SIGNAL(heightChanged()), SLOT(adjust())); + connect(rootItem, SIGNAL(rotationChanged()), SLOT(adjust())); + connect(rootItem, SIGNAL(transformOriginChanged(TransformOrigin)), + SLOT(adjust())); + } m_item = item; adjust(); } @@ -74,34 +85,64 @@ void Highlight::setItem(QQuickItem *item) void Highlight::adjust() { const QQuickItem *item = m_item.data(); + if (!item) + return; + + bool success = false; + m_transform = item->itemTransform(0, &success); + if (!success) + m_transform = QTransform(); + setSize(QSizeF(item->width(), item->height())); - setPos(parentItem()->mapFromItem(item->parentItem(), item->pos())); - setRotation(item->rotation()); - setTransformOrigin(item->transformOrigin()); + qreal scaleFactor = 1; + QPointF originOffset = QPointF(0,0); + QQuickCanvas *view = item->canvas(); + if (view->rootItem()) { + scaleFactor = view->rootItem()->scale(); + originOffset -= view->rootItem()->pos(); + } + // The scale transform for the overlay needs to be cancelled + // as the Item's transform which will be applied to the painter + // takes care of it. + parentItem()->setScale(1/scaleFactor); + setPos(originOffset); + setContentsSize(view->size()); + update(); } void HoverHighlight::paint(QPainter *painter) { + if (!item()) + return; + + painter->save(); + painter->setTransform(transform()); painter->setPen(QColor(108, 141, 221)); - painter->drawRect(QRect(0, 0, width() - 1, height() - 1)); + painter->drawRect(QRect(0, 0, item()->width() - 1, item()->height() - 1)); + painter->restore(); } void SelectionHighlight::paint(QPainter *painter) { - if (height() >= 10 && width() >= 10) { - QColor colorHighlight = Qt::green; + if (!item()) + return; - painter->fillRect(QRectF(0, 0, width(), 5), colorHighlight); - painter->fillRect(QRectF(0, height()-5, width(), 5), colorHighlight); - painter->fillRect(QRectF(0, 5, 5, height() - 10), colorHighlight); - painter->fillRect(QRectF(width()-5, 5, 5, height() - 10), colorHighlight); + painter->save(); + painter->setTransform(transform()); + if (item()->height() >= 10 && item()->width() >= 10) { + QColor colorHighlight = Qt::green; + painter->fillRect(QRectF(0, 0, item()->width(), 5), colorHighlight); + painter->fillRect(QRectF(0, item()->height()-5, item()->width(), 5), colorHighlight); + painter->fillRect(QRectF(0, 5, 5, item()->height() - 10), colorHighlight); + painter->fillRect(QRectF(item()->width()-5, 5, 5, item()->height() - 10), colorHighlight); } painter->setPen(QPen(QColor(0, 22, 159))); - painter->drawRect(QRect(1, 1, width() - 3, height() - 3)); + painter->drawRect(QRect(1, 1, item()->width() - 3, item()->height() - 3)); painter->setPen(QColor(158, 199, 255)); - painter->drawRect(QRect(0, 0, width() - 1, height() - 1)); + painter->drawRect(QRect(0, 0, item()->width() - 1, item()->height() - 1)); + painter->restore(); } } // namespace QtQuick2 diff --git a/src/plugins/qmltooling/qmldbg_qtquick2/highlight.h b/src/plugins/qmltooling/qmldbg_qtquick2/highlight.h index 1b1f10c8bb..1eb97575fb 100644 --- a/src/plugins/qmltooling/qmldbg_qtquick2/highlight.h +++ b/src/plugins/qmltooling/qmldbg_qtquick2/highlight.h @@ -43,8 +43,10 @@ #define HIGHLIGHT_H #include <QtCore/QWeakPointer> +#include <QtGui/QTransform> #include <QtQuick/QQuickPaintedItem> + namespace QmlJSDebugger { namespace QtQuick2 { @@ -57,12 +59,17 @@ public: Highlight(QQuickItem *item, QQuickItem *parent); void setItem(QQuickItem *item); + QQuickItem *item() {return m_item.data();} + +protected: + QTransform transform() {return m_transform;} private slots: void adjust(); private: QWeakPointer<QQuickItem> m_item; + QTransform m_transform; }; /** diff --git a/src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.cpp b/src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.cpp index d39cf16843..a09d0ceade 100644 --- a/src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.cpp +++ b/src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.cpp @@ -83,7 +83,6 @@ 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() @@ -159,10 +158,6 @@ 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 756a63fa1e..9fd5954b90 100644 --- a/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.cpp +++ b/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.cpp @@ -59,10 +59,9 @@ namespace QtQuick2 { * Collects all the items at the given position, from top to bottom. */ static void collectItemsAt(QQuickItem *item, const QPointF &pos, - const QList<QQuickItem *> &unselectableItems, - QList<QQuickItem *> &resultList) + QQuickItem *overlay, QList<QQuickItem *> &resultList) { - if (unselectableItems.contains(item)) + if (item == overlay) return; if (item->flags() & QQuickItem::ItemClipsChildrenToShape) { @@ -73,7 +72,7 @@ static void collectItemsAt(QQuickItem *item, const QPointF &pos, 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), unselectableItems, resultList); + collectItemsAt(child, item->mapToItem(child, pos), overlay, resultList); } if (!QRectF(0, 0, item->width(), item->height()).contains(pos)) @@ -87,9 +86,9 @@ static void collectItemsAt(QQuickItem *item, const QPointF &pos, * child exists. */ static QQuickItem *itemAt(QQuickItem *item, const QPointF &pos, - const QList<QQuickItem *> &unselectableItems) + QQuickItem *overlay) { - if (unselectableItems.contains(item)) + if (item == overlay) return 0; if (!item->isVisible() || item->opacity() == 0.0) @@ -104,7 +103,7 @@ static QQuickItem *itemAt(QQuickItem *item, const QPointF &pos, for (int i = children.count() - 1; i >= 0; --i) { QQuickItem *child = children.at(i); if (QQuickItem *betterCandidate = itemAt(child, item->mapToItem(child, pos), - unselectableItems)) + overlay)) return betterCandidate; } @@ -131,7 +130,6 @@ 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); } @@ -212,14 +210,14 @@ QQmlEngine *QQuickViewInspector::declarativeEngine() const QQuickItem *QQuickViewInspector::topVisibleItemAt(const QPointF &pos) const { QQuickItem *root = m_view->rootItem(); - return itemAt(root, root->mapFromScene(pos), m_unselectableItems); + return itemAt(root, root->mapFromScene(pos), m_overlay); } QList<QQuickItem *> QQuickViewInspector::itemsAt(const QPointF &pos) const { QQuickItem *root = m_view->rootItem(); QList<QQuickItem *> resultList; - collectItemsAt(root, root->mapFromScene(pos), m_unselectableItems, + collectItemsAt(root, root->mapFromScene(pos), m_overlay, resultList); return resultList; } @@ -260,7 +258,6 @@ 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()); } @@ -273,11 +270,7 @@ bool QQuickViewInspector::syncSelectedItems(const QList<QQuickItem *> &items) connect(item, SIGNAL(destroyed(QObject*)), this, SLOT(removeFromSelectedItems(QObject*))); m_selectedItems.append(item); SelectionHighlight *selectionHighlightItem; - if (item->parentItem()) - selectionHighlightItem = new SelectionHighlight(item, item->parentItem()); - else - selectionHighlightItem = new SelectionHighlight(item, m_overlay); - m_unselectableItems.append(selectionHighlightItem); + selectionHighlightItem = new SelectionHighlight(item, m_overlay); m_highlightItems.insert(item, selectionHighlightItem); } @@ -287,11 +280,8 @@ bool QQuickViewInspector::syncSelectedItems(const QList<QQuickItem *> &items) void QQuickViewInspector::removeFromSelectedItems(QObject *object) { if (QQuickItem *item = qobject_cast<QQuickItem*>(object)) { - if (m_selectedItems.removeOne(item)) { - QQuickItem *highlightItem = m_highlightItems.take(item); - m_unselectableItems.removeOne(highlightItem); - delete highlightItem; - } + if (m_selectedItems.removeOne(item)) + delete m_highlightItems.take(item); } } @@ -337,10 +327,5 @@ 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 cc842d1953..0fd2948279 100644 --- a/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.h +++ b/src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.h @@ -84,8 +84,6 @@ public: QString titleForItem(QQuickItem *item) const; - void addToUnselectableItems(QQuickItem *item); - protected: bool eventFilter(QObject *obj, QEvent *event); @@ -99,7 +97,6 @@ private: QQuickView *m_view; QQuickItem *m_overlay; - QList<QQuickItem *> m_unselectableItems; InspectTool *m_inspectTool; |