Implement the orientationChanged signal.
[qt:qtsystems-staging.git] / src / systeminfo / qdisplayinfo.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the QtSystems module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
14 ** this package.
15 **
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file.  Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23 **
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27 **
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
30 **
31 **
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include <qdisplayinfo.h>
43
44 #include <QtGui/qapplication.h>
45 #include <QtGui/qdesktopwidget.h>
46
47 #if defined(Q_OS_LINUX)
48 #  include "qdisplayinfo_linux_p.h"
49 #elif defined(Q_OS_WIN)
50 #  include "qdisplayinfo_win_p.h"
51 #else
52 QT_BEGIN_NAMESPACE
53 class QDisplayInfoPrivate
54 {
55 public:
56     QDisplayInfoPrivate(QDisplayInfo *) {}
57
58     int brightness(int) { return -1; }
59     int colorDepth(int) { return -1; }
60     int contrast(int) const { return -1; }
61     int dpiX(int) { return -1; }
62     int dpiY(int) { return -1; }
63     int physicalHeight(int) { return -1; }
64     int physicalWidth(int) { return -1; }
65     QDisplayInfo::BacklightState backlightState(int) { return QDisplayInfo::BacklightUnknown; }
66     QDisplayInfo::Orientation orientation(int) { return QDisplayInfo::OrientationUnknown; }
67 };
68 QT_END_NAMESPACE
69 #endif
70
71 QT_BEGIN_NAMESPACE
72
73 /*!
74     \class QDisplayInfo
75     \inmodule QtSystems
76     \brief The QDisplayInfo class provides various information of the display.
77 */
78
79 /*!
80     \enum QDisplayInfo::BacklightState
81     This enum describes the state of the backlight.
82
83     \value BacklightUnknown     The state of the backlight is unkown.
84     \value BacklightOff         Backlight is turned off.
85     \value BacklightDimmed      Backlight has been dimmed.
86     \value BacklightOn          Backlight is on.
87 */
88
89 /*!
90     \enum QDisplayInfo::Orientation
91     This enum describes the orientation of the window system. Note that if the UI of an application
92     is rotated through methods other than talking with the window system, its orientation can't be
93     correctly reported by QDisplayInfo.
94
95     For orientation of the display, please refer to QOrientationSensor and QOrientationReading in
96     the QtSensors module.
97
98     \value OrientationUnknown   The orientation is unknown.
99     \value Landscape            The orientation is landscape, i.e. the width is bigger than the height.
100     \value Portrait             The orientation is portrait, i.e. the height is bigger than the width.
101     \value InvertedLandscape    Landscape, but inverted.
102     \value InvertedPortrait     Portrait, but inverted.
103 */
104
105
106 /*!
107     \fn void QDisplayInfo::orientationChanged(int screen, QDisplayInfo::DisplayOrientation orientation)
108
109     This signal is emitted when the orientation of the \a screen has changed to \a orientation.
110 */
111
112 /*!
113     Constructs a QDisplayInfo object with the given \a parent.
114 */
115 QDisplayInfo::QDisplayInfo(QObject *parent)
116     : QObject(parent)
117     , d_ptr(new QDisplayInfoPrivate(this))
118 {
119 }
120
121 /*!
122     Destroys the object
123 */
124 QDisplayInfo::~QDisplayInfo()
125 {
126     delete d_ptr;
127 }
128
129 /*!
130     Returns the display brightness of the given \a screen, in 0 - 100 scale. In case of error or
131     the information is not available, -1 is returned.
132 */
133 int QDisplayInfo::brightness(int screen) const
134 {
135     if (screen < 0 || screen >= QApplication::desktop()->screenCount())
136         return -1;
137     return d_ptr->brightness(screen);
138 }
139
140 /*!
141     Returns the color depth of the given \a screen, in bits per pixel. -1 is returned if not
142     available or on error.
143 */
144 int QDisplayInfo::colorDepth(int screen) const
145 {
146     if (screen < 0 || screen >= QApplication::desktop()->screenCount())
147         return -1;
148     return d_ptr->colorDepth(screen);
149 }
150
151 /*!
152     Returns the contrast of the given \a screen, in 0 - 100 scale. -1 is returned if not available
153     or on error.
154 */
155 int QDisplayInfo::contrast(int screen) const
156 {
157     if (screen < 0 || screen >= QApplication::desktop()->screenCount())
158         return -1;
159     return d_ptr->contrast(screen);
160 }
161
162 /*!
163     Returns the horizontal resolution of the given \a screen in terms of the number of dots per inch.
164     -1 is returned if not available or on error.
165 */
166 int QDisplayInfo::dpiX(int screen) const
167 {
168     if (screen < 0 || screen >= QApplication::desktop()->screenCount())
169         return -1;
170     return d_ptr->dpiX(screen);
171 }
172
173 /*!
174     Returns the vertical resolution of the given \a screen in terms of the number of dots per inch.
175     -1 is returned if not available or on error.
176 */
177 int QDisplayInfo::dpiY(int screen) const
178 {
179     if (screen < 0 || screen >= QApplication::desktop()->screenCount())
180         return -1;
181     return d_ptr->dpiY(screen);
182 }
183
184 /*!
185     Returns the physical height of the \a screen in millimeters. -1 is returned if not available
186     or on error.
187 */
188 int QDisplayInfo::physicalHeight(int screen) const
189 {
190     if (screen < 0 || screen >= QApplication::desktop()->screenCount())
191         return -1;
192     return d_ptr->physicalHeight(screen);
193 }
194
195 /*!
196     Returns the physical width of \a screen in millimeters. -1 is returned if not available or
197     on error.
198 */
199 int QDisplayInfo::physicalWidth(int screen) const
200 {
201     if (screen < 0 || screen >= QApplication::desktop()->screenCount())
202         return -1;
203     return d_ptr->physicalWidth(screen);
204 }
205
206 /*!
207     Returns the backlight state of the given \a screen.
208 */
209 QDisplayInfo::BacklightState QDisplayInfo::backlightState(int screen) const
210 {
211     if (screen < 0 || screen >= QApplication::desktop()->screenCount())
212         return QDisplayInfo::BacklightUnknown;
213     return d_ptr->backlightState(screen);
214 }
215
216 /*!
217     Returns the orientation of the given \a screen.
218 */
219 QDisplayInfo::Orientation QDisplayInfo::orientation(int screen) const
220 {
221     QDisplayInfo::Orientation orient = d_ptr->orientation(screen);
222     if (orient != QDisplayInfo::OrientationUnknown) {
223         return orient;
224     } else {
225         QWidget *widget = qApp->desktop()->screen(screen);
226         if (widget->width() > widget->height())
227             return QDisplayInfo::Landscape;
228         else if (widget->width() < widget->height())
229             return QDisplayInfo::Portrait;
230         else
231             return QDisplayInfo::OrientationUnknown;
232     }
233 }
234
235 /*!
236     \internal
237 */
238 void QDisplayInfo::connectNotify(const char *signal)
239 {
240 #if defined(Q_OS_LINUX)
241     connect(d_ptr, signal, this, signal, Qt::UniqueConnection);
242 #else
243     Q_UNUSED(signal)
244 #endif
245 }
246
247 /*!
248     \internal
249 */
250 void QDisplayInfo::disconnectNotify(const char *signal)
251 {
252 #if defined(Q_OS_LINUX)
253     // We can only disconnect with the private implementation, when there is no receivers for the signal.
254     if (receivers(signal) > 0)
255         return;
256
257     disconnect(d_ptr, signal, this, signal);
258 #else
259     Q_UNUSED(signal)
260 #endif
261 }
262
263 QT_END_NAMESPACE