port remaining windows backend from qtmobility.
[qt:qtsystems.git] / src / systeminfo / qdisplayinfo.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtSystems module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia.  For licensing terms and
14 ** conditions see http://qt.digia.com/licensing.  For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file.  Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights.  These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file.  Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include "qdisplayinfo.h"
43
44 #include <QtCore/qmetaobject.h>
45 #include <QtGui/qguiapplication.h>
46 #include <QtGui/qscreen.h>
47
48 #if defined(Q_OS_LINUX)
49 #  include "qdisplayinfo_linux_p.h"
50 #else
51 QT_BEGIN_NAMESPACE
52 class QDisplayInfoPrivate
53 {
54 public:
55     QDisplayInfoPrivate(QDisplayInfo *) {}
56
57     int brightness(int) { return -1; }
58     int contrast(int) const { return -1; }
59     QDisplayInfo::BacklightState backlightState(int) { return QDisplayInfo::BacklightUnknown; }
60 };
61 QT_END_NAMESPACE
62 #endif
63
64 QT_BEGIN_NAMESPACE
65
66 /*!
67     \class QDisplayInfo
68     \inmodule QtSystemInfo
69     \brief The QDisplayInfo class provides various information about the display.
70     \ingroup systeminfo
71 */
72
73 /*!
74     \enum QDisplayInfo::BacklightState
75     This enum describes the state of the backlight.
76
77     \value BacklightUnknown     The state of the backlight is unknown.
78     \value BacklightOff         Backlight is turned off.
79     \value BacklightDimmed      Backlight has been dimmed.
80     \value BacklightOn          Backlight is on.
81 */
82
83 /*!
84     \fn void QDisplayInfo::backlightStateChanged(int screen, QDisplayInfo::BacklightState state)
85
86     This signal is emitted when the backlight state for \a screen has changed to \a state.
87 */
88
89 /*!
90     Constructs a QDisplayInfo object with the given \a parent.
91 */
92 QDisplayInfo::QDisplayInfo(QObject *parent)
93     : QObject(parent)
94     , d_ptr(new QDisplayInfoPrivate(this))
95 {
96 }
97
98 /*!
99     Destroys the object
100 */
101 QDisplayInfo::~QDisplayInfo()
102 {
103     delete d_ptr;
104 }
105
106 /*!
107     Returns the display brightness of the given \a screen, in 0 - 100 scale. In case of error or
108     the information is not available, -1 is returned.
109 */
110 int QDisplayInfo::brightness(int screen) const
111 {
112     if (screen < 0 || screen >= QGuiApplication::screens().size())
113         return -1;
114     return d_ptr->brightness(screen);
115 }
116
117 /*!
118     Returns the contrast of the given \a screen, in 0 - 100 scale. -1 is returned if not available
119     or on error.
120 */
121 int QDisplayInfo::contrast(int screen) const
122 {
123     if (screen < 0 || screen >= QGuiApplication::screens().size())
124         return -1;
125     return d_ptr->contrast(screen);
126 }
127
128 /*!
129     Returns the backlight state of the given \a screen.
130 */
131 QDisplayInfo::BacklightState QDisplayInfo::backlightState(int screen) const
132 {
133     if (screen < 0 || screen >= QGuiApplication::screens().size())
134         return QDisplayInfo::BacklightUnknown;
135     return d_ptr->backlightState(screen);
136 }
137
138 // the following are merely wrapper of the QScreen API, and will be remove
139
140 static inline const QScreen *screenAt(int number)
141 {
142     const QList<QScreen *> screens = QGuiApplication::screens();
143     if (number >= 0 && number < screens.size())
144         return screens.at(number);
145     return 0;
146 }
147
148 /*!
149     Returns the color depth of the given \a screen, in bits per pixel. -1 is returned if not
150     available or on error.
151
152     Please use QScreen::depth() instead.
153 */
154 int QDisplayInfo::colorDepth(int screen) const
155 {
156     if (const QScreen *qScreen = screenAt(screen))
157         return qScreen->depth();
158     return -1;
159 }
160
161 /*!
162     Returns the horizontal resolution of the given \a screen in terms of the number of dots per inch.
163     -1 is returned if not available or on error.
164
165     Please use QScreen::logicalDotsPerInchX() instead.
166 */
167 int QDisplayInfo::dpiX(int screen) const
168 {
169     if (const QScreen *qScreen = screenAt(screen))
170         return qRound(qScreen->logicalDotsPerInchX());
171     return -1;
172 }
173
174 /*!
175     Returns the vertical resolution of the given \a screen in terms of the number of dots per inch.
176     -1 is returned if not available or on error.
177
178     Please use QScreen::logicalDotsPerInchY() instead.
179 */
180 int QDisplayInfo::dpiY(int screen) const
181 {
182     if (const QScreen *qScreen = screenAt(screen))
183         return qRound(qScreen->logicalDotsPerInchY());
184     return -1;
185 }
186
187 /*!
188     Returns the physical height of the \a screen in millimeters. -1 is returned if not available
189     or on error.
190
191     Please use QScreen::physicalSize().height() instead.
192 */
193 int QDisplayInfo::physicalHeight(int screen) const
194 {
195     if (const QScreen *qScreen = screenAt(screen))
196         return qRound(qScreen->physicalSize().height());
197     return -1;
198 }
199
200 /*!
201     Returns the physical width of \a screen in millimeters. -1 is returned if not available or
202     on error.
203
204     Please use QScreen::physicalSize().width() instead.
205 */
206 int QDisplayInfo::physicalWidth(int screen) const
207 {
208     if (const QScreen *qScreen = screenAt(screen))
209         return qRound(qScreen->physicalSize().width());
210     return -1;
211 }
212
213 QT_END_NAMESPACE