kernel/qplatformscreen.cpp

Source codeSwitch to Preprocessed file
LineSource CodeCoverage
1/**************************************************************************** -
2** -
3** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -
4** Contact: http://www.qt-project.org/legal -
5** -
6** This file is part of the QtGui 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 "qplatformscreen.h" -
43#include <QtGui/qguiapplication.h> -
44#include <qpa/qplatformcursor.h> -
45#include <QtGui/private/qguiapplication_p.h> -
46#include <qpa/qplatformscreen_p.h> -
47#include <qpa/qplatformintegration.h> -
48#include <QtGui/qscreen.h> -
49#include <QtGui/qwindow.h> -
50 -
51QT_BEGIN_NAMESPACE -
52 -
53QPlatformScreen::QPlatformScreen() -
54 : d_ptr(new QPlatformScreenPrivate) -
55{ -
56 Q_D(QPlatformScreen);
executed (the execution status of this line is deduced): QPlatformScreenPrivate * const d = d_func();
-
57 d->screen = 0;
executed (the execution status of this line is deduced): d->screen = 0;
-
58}
executed: }
Execution Count:289
289
59 -
60QPlatformScreen::~QPlatformScreen() -
61{ -
62 Q_D(QPlatformScreen);
executed (the execution status of this line is deduced): QPlatformScreenPrivate * const d = d_func();
-
63 -
64 QGuiApplicationPrivate::screen_list.removeOne(d->screen);
executed (the execution status of this line is deduced): QGuiApplicationPrivate::screen_list.removeOne(d->screen);
-
65 delete d->screen;
executed (the execution status of this line is deduced): delete d->screen;
-
66}
executed: }
Execution Count:287
287
67 -
68/*! -
69 \fn QPixmap QPlatformScreen::grabWindow(WId window, int x, int y, int width, int height) const -
70 -
71 This function is called when Qt needs to be able to grab the content of a window. -
72 -
73 Returnes the content of the window specified with the WId handle within the boundaries of -
74 QRect(x,y,width,height). -
75*/ -
76QPixmap QPlatformScreen::grabWindow(WId window, int x, int y, int width, int height) const -
77{ -
78 Q_UNUSED(window);
never executed (the execution status of this line is deduced): (void)window;;
-
79 Q_UNUSED(x);
never executed (the execution status of this line is deduced): (void)x;;
-
80 Q_UNUSED(y);
never executed (the execution status of this line is deduced): (void)y;;
-
81 Q_UNUSED(width);
never executed (the execution status of this line is deduced): (void)width;;
-
82 Q_UNUSED(height);
never executed (the execution status of this line is deduced): (void)height;;
-
83 return QPixmap();
never executed: return QPixmap();
0
84} -
85 -
86/*! -
87 Return the given top level window for a given position. -
88 -
89 Default implementation retrieves a list of all top level windows and finds the first window -
90 which contains point \a pos -
91*/ -
92QWindow *QPlatformScreen::topLevelAt(const QPoint & pos) const -
93{ -
94 QWindowList list = QGuiApplication::topLevelWindows();
never executed (the execution status of this line is deduced): QWindowList list = QGuiApplication::topLevelWindows();
-
95 for (int i = list.size()-1; i >= 0; --i) {
never evaluated: i >= 0
0
96 QWindow *w = list[i];
never executed (the execution status of this line is deduced): QWindow *w = list[i];
-
97 if (w->isVisible() && w->geometry().contains(pos))
never evaluated: w->isVisible()
never evaluated: w->geometry().contains(pos)
0
98 return w;
never executed: return w;
0
99 }
never executed: }
0
100 -
101 return 0;
never executed: return 0;
0
102} -
103 -
104/*! -
105 Returns a list of all the platform screens that are part of the same -
106 virtual desktop. -
107 -
108 Screens part of the same virtual desktop share a common coordinate system, -
109 and windows can be freely moved between them. -
110*/ -
111QList<QPlatformScreen *> QPlatformScreen::virtualSiblings() const -
112{ -
113 QList<QPlatformScreen *> list;
never executed (the execution status of this line is deduced): QList<QPlatformScreen *> list;
-
114 list << const_cast<QPlatformScreen *>(this);
never executed (the execution status of this line is deduced): list << const_cast<QPlatformScreen *>(this);
-
115 return list;
never executed: return list;
0
116} -
117 -
118QScreen *QPlatformScreen::screen() const -
119{ -
120 Q_D(const QPlatformScreen);
executed (the execution status of this line is deduced): const QPlatformScreenPrivate * const d = d_func();
-
121 return d->screen;
executed: return d->screen;
Execution Count:171730
171730
122} -
123 -
124/*! -
125 Reimplement this function in subclass to return the physical size of the -
126 screen, in millimeters. The physical size represents the actual physical -
127 dimensions of the display. -
128 -
129 The default implementation takes the pixel size of the screen, considers a -
130 resolution of 100 dots per inch, and returns the calculated physical size. -
131 A device with a screen that has different resolutions will need to be -
132 supported by a suitable reimplementation of this function. -
133 -
134 \sa logcalDpi -
135*/ -
136QSizeF QPlatformScreen::physicalSize() const -
137{ -
138 static const int dpi = 100; -
139 return QSizeF(geometry().size()) / dpi * qreal(25.4);
never executed: return QSizeF(geometry().size()) / dpi * qreal(25.4);
0
140} -
141 -
142/*! -
143 Reimplement this function in subclass to return the logical horizontal -
144 and vertical dots per inch metrics of the screen. -
145 -
146 The logical dots per inch metrics are used by QFont to convert point sizes -
147 to pixel sizes. -
148 -
149 The default implementation uses the screen pixel size and physical size to -
150 compute the metrics. -
151 -
152 \sa physicalSize -
153*/ -
154QDpi QPlatformScreen::logicalDpi() const -
155{ -
156 QSizeF ps = physicalSize();
never executed (the execution status of this line is deduced): QSizeF ps = physicalSize();
-
157 QSize s = geometry().size();
never executed (the execution status of this line is deduced): QSize s = geometry().size();
-
158 -
159 return QDpi(25.4 * s.width() / ps.width(),
never executed: return QDpi(25.4 * s.width() / ps.width(), 25.4 * s.height() / ps.height());
0
160 25.4 * s.height() / ps.height());
never executed: return QDpi(25.4 * s.width() / ps.width(), 25.4 * s.height() / ps.height());
0
161} -
162 -
163/*! -
164 Reimplement this function in subclass to return the device pixel -
165 ratio for the screen. This is the ratio between physical pixels -
166 and device-independent pixels. -
167 -
168 \sa QPlatformWindow::devicePixelRatio(); -
169*/ -
170qreal QPlatformScreen::devicePixelRatio() const -
171{ -
172 return 1.0;
executed: return 1.0;
Execution Count:2
2
173} -
174 -
175/*! -
176 Reimplement this function in subclass to return the vertical refresh rate -
177 of the screen, in Hz. -
178 -
179 The default returns 60, a sensible default for modern displays. -
180*/ -
181qreal QPlatformScreen::refreshRate() const -
182{ -
183 return 60;
never executed: return 60;
0
184} -
185 -
186/*! -
187 Reimplement this function in subclass to return the native orientation -
188 of the screen, e.g. the orientation where the logo sticker of the device -
189 appears the right way up. -
190 -
191 The default implementation returns Qt::PrimaryOrientation. -
192*/ -
193Qt::ScreenOrientation QPlatformScreen::nativeOrientation() const -
194{ -
195 return Qt::PrimaryOrientation;
never executed: return Qt::PrimaryOrientation;
0
196} -
197 -
198/*! -
199 Reimplement this function in subclass to return the current orientation -
200 of the screen, for example based on accelerometer data to determine -
201 the device orientation. -
202 -
203 The default implementation returns Qt::PrimaryOrientation. -
204*/ -
205Qt::ScreenOrientation QPlatformScreen::orientation() const -
206{ -
207 return Qt::PrimaryOrientation;
never executed: return Qt::PrimaryOrientation;
0
208} -
209 -
210/* -
211 Reimplement this function in subclass to filter out unneeded screen -
212 orientation updates. -
213 -
214 The orientations will anyway be filtered before QScreen::orientationChanged() -
215 is emitted, but the mask can be used by the platform plugin for example to -
216 prevent having to have an accelerometer sensor running all the time, or to -
217 improve the reported values. As an example of the latter, in case of only -
218 Landscape | InvertedLandscape being set in the mask, on a platform that gets -
219 its orientation readings from an accelerometer sensor embedded in a handheld -
220 device, the platform can report transitions between the two even when the -
221 device is held in an orientation that's closer to portrait. -
222 -
223 By default, the orientation update mask is empty, so unless this function -
224 has been called with a non-empty mask the platform does not need to report -
225 any orientation updates through -
226 QWindowSystemInterface::handleScreenOrientationChange(). -
227*/ -
228void QPlatformScreen::setOrientationUpdateMask(Qt::ScreenOrientations mask) -
229{ -
230 Q_UNUSED(mask);
executed (the execution status of this line is deduced): (void)mask;;
-
231}
executed: }
Execution Count:3
3
232 -
233QPlatformScreen * QPlatformScreen::platformScreenForWindow(const QWindow *window) -
234{ -
235 return window->screen()->handle();
executed: return window->screen()->handle();
Execution Count:171342
171342
236} -
237 -
238/*! -
239 \class QPlatformScreen -
240 \since 4.8 -
241 \internal -
242 \preliminary -
243 \ingroup qpa -
244 -
245 \brief The QPlatformScreen class provides an abstraction for visual displays. -
246 -
247 Many window systems has support for retrieving information on the attached displays. To be able -
248 to query the display QPA uses QPlatformScreen. Qt its self is most dependent on the -
249 physicalSize() function, since this is the function it uses to calculate the dpi to use when -
250 converting point sizes to pixels sizes. However, this is unfortunate on some systems, as the -
251 native system fakes its dpi size. -
252 -
253 QPlatformScreen is also used by the public api QDesktopWidget for information about the desktop. -
254 */ -
255 -
256/*! \fn QRect QPlatformScreen::geometry() const = 0 -
257 Reimplement in subclass to return the pixel geometry of the screen -
258*/ -
259 -
260/*! \fn QRect QPlatformScreen::availableGeometry() const -
261 Reimplement in subclass to return the pixel geometry of the available space -
262 This normally is the desktop screen minus the task manager, global menubar etc. -
263*/ -
264 -
265/*! \fn int QPlatformScreen::depth() const = 0 -
266 Reimplement in subclass to return current depth of the screen -
267*/ -
268 -
269/*! \fn QImage::Format QPlatformScreen::format() const = 0 -
270 Reimplement in subclass to return the image format which corresponds to the screen format -
271*/ -
272 -
273/*! -
274 Implemented in subclasses to return a page flipper object for the screen, or 0 if the -
275 hardware does not support page flipping. The default implementation returns 0. -
276 */ -
277QPlatformScreenPageFlipper *QPlatformScreen::pageFlipper() const -
278{ -
279 return 0;
never executed: return 0;
0
280} -
281 -
282/*! -
283 Reimplement this function in subclass to return the cursor of the screen. -
284 -
285 The default implementation returns 0. -
286*/ -
287QPlatformCursor *QPlatformScreen::cursor() const -
288{ -
289 return 0;
never executed: return 0;
0
290} -
291 -
292/*! -
293 Convenience method to resize all the maximized and fullscreen windows -
294 of this platform screen. -
295*/ -
296void QPlatformScreen::resizeMaximizedWindows() -
297{ -
298 QList<QWindow*> windows = QGuiApplication::allWindows();
never executed (the execution status of this line is deduced): QList<QWindow*> windows = QGuiApplication::allWindows();
-
299 -
300 // 'screen()' still has the old geometry info while 'this' has the new geometry info -
301 const QRect oldGeometry = screen()->geometry();
never executed (the execution status of this line is deduced): const QRect oldGeometry = screen()->geometry();
-
302 const QRect oldAvailableGeometry = screen()->availableGeometry();
never executed (the execution status of this line is deduced): const QRect oldAvailableGeometry = screen()->availableGeometry();
-
303 const QRect newGeometry = geometry();
never executed (the execution status of this line is deduced): const QRect newGeometry = geometry();
-
304 const QRect newAvailableGeometry = availableGeometry();
never executed (the execution status of this line is deduced): const QRect newAvailableGeometry = availableGeometry();
-
305 -
306 // make sure maximized and fullscreen windows are updated -
307 for (int i = 0; i < windows.size(); ++i) {
never evaluated: i < windows.size()
0
308 QWindow *w = windows.at(i);
never executed (the execution status of this line is deduced): QWindow *w = windows.at(i);
-
309 -
310 if (platformScreenForWindow(w) != this)
never evaluated: platformScreenForWindow(w) != this
0
311 continue;
never executed: continue;
0
312 -
313 if (w->windowState() & Qt::WindowFullScreen || w->geometry() == oldGeometry)
never evaluated: w->windowState() & Qt::WindowFullScreen
never evaluated: w->geometry() == oldGeometry
0
314 w->setGeometry(newGeometry);
never executed: w->setGeometry(newGeometry);
0
315 else if (w->windowState() & Qt::WindowMaximized || w->geometry() == oldAvailableGeometry)
never evaluated: w->windowState() & Qt::WindowMaximized
never evaluated: w->geometry() == oldAvailableGeometry
0
316 w->setGeometry(newAvailableGeometry);
never executed: w->setGeometry(newAvailableGeometry);
0
317 } -
318}
never executed: }
0
319 -
320QT_END_NAMESPACE -
321 -
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial