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. Inside these elements
58 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 Restricting this import will allow you to have a QML environment without access to window system features.
69 \qmlattachedproperty int QtQuickWindow2::Screen::width
72 This contains the width of the screen in pixels.
75 \qmlattachedproperty int QtQuickWindow2::Screen::height
78 This contains the height of the screen in pixels.
81 \qmlattachedproperty Qt::ScreenOrientation QtQuickWindow2::Screen::primaryOrientation
84 This contains the primary orientation of the screen.
87 \qmlattachedproperty Qt::ScreenOrientation QtQuickWindow2::Screen::orientation
90 This contains the current orientation of the screen.
93 \qmlattachedmethod int QtQuickWindow2::Screen::angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b)
95 Returns the rotation angle, in degrees, between the two specified angles.
98 QQuickScreenAttached::QQuickScreenAttached(QObject* attachee)
102 m_attachee = qobject_cast<QQuickItem*>(attachee);
105 QQuickItemPrivate::get(m_attachee)->extra.value().screenAttached = this;
107 if (m_attachee->canvas()) //It might not be assigned to a canvas yet
108 canvasChanged(m_attachee->canvas());
112 int QQuickScreenAttached::width() const
116 return m_screen->size().width();
119 int QQuickScreenAttached::height() const
123 return m_screen->size().height();
126 Qt::ScreenOrientation QQuickScreenAttached::primaryOrientation() const
129 return Qt::PrimaryOrientation;
130 return m_screen->primaryOrientation();
133 Qt::ScreenOrientation QQuickScreenAttached::orientation() const
136 return Qt::PrimaryOrientation;
137 return m_screen->orientation();
140 int QQuickScreenAttached::angleBetween(int a, int b)
143 return Qt::PrimaryOrientation;
144 return m_screen->angleBetween((Qt::ScreenOrientation)a,(Qt::ScreenOrientation)b);
147 void QQuickScreenAttached::canvasChanged(QQuickCanvas* c)//Called by QQuickItemPrivate::initCanvas
149 QScreen* screen = c ? c->screen() : 0;
150 if (screen != m_screen) {
151 QScreen* oldScreen = m_screen;
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()));
166 return; //Don't bother emitting signals, because the new values are garbage anyways
168 if (!oldScreen || screen->size() != oldScreen->size()) {
170 emit heightChanged();
173 if (!oldScreen || screen->orientation() != oldScreen->orientation())
174 emit orientationChanged();
175 if (!oldScreen || screen->primaryOrientation() != oldScreen->primaryOrientation())
176 emit primaryOrientationChanged();
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()));