aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorSimjees Abraham <simjees.abraham@nokia.com>2012-04-13 10:51:06 +0200
committerQt by Nokia <qt-info@nokia.com>2012-04-13 16:29:25 +0200
commite078b11ecf20c5a4bb30fda4fadf5ce94572000c (patch)
treef8e8b5b2617920ccfdac7b4766887fbbfc51469d /src/plugins
parent519a2716d6ffa9f3556946f4f4da11e77e83023d (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')
-rw-r--r--src/plugins/qmltooling/qmldbg_qtquick2/highlight.cpp67
-rw-r--r--src/plugins/qmltooling/qmldbg_qtquick2/highlight.h7
-rw-r--r--src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.cpp5
-rw-r--r--src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.cpp37
-rw-r--r--src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.h3
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;