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 "qquickscreen_p.h"
44 #include "qquickitem.h"
45 #include "qquickitem_p.h"
46 #include "qquickcanvas.h"
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.
57 The Screen attached object is only valid inside Item or Item derived elements, after component completion.
58 Inside these elements it refers to the screen that the element is currently being displayed on.
60 To use this element, you will need to import the module with the following line:
62 import QtQuick.Window 2.0
65 Note that the Screen element is not valid at Component.onCompleted, because the Item has not been displayed on
66 a screen by this time.
68 Restricting this import will allow you to have a QML environment without access to window system features.
72 \qmlattachedproperty int QtQuickWindow2::Screen::width
75 This contains the width of the screen in pixels.
78 \qmlattachedproperty int QtQuickWindow2::Screen::height
81 This contains the height of the screen in pixels.
84 \qmlattachedproperty Qt::ScreenOrientation QtQuickWindow2::Screen::primaryOrientation
87 This contains the primary orientation of the screen.
90 \qmlattachedproperty Qt::ScreenOrientation QtQuickWindow2::Screen::orientation
93 This contains the current orientation of the screen.
96 \qmlattachedmethod int QtQuickWindow2::Screen::angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b)
98 Returns the rotation angle, in degrees, between the two specified angles.
101 QQuickScreenAttached::QQuickScreenAttached(QObject* attachee)
105 m_attachee = qobject_cast<QQuickItem*>(attachee);
108 QQuickItemPrivate::get(m_attachee)->extra.value().screenAttached = this;
110 if (m_attachee->canvas()) //It might not be assigned to a canvas yet
111 canvasChanged(m_attachee->canvas());
115 int QQuickScreenAttached::width() const
119 return m_screen->size().width();
122 int QQuickScreenAttached::height() const
126 return m_screen->size().height();
129 Qt::ScreenOrientation QQuickScreenAttached::primaryOrientation() const
132 return Qt::PrimaryOrientation;
133 return m_screen->primaryOrientation();
136 Qt::ScreenOrientation QQuickScreenAttached::orientation() const
139 return Qt::PrimaryOrientation;
140 return m_screen->orientation();
143 int QQuickScreenAttached::angleBetween(int a, int b)
146 return Qt::PrimaryOrientation;
147 return m_screen->angleBetween((Qt::ScreenOrientation)a,(Qt::ScreenOrientation)b);
150 void QQuickScreenAttached::canvasChanged(QQuickCanvas* c)//Called by QQuickItemPrivate::initCanvas
152 QScreen* screen = c ? c->screen() : 0;
153 if (screen != m_screen) {
154 QScreen* oldScreen = m_screen;
158 disconnect(oldScreen, SIGNAL(sizeChanged(QSize)),
159 this, SIGNAL(widthChanged()));
160 disconnect(oldScreen, SIGNAL(sizeChanged(QSize)),
161 this, SIGNAL(heightChanged()));
162 disconnect(oldScreen, SIGNAL(orientationChanged(Qt::ScreenOrientation)),
163 this, SIGNAL(orientationChanged()));
164 disconnect(oldScreen, SIGNAL(primaryOrientationChanged(Qt::ScreenOrientation)),
165 this, SIGNAL(primaryOrientationChanged()));
169 return; //Don't bother emitting signals, because the new values are garbage anyways
171 if (!oldScreen || screen->size() != oldScreen->size()) {
173 emit heightChanged();
176 if (!oldScreen || screen->orientation() != oldScreen->orientation())
177 emit orientationChanged();
178 if (!oldScreen || screen->primaryOrientation() != oldScreen->primaryOrientation())
179 emit primaryOrientationChanged();
182 connect(screen, SIGNAL(sizeChanged(QSize)),
183 this, SIGNAL(widthChanged()));
184 connect(screen, SIGNAL(sizeChanged(QSize)),
185 this, SIGNAL(heightChanged()));
186 connect(screen, SIGNAL(orientationChanged(Qt::ScreenOrientation)),
187 this, SIGNAL(orientationChanged()));
188 connect(screen, SIGNAL(primaryOrientationChanged(Qt::ScreenOrientation)),
189 this, SIGNAL(primaryOrientationChanged()));