Doc Fix
[profile/ivi/qtdeclarative.git] / src / quick / items / qquickscreen.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 "qquickscreen_p.h"
43
44 #include "qquickitem.h"
45 #include "qquickitem_p.h"
46 #include "qquickcanvas.h"
47
48 #include <QScreen>
49
50 QT_BEGIN_NAMESPACE
51
52 /*!
53     \qmlclass Screen QQuickScreenAttached
54     \inqmlmodule QtQuick.Window 2
55     \brief The Screen attached object provides information about the Screen an Item is displayed on.
56
57     The Screen attached object is only valid inside Item or Item derived elements. Inside these elements
58     it refers to the screen that the element is currently being displayed on.
59
60     To use this element, you will need to import the module with the following line:
61     \code
62     import QtQuick.Window 2.0
63     \endcode
64
65     Restricting this import will allow you to have a QML environment without access to window system features.
66 */
67
68 /*!
69     \qmlattachedproperty int QtQuickWindow2::Screen::width
70     \readonly
71
72     This contains the width of the screen in pixels.
73 */
74 /*!
75     \qmlattachedproperty int QtQuickWindow2::Screen::height
76     \readonly
77
78     This contains the height of the screen in pixels.
79 */
80 /*!
81     \qmlattachedproperty Qt::ScreenOrientation QtQuickWindow2::Screen::primaryOrientation
82     \readonly
83
84     This contains the primary orientation of the screen.
85 */
86 /*!
87     \qmlattachedproperty Qt::ScreenOrientation QtQuickWindow2::Screen::orientation
88     \readonly
89
90     This contains the current orientation of the screen.
91 */
92 /*!
93     \qmlattachedmethod int QtQuickWindow2::Screen::angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b)
94
95     Returns the rotation angle, in degrees, between the two specified angles.
96 */
97
98 QQuickScreenAttached::QQuickScreenAttached(QObject* attachee)
99     : QObject(attachee)
100     , m_screen(0)
101 {
102     m_attachee = qobject_cast<QQuickItem*>(attachee);
103
104     if (m_attachee) {
105         QQuickItemPrivate::get(m_attachee)->extra.value().screenAttached = this;
106
107         if (m_attachee->canvas()) //It might not be assigned to a canvas yet
108             canvasChanged(m_attachee->canvas());
109     }
110 }
111
112 int QQuickScreenAttached::width() const
113 {
114     if (!m_screen)
115         return 0;
116     return m_screen->size().width();
117 }
118
119 int QQuickScreenAttached::height() const
120 {
121     if (!m_screen)
122         return 0;
123     return m_screen->size().height();
124 }
125
126 Qt::ScreenOrientation QQuickScreenAttached::primaryOrientation() const
127 {
128     if (!m_screen)
129         return Qt::PrimaryOrientation;
130     return m_screen->primaryOrientation();
131 }
132
133 Qt::ScreenOrientation QQuickScreenAttached::orientation() const
134 {
135     if (!m_screen)
136         return Qt::PrimaryOrientation;
137     return m_screen->orientation();
138 }
139
140 int QQuickScreenAttached::angleBetween(int a, int b)
141 {
142     if (!m_screen)
143         return Qt::PrimaryOrientation;
144     return m_screen->angleBetween((Qt::ScreenOrientation)a,(Qt::ScreenOrientation)b);
145 }
146
147 void QQuickScreenAttached::canvasChanged(QQuickCanvas* c)//Called by QQuickItemPrivate::initCanvas
148 {
149     QScreen* screen = c ? c->screen() : 0;
150     if (screen != m_screen) {
151         QScreen* oldScreen = m_screen;
152         m_screen = screen;
153
154         if (oldScreen) {
155             disconnect(oldScreen, SIGNAL(sizeChanged(QSize)),
156                     this, SIGNAL(widthChanged()));
157             disconnect(oldScreen, SIGNAL(sizeChanged(QSize)),
158                     this, SIGNAL(heightChanged()));
159             disconnect(oldScreen, SIGNAL(orientationChanged(Qt::ScreenOrientation)),
160                     this, SIGNAL(orientationChanged()));
161             disconnect(oldScreen, SIGNAL(primaryOrientationChanged(Qt::ScreenOrientation)),
162                     this, SIGNAL(primaryOrientationChanged()));
163         }
164
165         if (!screen)
166             return; //Don't bother emitting signals, because the new values are garbage anyways
167
168         if (!oldScreen || screen->size() != oldScreen->size()) {
169             emit widthChanged();
170             emit heightChanged();
171         }
172
173         if (!oldScreen || screen->orientation() != oldScreen->orientation())
174             emit orientationChanged();
175         if (!oldScreen || screen->primaryOrientation() != oldScreen->primaryOrientation())
176             emit primaryOrientationChanged();
177
178
179         connect(screen, SIGNAL(sizeChanged(QSize)),
180                 this, SIGNAL(widthChanged()));
181         connect(screen, SIGNAL(sizeChanged(QSize)),
182                 this, SIGNAL(heightChanged()));
183         connect(screen, SIGNAL(orientationChanged(Qt::ScreenOrientation)),
184                 this, SIGNAL(orientationChanged()));
185         connect(screen, SIGNAL(primaryOrientationChanged(Qt::ScreenOrientation)),
186                 this, SIGNAL(primaryOrientationChanged()));
187     }
188 }
189
190 QT_END_NAMESPACE