diff options
author | Richard Moe Gustavsen <richard.gustavsen@digia.com> | 2012-12-18 12:50:50 +0100 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@digia.com> | 2013-02-27 23:55:56 +0100 |
commit | b960424195634c00673d499e4719ccb4f8704ad0 (patch) | |
tree | 92dbe82a5ce08f2392423258f0176d7d157587a2 /src | |
parent | 5abe9aa435c316b845f4cf5f6a930eefd449f4e1 (diff) |
iOS: add global function 'isQtApplication'
Several places in the code we need to check if the plugin is
running as a cross-platform Qt application or inside a
native app. So we refactor this function to qiosglobal so
we can access it from everywhere.
Change-Id: I78db0dcde71b7d281868ce304867c8f876caef2a
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/ios/qiosglobal.h | 1 | ||||
-rw-r--r-- | src/plugins/platforms/ios/qiosglobal.mm | 13 | ||||
-rw-r--r-- | src/plugins/platforms/ios/qiosscreen.mm | 2 | ||||
-rw-r--r-- | src/plugins/platforms/ios/qioswindow.mm | 2 |
4 files changed, 16 insertions, 2 deletions
diff --git a/src/plugins/platforms/ios/qiosglobal.h b/src/plugins/platforms/ios/qiosglobal.h index cf4c89cfad..7a23a2a485 100644 --- a/src/plugins/platforms/ios/qiosglobal.h +++ b/src/plugins/platforms/ios/qiosglobal.h @@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE +bool isQtApplication(); CGRect toCGRect(const QRect &rect); QRect fromCGRect(const CGRect &rect); Qt::ScreenOrientation toQtScreenOrientation(UIDeviceOrientation uiDeviceOrientation); diff --git a/src/plugins/platforms/ios/qiosglobal.mm b/src/plugins/platforms/ios/qiosglobal.mm index 30138acc1b..a8a89a1637 100644 --- a/src/plugins/platforms/ios/qiosglobal.mm +++ b/src/plugins/platforms/ios/qiosglobal.mm @@ -40,10 +40,23 @@ ****************************************************************************/ #include "qiosglobal.h" +#include "qiosapplicationdelegate.h" #include <QtGui/qscreen.h> QT_BEGIN_NAMESPACE +bool isQtApplication() +{ + // Returns true if the plugin is in full control of the whole application. This means + // that we control the application delegate and the top view controller, and can take + // actions that impacts all parts of the application. The opposite means that we are + // embedded inside a native iOS application, and should be more focused on playing along + // with native UIControls, and less inclined to change structures that lies outside the + // scope of our QWindows/UIViews. + static bool isQt = ([[UIApplication sharedApplication].delegate isKindOfClass:[QIOSApplicationDelegate class]]); + return isQt; +} + CGRect toCGRect(const QRect &rect) { return CGRectMake(rect.x(), rect.y(), rect.width(), rect.height()); diff --git a/src/plugins/platforms/ios/qiosscreen.mm b/src/plugins/platforms/ios/qiosscreen.mm index 87ddc63f4a..fdf2f31ea1 100644 --- a/src/plugins/platforms/ios/qiosscreen.mm +++ b/src/plugins/platforms/ios/qiosscreen.mm @@ -139,7 +139,7 @@ QIOSScreen::QIOSScreen(unsigned int screenIndex) const qreal millimetersPerInch = 25.4; m_physicalSize = QSizeF(m_geometry.size()) / unscaledDpi * millimetersPerInch; - if ([[UIApplication sharedApplication].delegate isKindOfClass:[QIOSApplicationDelegate class]]) { + if (isQtApplication()) { // When in a non-mixed environment, let QScreen follow the current interface orientation: UIViewController *controller = [UIApplication sharedApplication].delegate.window.rootViewController; setPrimaryOrientation(toQtScreenOrientation(controller.interfaceOrientation)); diff --git a/src/plugins/platforms/ios/qioswindow.mm b/src/plugins/platforms/ios/qioswindow.mm index 9b10ba4e1c..af184e2e7b 100644 --- a/src/plugins/platforms/ios/qioswindow.mm +++ b/src/plugins/platforms/ios/qioswindow.mm @@ -196,7 +196,7 @@ QIOSWindow::QIOSWindow(QWindow *window) , m_glData() , m_devicePixelRatio(1.0) { - if ([[UIApplication sharedApplication].delegate isKindOfClass:[QIOSApplicationDelegate class]]) + if (isQtApplication()) [[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:m_view]; setWindowState(window->windowState()); |