1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
6 ** This file is part of the QtQml module of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
42 #include "highlight.h"
44 #include <QtGui/QPainter>
45 #include <QtQuick/QQuickCanvas>
47 namespace QmlJSDebugger {
50 Highlight::Highlight(QQuickItem *item, QQuickItem *parent)
51 : QQuickPaintedItem(parent)
56 void Highlight::setItem(QQuickItem *item)
59 m_item.data()->disconnect(this);
62 connect(item, SIGNAL(xChanged()), SLOT(adjust()));
63 connect(item, SIGNAL(yChanged()), SLOT(adjust()));
64 connect(item, SIGNAL(widthChanged()), SLOT(adjust()));
65 connect(item, SIGNAL(heightChanged()), SLOT(adjust()));
66 connect(item, SIGNAL(rotationChanged()), SLOT(adjust()));
67 connect(item, SIGNAL(transformOriginChanged(TransformOrigin)),
70 QQuickCanvas *view = item->canvas();
71 QQuickItem * rootItem = view->rootItem();
73 connect(rootItem, SIGNAL(xChanged()), SLOT(adjust()));
74 connect(rootItem, SIGNAL(yChanged()), SLOT(adjust()));
75 connect(rootItem, SIGNAL(widthChanged()), SLOT(adjust()));
76 connect(rootItem, SIGNAL(heightChanged()), SLOT(adjust()));
77 connect(rootItem, SIGNAL(rotationChanged()), SLOT(adjust()));
78 connect(rootItem, SIGNAL(transformOriginChanged(TransformOrigin)),
85 void Highlight::adjust()
87 const QQuickItem *item = m_item.data();
92 m_transform = item->itemTransform(0, &success);
94 m_transform = QTransform();
96 setSize(QSizeF(item->width(), item->height()));
97 qreal scaleFactor = 1;
98 QPointF originOffset = QPointF(0,0);
99 QQuickCanvas *view = item->canvas();
100 if (view->rootItem()) {
101 scaleFactor = view->rootItem()->scale();
102 originOffset -= view->rootItem()->pos();
104 // The scale transform for the overlay needs to be cancelled
105 // as the Item's transform which will be applied to the painter
107 parentItem()->setScale(1/scaleFactor);
108 setPos(originOffset);
109 setContentsSize(view->size());
114 void HoverHighlight::paint(QPainter *painter)
120 painter->setTransform(transform());
121 painter->setPen(QColor(108, 141, 221));
122 painter->drawRect(QRect(0, 0, item()->width() - 1, item()->height() - 1));
127 void SelectionHighlight::paint(QPainter *painter)
133 painter->setTransform(transform());
134 if (item()->height() >= 10 && item()->width() >= 10) {
135 QColor colorHighlight = Qt::green;
136 painter->fillRect(QRectF(0, 0, item()->width(), 5), colorHighlight);
137 painter->fillRect(QRectF(0, item()->height()-5, item()->width(), 5), colorHighlight);
138 painter->fillRect(QRectF(0, 5, 5, item()->height() - 10), colorHighlight);
139 painter->fillRect(QRectF(item()->width()-5, 5, 5, item()->height() - 10), colorHighlight);
141 painter->setPen(QPen(QColor(0, 22, 159)));
142 painter->drawRect(QRect(1, 1, item()->width() - 3, item()->height() - 3));
143 painter->setPen(QColor(158, 199, 255));
144 painter->drawRect(QRect(0, 0, item()->width() - 1, item()->height() - 1));
148 } // namespace QtQuick2
149 } // namespace QmlJSDebugger