aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;