Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qiosscreen.mm
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qiosglobal.h"
5#include "qiosintegration.h"
6#include "qiosscreen.h"
7#include "qioswindow.h"
8#include <qpa/qwindowsysteminterface.h>
10#include "qiosviewcontroller.h"
11#include "quiview.h"
12#include "qiostheme.h"
13
14#include <QtCore/private/qcore_mac_p.h>
15
16#include <QtGui/qpointingdevice.h>
17#include <QtGui/private/qwindow_p.h>
18#include <QtGui/private/qguiapplication_p.h>
19#include <private/qcoregraphics_p.h>
20#include <qpa/qwindowsysteminterface.h>
21
22#include <sys/sysctl.h>
23
24// -------------------------------------------------------------------------
25
26typedef void (^DisplayLinkBlock)(CADisplayLink *displayLink);
27
28@implementation UIScreen (DisplayLinkBlock)
29- (CADisplayLink*)displayLinkWithBlock:(DisplayLinkBlock)block
30{
31 return [self displayLinkWithTarget:[[block copy] autorelease]
32 selector:@selector(invokeDisplayLinkBlock:)];
33}
34@end
35
36@implementation NSObject (DisplayLinkBlock)
37- (void)invokeDisplayLinkBlock:(CADisplayLink *)sender
38{
39 DisplayLinkBlock block = static_cast<id>(self);
40 block(sender);
41}
42@end
43
44
45// -------------------------------------------------------------------------
46
47static QIOSScreen* qtPlatformScreenFor(UIScreen *uiScreen)
48{
50 QIOSScreen *platformScreen = static_cast<QIOSScreen *>(screen->handle());
51 if (platformScreen->uiScreen() == uiScreen)
52 return platformScreen;
53 }
54
55 return 0;
56}
57
58@interface QIOSScreenTracker : NSObject
59@end
60
61@implementation QIOSScreenTracker
62
63+ (void)load
64{
65 NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
66 [center addObserver:self selector:@selector(screenConnected:)
67 name:UIScreenDidConnectNotification object:nil];
68 [center addObserver:self selector:@selector(screenDisconnected:)
69 name:UIScreenDidDisconnectNotification object:nil];
70 [center addObserver:self selector:@selector(screenModeChanged:)
71 name:UIScreenModeDidChangeNotification object:nil];
72}
73
74+ (void)screenConnected:(NSNotification*)notification
75{
77 return; // Will be added when QIOSIntegration is created
78
79 QWindowSystemInterface::handleScreenAdded(new QIOSScreen([notification object]));
80}
81
82+ (void)screenDisconnected:(NSNotification*)notification
83{
85 return;
86
87 QIOSScreen *screen = qtPlatformScreenFor([notification object]);
88 Q_ASSERT_X(screen, Q_FUNC_INFO, "Screen disconnected that we didn't know about");
89
91}
92
93+ (void)screenModeChanged:(NSNotification*)notification
94{
96 return;
97
98 QIOSScreen *screen = qtPlatformScreenFor([notification object]);
99 Q_ASSERT_X(screen, Q_FUNC_INFO, "Screen changed that we didn't know about");
100
101 screen->updateProperties();
102}
103
104@end
105
106// -------------------------------------------------------------------------
107
108@interface QIOSOrientationListener : NSObject
109@end
110
111@implementation QIOSOrientationListener {
112 QIOSScreen *m_screen;
113}
114
115- (instancetype)initWithQIOSScreen:(QIOSScreen *)screen
116{
117 self = [super init];
118 if (self) {
119 m_screen = screen;
120#ifndef Q_OS_TVOS
121 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
122 [[NSNotificationCenter defaultCenter]
123 addObserver:self
124 selector:@selector(orientationChanged:)
125 name:@"UIDeviceOrientationDidChangeNotification" object:nil];
126#endif
127 }
128 return self;
129}
130
131- (void)dealloc
132{
133#ifndef Q_OS_TVOS
134 [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
135 [[NSNotificationCenter defaultCenter]
136 removeObserver:self
137 name:@"UIDeviceOrientationDidChangeNotification" object:nil];
138#endif
139 [super dealloc];
140}
141
142- (void)orientationChanged:(NSNotification *)notification
143{
144 Q_UNUSED(notification);
145 m_screen->updateProperties();
146}
147
148@end
149
150@interface UIScreen (Compatibility)
151@property (nonatomic, readonly) CGRect qt_applicationFrame;
152@end
153
154@implementation UIScreen (Compatibility)
155- (CGRect)qt_applicationFrame
156{
157#ifdef Q_OS_IOS
158 return self.applicationFrame;
159#else
160 return self.bounds;
161#endif
162}
163@end
164
165// -------------------------------------------------------------------------
166
167@implementation QUIWindow
168
169- (instancetype)initWithFrame:(CGRect)frame
170{
171 if ((self = [super initWithFrame:frame]))
172 self->_sendingEvent = NO;
173
174 return self;
175}
176
177- (void)sendEvent:(UIEvent *)event
178{
179 QScopedValueRollback<BOOL> sendingEvent(self->_sendingEvent, YES);
180 [super sendEvent:event];
181}
182
183- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
184{
185 [super traitCollectionDidChange:previousTraitCollection];
186
187 Qt::ColorScheme colorScheme = self.traitCollection.userInterfaceStyle
188 == UIUserInterfaceStyleDark
191
192 if (self.screen == UIScreen.mainScreen) {
193 // Check if the current userInterfaceStyle reports a different appearance than
194 // the platformTheme's appearance. We might have set that one based on the UIScreen
195 if (previousTraitCollection.userInterfaceStyle != self.traitCollection.userInterfaceStyle
196 || QGuiApplicationPrivate::platformTheme()->colorScheme() != colorScheme) {
198 QWindowSystemInterface::handleThemeChange<QWindowSystemInterface::SynchronousDelivery>();
199 }
200 }
201}
202
203@end
204
205// -------------------------------------------------------------------------
206
208
209using namespace Qt::StringLiterals;
210
215{
216#if TARGET_OS_SIMULATOR
217 return QString::fromLocal8Bit(qgetenv("SIMULATOR_MODEL_IDENTIFIER"));
218#else
219 static const char key[] = "hw.machine";
220
221 size_t size;
222 sysctlbyname(key, NULL, &size, NULL, 0);
223
224 char value[size];
225 sysctlbyname(key, &value, &size, NULL, 0);
226
228#endif
229}
230
233 , m_uiScreen(screen)
234 , m_uiWindow(0)
235 , m_orientationListener(0)
236{
237 QString deviceIdentifier = deviceModelIdentifier();
238
239 if (screen == [UIScreen mainScreen] && !deviceIdentifier.startsWith("AppleTV")) {
240 // Based on https://en.wikipedia.org/wiki/List_of_iOS_devices#Display
241
242 // iPhone (1st gen), 3G, 3GS, and iPod Touch (1st–3rd gen) are 18-bit devices
243 static QRegularExpression lowBitDepthDevices("^(iPhone1,[12]|iPhone2,1|iPod[1-3],1)$");
244 m_depth = deviceIdentifier.contains(lowBitDepthDevices) ? 18 : 24;
245
246 static QRegularExpression iPhoneXModels("^iPhone(10,[36])$");
247 static QRegularExpression iPhonePlusModels("^iPhone(7,1|8,2|9,[24]|10,[25])$");
248 static QRegularExpression iPadMiniModels("^iPad(2,[567]|4,[4-9]|5,[12])$");
249
250 if (deviceIdentifier.contains(iPhoneXModels)) {
251 m_physicalDpi = 458;
252 } else if (deviceIdentifier.contains(iPhonePlusModels)) {
253 m_physicalDpi = 401;
254 } else if (deviceIdentifier.startsWith("iPad")) {
255 if (deviceIdentifier.contains(iPadMiniModels))
256 m_physicalDpi = 163 * devicePixelRatio();
257 else
258 m_physicalDpi = 132 * devicePixelRatio();
259 } else {
260 // All normal iPhones, and iPods
261 m_physicalDpi = 163 * devicePixelRatio();
262 }
263 } else {
264 // External display, hard to say
265 m_depth = 24;
266 m_physicalDpi = 96;
267 }
268
270 for (UIWindow *existingWindow in qt_apple_sharedApplication().windows) {
271 if (existingWindow.screen == m_uiScreen) {
272 m_uiWindow = [existingWindow retain];
273 break;
274 }
275 }
276
277 if (!m_uiWindow) {
278 // Create a window and associated view-controller that we can use
279 m_uiWindow = [[QUIWindow alloc] initWithFrame:[m_uiScreen bounds]];
280 m_uiWindow.rootViewController = [[[QIOSViewController alloc] initWithQIOSScreen:this] autorelease];
281 }
282 }
283
284 m_orientationListener = [[QIOSOrientationListener alloc] initWithQIOSScreen:this];
285
287
288 m_displayLink = [m_uiScreen displayLinkWithBlock:^(CADisplayLink *) { deliverUpdateRequests(); }];
289 m_displayLink.paused = YES; // Enabled when clients call QWindow::requestUpdate()
290 [m_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
291}
292
294{
295 [m_displayLink invalidate];
296
297 [m_orientationListener release];
298 [m_uiWindow release];
299}
300
302{
303 if (m_uiScreen == [UIScreen mainScreen])
304 return QString::fromNSString([UIDevice currentDevice].model) + " built-in display"_L1;
305 else
306 return "External display"_L1;
307}
308
310{
311 QRect previousGeometry = m_geometry;
312 QRect previousAvailableGeometry = m_availableGeometry;
313
314 m_geometry = QRectF::fromCGRect(m_uiScreen.bounds).toRect();
315
316 // The application frame doesn't take safe area insets into account, and
317 // the safe area insets are not available before the UIWindow is shown,
318 // and do not take split-view constraints into account, so we have to
319 // combine the two to get the correct available geometry.
320 QRect applicationFrame = QRectF::fromCGRect(m_uiScreen.qt_applicationFrame).toRect();
321 UIEdgeInsets safeAreaInsets = m_uiWindow.qt_safeAreaInsets;
322 m_availableGeometry = m_geometry.adjusted(safeAreaInsets.left, safeAreaInsets.top,
323 -safeAreaInsets.right, -safeAreaInsets.bottom).intersected(applicationFrame);
324
325#ifndef Q_OS_TVOS
326 if (m_uiScreen == [UIScreen mainScreen]) {
327 QIOSViewController *qtViewController = [m_uiWindow.rootViewController isKindOfClass:[QIOSViewController class]] ?
328 static_cast<QIOSViewController *>(m_uiWindow.rootViewController) : nil;
329
330 if (qtViewController.lockedOrientation) {
332
333 // Setting the statusbar orientation (content orientation) on will affect the screen geometry,
334 // which is not what we want. We want to reflect the screen geometry based on the locked orientation,
335 // and adjust the available geometry based on the repositioned status bar for the current status
336 // bar orientation.
337
338 Qt::ScreenOrientation statusBarOrientation = toQtScreenOrientation(
339 UIDeviceOrientation(qt_apple_sharedApplication().statusBarOrientation));
340
341 Qt::ScreenOrientation lockedOrientation = toQtScreenOrientation(UIDeviceOrientation(qtViewController.lockedOrientation));
342 QTransform transform = transformBetween(lockedOrientation, statusBarOrientation, m_geometry).inverted();
343
344 m_geometry = transform.mapRect(m_geometry);
345 m_availableGeometry = transform.mapRect(m_availableGeometry);
346 }
347 }
348#endif
349
350 if (m_geometry != previousGeometry) {
351 // We can't use the primaryOrientation of screen(), as we haven't reported the new geometry yet
352 Qt::ScreenOrientation primaryOrientation = m_geometry.width() >= m_geometry.height() ?
354
355 // On iPhone 6+ devices, or when display zoom is enabled, the render buffer is scaled
356 // before being output on the physical display. We have to take this into account when
357 // computing the physical size. Note that unlike the native bounds, the physical size
358 // follows the primary orientation of the screen.
359 const QRectF physicalGeometry = mapBetween(nativeOrientation(), primaryOrientation, QRectF::fromCGRect(m_uiScreen.nativeBounds).toRect());
360
361 static const qreal millimetersPerInch = 25.4;
362 m_physicalSize = physicalGeometry.size() / m_physicalDpi * millimetersPerInch;
363 }
364
365 // At construction time, we don't yet have an associated QScreen, but we still want
366 // to compute the properties above so they are ready for when the QScreen attaches.
367 // Also, at destruction time the QScreen has already been torn down, so notifying
368 // Qt about changes to the screen will cause asserts in the event delivery system.
369 if (!screen())
370 return;
371
372 if (screen()->orientation() != orientation())
374
375 // Note: The screen orientation change and the geometry changes are not atomic, so when
376 // the former is emitted, the latter has not been reported and reflected in the QScreen
377 // API yet. But conceptually it makes sense that the orientation update happens first,
378 // and the geometry updates caused by auto-rotation happen after that.
379
380 if (m_geometry != previousGeometry || m_availableGeometry != previousAvailableGeometry)
381 QWindowSystemInterface::handleScreenGeometryChange(screen(), m_geometry, m_availableGeometry);
382}
383
385{
386 m_displayLink.paused = paused;
387}
388
389void QIOSScreen::deliverUpdateRequests() const
390{
391 bool pauseUpdates = true;
392
394 for (int i = 0; i < windows.size(); ++i) {
395 QWindow *window = windows.at(i);
396 if (platformScreenForWindow(window) != this)
397 continue;
398
399 QPlatformWindow *platformWindow = window->handle();
400 if (!platformWindow)
401 continue;
402
403 if (!platformWindow->hasPendingUpdateRequest())
404 continue;
405
406 platformWindow->deliverUpdateRequest();
407
408 // Another update request was triggered, keep the display link running
409 if (platformWindow->hasPendingUpdateRequest())
410 pauseUpdates = false;
411 }
412
413 // Pause the display link if there are no pending update requests
414 m_displayLink.paused = pauseUpdates;
415}
416
418{
419 return m_geometry;
420}
421
423{
424 return m_availableGeometry;
425}
426
428{
429 return m_depth;
430}
431
433{
435}
436
438{
439 return m_physicalSize;
440}
441
443{
444 return QDpi(72, 72);
445}
446
448{
449 return [m_uiScreen scale];
450}
451
453{
454 return m_uiScreen.maximumFramesPerSecond;
455}
456
458{
459 CGRect nativeBounds =
460#if defined(Q_OS_IOS)
461 m_uiScreen.nativeBounds;
462#else
463 m_uiScreen.bounds;
464#endif
465
466 // All known iOS devices have a native orientation of portrait, but to
467 // be on the safe side we compare the width and height of the bounds.
468 return nativeBounds.size.width >= nativeBounds.size.height ?
470}
471
473{
474#ifdef Q_OS_TVOS
476#else
477 // Auxiliary screens are always the same orientation as their primary orientation
478 if (m_uiScreen != [UIScreen mainScreen])
480
481 UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
482
483 // At startup, iOS will report an unknown orientation for the device, even
484 // if we've asked it to begin generating device orientation notifications.
485 // In this case we fall back to the status bar orientation, which reflects
486 // the orientation the application was started up in (which may not match
487 // the physical orientation of the device, but typically does unless the
488 // application has been locked to a subset of the available orientations).
489 if (deviceOrientation == UIDeviceOrientationUnknown && !qt_apple_isApplicationExtension())
490 deviceOrientation = UIDeviceOrientation(qt_apple_sharedApplication().statusBarOrientation);
491
492 // If the device reports face up or face down orientations, we can't map
493 // them to Qt orientations, so we pretend we're in the same orientation
494 // as before.
495 if (deviceOrientation == UIDeviceOrientationFaceUp || deviceOrientation == UIDeviceOrientationFaceDown) {
496 Q_ASSERT(screen());
497 return screen()->orientation();
498 }
499
500 return toQtScreenOrientation(deviceOrientation);
501#endif
502}
503
504QPixmap QIOSScreen::grabWindow(WId window, int x, int y, int width, int height) const
505{
506 if (window && ![reinterpret_cast<id>(window) isKindOfClass:[UIView class]])
507 return QPixmap();
508
509 UIView *view = window ? reinterpret_cast<UIView *>(window) : m_uiWindow;
510
511 if (width < 0)
512 width = qMax(view.bounds.size.width - x, CGFloat(0));
513 if (height < 0)
514 height = qMax(view.bounds.size.height - y, CGFloat(0));
515
516 CGRect captureRect = [m_uiWindow convertRect:CGRectMake(x, y, width, height) fromView:view];
517 captureRect = CGRectIntersection(captureRect, m_uiWindow.bounds);
518
519 UIGraphicsBeginImageContextWithOptions(captureRect.size, NO, 0.0);
520 CGContextRef context = UIGraphicsGetCurrentContext();
521 CGContextTranslateCTM(context, -captureRect.origin.x, -captureRect.origin.y);
522
523 // Draws the complete view hierarchy of m_uiWindow into the given rect, which
524 // needs to be the same aspect ratio as the m_uiWindow's size. Since we've
525 // translated the graphics context, and are potentially drawing into a smaller
526 // context than the full window, the resulting image will be a subsection of the
527 // full screen.
528 [m_uiWindow drawViewHierarchyInRect:m_uiWindow.bounds afterScreenUpdates:NO];
529
530 UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
531 UIGraphicsEndImageContext();
532
533 return QPixmap::fromImage(qt_mac_toQImage(screenshot.CGImage));
534}
535
536UIScreen *QIOSScreen::uiScreen() const
537{
538 return m_uiScreen;
539}
540
541UIWindow *QIOSScreen::uiWindow() const
542{
543 return m_uiWindow;
544}
545
547
548#include "moc_qiosscreen.cpp"
static QPlatformTheme * platformTheme()
static QWindowList allWindows()
Returns a list of all the windows in the application.
static QList< QScreen * > screens()
Returns a list of all the screens associated with the windowing system the application is connected t...
static QIOSIntegration * instance()
qreal devicePixelRatio() const override
Reimplement this function in subclass to return the device pixel ratio for the screen.
void setUpdatesPaused(bool)
int depth() const override
Reimplement in subclass to return current depth of the screen.
QRect availableGeometry() const override
Reimplement in subclass to return the pixel geometry of the available space This normally is the desk...
Qt::ScreenOrientation nativeOrientation() const override
Reimplement this function in subclass to return the native orientation of the screen,...
QIOSScreen(UIScreen *screen)
void updateProperties()
qreal refreshRate() const override
Reimplement this function in subclass to return the vertical refresh rate of the screen,...
QImage::Format format() const override
Reimplement in subclass to return the image format which corresponds to the screen format.
QSizeF physicalSize() const override
Reimplement this function in subclass to return the physical size of the screen, in millimeters.
QRect geometry() const override
Reimplement in subclass to return the pixel geometry of the screen.
Qt::ScreenOrientation orientation() const override
Reimplement this function in subclass to return the current orientation of the screen,...
QDpi logicalBaseDpi() const override
Reimplement to return the base logical DPI for the platform.
QPixmap grabWindow(WId window, int x, int y, int width, int height) const override
This function is called when Qt needs to be able to grab the content of a window.
UIWindow * uiWindow() const
UIScreen * uiScreen() const
QString name() const override
static void initializeSystemPalette()
Definition qiostheme.mm:50
Format
The following image formats are available in Qt.
Definition qimage.h:41
@ Format_ARGB32_Premultiplied
Definition qimage.h:48
Definition qlist.h:74
qsizetype size() const noexcept
Definition qlist.h:386
const_reference at(qsizetype i) const noexcept
Definition qlist.h:429
Returns a copy of the pixmap that is transformed using the given transformation transform and transfo...
Definition qpixmap.h:27
static QPixmap fromImage(const QImage &image, Qt::ImageConversionFlags flags=Qt::AutoColor)
Converts the given image to a pixmap using the specified flags to control the conversion.
Definition qpixmap.cpp:1445
The QPlatformScreen class provides an abstraction for visual displays.
static QRect mapBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &rect)
QScreen * screen() const
QWindowList windows() const
Return all windows residing on this screen.
static QTransform transformBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &target)
virtual QString model() const
Reimplement this function in subclass to return the model of this screen.
virtual Qt::ColorScheme colorScheme() const
The QPlatformWindow class provides an abstraction for top-level windows.
bool hasPendingUpdateRequest() const
Returns true if the window has a pending update request.
virtual void deliverUpdateRequest()
Delivers an QEvent::UpdateRequest event to the window.
\inmodule QtCore\reentrant
Definition qrect.h:483
constexpr QSizeF size() const noexcept
Returns the size of the rectangle.
Definition qrect.h:721
\inmodule QtCore\reentrant
Definition qrect.h:30
constexpr int height() const noexcept
Returns the height of the rectangle.
Definition qrect.h:238
QRect intersected(const QRect &other) const noexcept
Definition qrect.h:414
constexpr QRect adjusted(int x1, int y1, int x2, int y2) const noexcept
Returns a new rectangle with dx1, dy1, dx2 and dy2 added respectively to the existing coordinates of ...
Definition qrect.h:369
constexpr int width() const noexcept
Returns the width of the rectangle.
Definition qrect.h:235
\inmodule QtCore \reentrant
The QScreen class is used to query screen properties. \inmodule QtGui.
Definition qscreen.h:32
Qt::ScreenOrientation orientation
the screen orientation
Definition qscreen.h:62
QPlatformScreen * handle() const
Get the platform screen handle.
Definition qscreen.cpp:83
\inmodule QtCore
Definition qsize.h:207
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
bool startsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string starts with s; otherwise returns false.
Definition qstring.cpp:5299
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:5710
static QString fromLocal8Bit(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:5788
bool contains(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition qstring.h:1217
The QTransform class specifies 2D transformations of a coordinate system.
Definition qtransform.h:20
QTransform inverted(bool *invertible=nullptr) const
Returns an inverted copy of this matrix.
static void handleScreenGeometryChange(QScreen *screen, const QRect &newGeometry, const QRect &newAvailableGeometry)
static void handleScreenAdded(QPlatformScreen *screen, bool isPrimary=false)
Should be called by the implementation whenever a new screen is added.
static void handleScreenRemoved(QPlatformScreen *screen)
Should be called by the implementation whenever a screen is removed.
static void handleScreenOrientationChange(QScreen *screen, Qt::ScreenOrientation newOrientation)
\inmodule QtGui
Definition qwindow.h:63
int width
the width of the window's geometry
Definition qwindow.h:82
int height
the height of the window's geometry
Definition qwindow.h:83
p1 load("image.bmp")
UIInterfaceOrientation lockedOrientation
Combined button and popup list for selecting options.
ColorScheme
Definition qnamespace.h:49
ScreenOrientation
Definition qnamespace.h:270
@ LandscapeOrientation
Definition qnamespace.h:273
@ PortraitOrientation
Definition qnamespace.h:272
@ PrimaryOrientation
Definition qnamespace.h:271
QString self
Definition language.cpp:57
static void * context
float CGFloat
#define Q_FUNC_INFO
bool qt_apple_isApplicationExtension()
Definition qcore_mac.mm:423
AppleApplication * qt_apple_sharedApplication()
Definition qcore_mac.mm:430
QImage qt_mac_toQImage(CGImageRef image)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
QPair< qreal, qreal > QDpi
Qt::ScreenOrientation toQtScreenOrientation(UIDeviceOrientation uiDeviceOrientation)
Definition qiosglobal.mm:33
static QString deviceModelIdentifier()
Returns the model identifier of the device.
void(^ DisplayLinkBlock)(CADisplayLink *displayLink)
Definition qiosscreen.mm:26
static QIOSScreen * qtPlatformScreenFor(UIScreen *uiScreen)
Definition qiosscreen.mm:47
constexpr const T & qMax(const T &a, const T &b)
Definition qminmax.h:42
GLint GLint GLint GLint GLint x
[0]
GLuint64 key
GLint GLsizei GLsizei height
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei width
GLint y
GLuint GLenum GLenum transform
GLuint in
struct CGContext * CGContextRef
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define Q_ASSERT_X(cond, x, msg)
Definition qrandom.cpp:48
QScreen * screen
[1]
Definition main.cpp:29
Q_CORE_EXPORT QByteArray qgetenv(const char *varName)
#define Q_UNUSED(x)
ptrdiff_t qsizetype
Definition qtypes.h:70
double qreal
Definition qtypes.h:92
aWidget window() -> setWindowTitle("New Window Title")
[2]
QFrame frame
[0]
QQuickView * view
[0]