summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>2015-03-11 21:25:09 +0100
committerTor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>2015-03-16 13:52:41 +0000
commit7212b52e85f254cb079698ee2d63b0444a900466 (patch)
treec735aa048012fa43bac3f948768f45fb321189a3 /src/plugins
parentbf1e0b6008227f3a0c0e5dce4cde64c57c4a6839 (diff)
iOS: Clarify implementation of QIOSWindow::isExposed()
We treat windows as exposed even if the application state is still inactive (e.g. during startup), otherwise there's a visible moment of black screen between the launch screen fading out and the app rendering its first pixel. Change-Id: I48368459a8a46fa1c5b2853ea88adfe1ac61b6f7 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/ios/qioswindow.mm19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/plugins/platforms/ios/qioswindow.mm b/src/plugins/platforms/ios/qioswindow.mm
index b22fa4ec58..95a4c28246 100644
--- a/src/plugins/platforms/ios/qioswindow.mm
+++ b/src/plugins/platforms/ios/qioswindow.mm
@@ -206,6 +206,25 @@ void QIOSWindow::applyGeometry(const QRect &rect)
bool QIOSWindow::isExposed() const
{
+ // Note: At startup of an iOS app it will enter UIApplicationStateInactive
+ // while showing the launch screen, and once the application returns from
+ // applicationDidFinishLaunching it will hide the launch screen and enter
+ // UIApplicationStateActive. Technically, a window is not exposed until
+ // it's actually visible on screen, and Apple also documents that "Apps
+ // that use OpenGL ES for drawing must not use didFinishLaunching to
+ // prepare their drawing environment. Instead, defer any OpenGL ES
+ // drawing calls to applicationDidBecomeActive". Unfortunately, if we
+ // wait until the applicationState reaches ApplicationActive to signal
+ // that the window is exposed, we get a lag between hiding the launch
+ // screen and blitting the first pixels of the application, as Qt
+ // spends some time drawing those pixels in response to the expose.
+ // In practice there doesn't seem to be any issues starting GL setup
+ // and drawing from within applicationDidFinishLaunching, and this is
+ // also the recommended approach for other 3rd party GL toolkits on iOS,
+ // so we 'cheat', and report that a window is exposed even if the app
+ // is in UIApplicationStateInactive, so that the startup transition
+ // between the launch screen and the application content is smooth.
+
return qApp->applicationState() > Qt::ApplicationHidden
&& window()->isVisible() && !window()->geometry().isEmpty();
}