Debugger: Fix bug in Inspect Tool
[profile/ivi/qtdeclarative.git] / src / plugins / qmltooling / qmldbg_qtquick2 / highlight.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the QtQml module of the Qt Toolkit.
7 **
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.
16 **
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.
20 **
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.
28 **
29 ** Other Usage
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.
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include "highlight.h"
43
44 #include <QtGui/QPainter>
45 #include <QtQuick/QQuickCanvas>
46
47 namespace QmlJSDebugger {
48 namespace QtQuick2 {
49
50 Highlight::Highlight(QQuickItem *item, QQuickItem *parent)
51     : QQuickPaintedItem(parent)
52 {
53     setItem(item);
54 }
55
56 void Highlight::setItem(QQuickItem *item)
57 {
58     if (m_item)
59         m_item.data()->disconnect(this);
60
61     if (item) {
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)),
68                 SLOT(adjust()));
69     }
70     QQuickCanvas *view = item->canvas();
71     QQuickItem * rootItem = view->rootItem();
72     if (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)),
79                 SLOT(adjust()));
80     }
81     m_item = item;
82     adjust();
83 }
84
85 void Highlight::adjust()
86 {
87     const QQuickItem *item = m_item.data();
88     if (!item)
89         return;
90
91     bool success = false;
92     m_transform = item->itemTransform(0, &success);
93     if (!success)
94         m_transform = QTransform();
95
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();
103     }
104     // The scale transform for the overlay needs to be cancelled
105     // as the Item's transform which will be applied to the painter
106     // takes care of it.
107     parentItem()->setScale(1/scaleFactor);
108     setPos(originOffset);
109     setContentsSize(view->size());
110     update();
111 }
112
113
114 void HoverHighlight::paint(QPainter *painter)
115 {
116     if (!item())
117         return;
118
119     painter->save();
120     painter->setTransform(transform());
121     painter->setPen(QColor(108, 141, 221));
122     painter->drawRect(QRect(0, 0, item()->width() - 1, item()->height() - 1));
123     painter->restore();
124 }
125
126
127 void SelectionHighlight::paint(QPainter *painter)
128 {
129     if (!item())
130         return;
131
132     painter->save();
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);
140     }
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));
145     painter->restore();
146 }
147
148 } // namespace QtQuick2
149 } // namespace QmlJSDebugger