summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforms/ios/qiosviewcontroller.h8
-rw-r--r--src/plugins/platforms/ios/qiosviewcontroller.mm26
-rw-r--r--src/plugins/platforms/ios/qioswindow.h1
-rw-r--r--src/plugins/platforms/ios/qioswindow.mm17
4 files changed, 48 insertions, 4 deletions
diff --git a/src/plugins/platforms/ios/qiosviewcontroller.h b/src/plugins/platforms/ios/qiosviewcontroller.h
index d5a61cb3f4..780ec7adab 100644
--- a/src/plugins/platforms/ios/qiosviewcontroller.h
+++ b/src/plugins/platforms/ios/qiosviewcontroller.h
@@ -40,7 +40,13 @@
****************************************************************************/
#import <UIKit/UIKit.h>
+#import <QtCore/qnamespace.h>
-@interface QIOSViewController : UIViewController
+@interface QIOSViewController : UIViewController {
+@public
+ bool m_shouldAutorotate;
+}
+
+-(bool)rotateToDeviceOrientation;
@end
diff --git a/src/plugins/platforms/ios/qiosviewcontroller.mm b/src/plugins/platforms/ios/qiosviewcontroller.mm
index 5381b3a21e..8b1a085cc5 100644
--- a/src/plugins/platforms/ios/qiosviewcontroller.mm
+++ b/src/plugins/platforms/ios/qiosviewcontroller.mm
@@ -43,12 +43,32 @@
@implementation QIOSViewController
-- (BOOL)shouldAutorotate
+-(id)init
{
- return NO;
+ self = [super init];
+ if (self) {
+ m_shouldAutorotate = NO;
+ }
+ return self;
}
-- (NSUInteger)supportedInterfaceOrientations
+-(bool)rotateToDeviceOrientation
+{
+ if ([UIViewController respondsToSelector:@selector(attemptRotationToDeviceOrientation)]) {
+ m_shouldAutorotate = YES;
+ [UIViewController attemptRotationToDeviceOrientation];
+ m_shouldAutorotate = NO;
+ return true;
+ }
+ return false;
+}
+
+-(BOOL)shouldAutorotate
+{
+ return m_shouldAutorotate;
+}
+
+-(NSUInteger)supportedInterfaceOrientations
{
// We need to tell iOS that we support all orientations in order to set
// status bar orientation when application content orientation changes.
diff --git a/src/plugins/platforms/ios/qioswindow.h b/src/plugins/platforms/ios/qioswindow.h
index b20c1c4fc5..e4c3a6a17c 100644
--- a/src/plugins/platforms/ios/qioswindow.h
+++ b/src/plugins/platforms/ios/qioswindow.h
@@ -87,6 +87,7 @@ public:
void setWindowState(Qt::WindowState state);
void handleContentOrientationChange(Qt::ScreenOrientation orientation);
+ Qt::ScreenOrientation requestWindowOrientation(Qt::ScreenOrientation orientation);
GLuint framebufferObject(const QIOSContext &context) const;
diff --git a/src/plugins/platforms/ios/qioswindow.mm b/src/plugins/platforms/ios/qioswindow.mm
index e220312d15..c1f14f22ef 100644
--- a/src/plugins/platforms/ios/qioswindow.mm
+++ b/src/plugins/platforms/ios/qioswindow.mm
@@ -44,6 +44,7 @@
#include "qiosscreen.h"
#include "qiosapplicationdelegate.h"
#include "qiosorientationlistener.h"
+#include "qiosviewcontroller.h"
#import <QuartzCore/CAEAGLLayer.h>
@@ -257,6 +258,22 @@ void QIOSWindow::handleContentOrientationChange(Qt::ScreenOrientation orientatio
[[UIApplication sharedApplication] setStatusBarOrientation:uiOrientation animated:NO];
}
+Qt::ScreenOrientation QIOSWindow::requestWindowOrientation(Qt::ScreenOrientation orientation)
+{
+ if (!m_view.window)
+ return Qt::PortraitOrientation;
+ UIViewController *viewController = m_view.window.rootViewController;
+ if (!viewController || [viewController isKindOfClass:[QIOSViewController class]] == false) {
+ return convertToQtOrientation(viewController.interfaceOrientation);
+ } else {
+ QIOSViewController *qiosViewController = static_cast<QIOSViewController *>(viewController);
+ if ([qiosViewController rotateToDeviceOrientation])
+ return orientation;
+ else
+ return convertToQtOrientation(viewController.interfaceOrientation);
+ }
+}
+
GLuint QIOSWindow::framebufferObject(const QIOSContext &context) const
{
static GLuint framebuffer = 0;