summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard Moe Gustavsen <richard.gustavsen@digia.com>2012-12-17 10:59:45 +0100
committerTor Arne Vestbø <tor.arne.vestbo@digia.com>2013-02-27 23:55:54 +0100
commit70774d021a4ddb6437646ab09bde0928e30c8a90 (patch)
tree882585d10a3db42b426694de7dbe89c0c834fdc9 /src
parentd5d3f5ea8e6620e1ae06488a9e35a36550367726 (diff)
iOS: refactor QIOSOrientationListener into QIOSScreen
Clean up a bit. The orientation conversion functions belongs to QIOSScreen more than QIOSOrientationListener. And rename them in the same go to follow toQRect/fromQRect standard. The orientation listener itself is tightly coupled to QIOSScreen, and does not make much sense on its own, so move it into QIOSScreen to follow the same patteren already implemented for QIOSInputContext. Change-Id: I8b6b4d08a42349b4232749d59d46748297083536 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/ios/plugin.pro2
-rw-r--r--src/plugins/platforms/ios/qiosorientationlistener.h66
-rw-r--r--src/plugins/platforms/ios/qiosorientationlistener.mm130
-rw-r--r--src/plugins/platforms/ios/qiosscreen.h6
-rw-r--r--src/plugins/platforms/ios/qiosscreen.mm90
-rw-r--r--src/plugins/platforms/ios/qiosviewcontroller.mm2
-rw-r--r--src/plugins/platforms/ios/qioswindow.mm3
7 files changed, 96 insertions, 203 deletions
diff --git a/src/plugins/platforms/ios/plugin.pro b/src/plugins/platforms/ios/plugin.pro
index 1be24d920d..a51ac39e03 100644
--- a/src/plugins/platforms/ios/plugin.pro
+++ b/src/plugins/platforms/ios/plugin.pro
@@ -14,7 +14,6 @@ OBJECTIVE_SOURCES = \
qioseventdispatcher.mm \
qiosbackingstore.mm \
qiosapplicationdelegate.mm \
- qiosorientationlistener.mm \
qiosviewcontroller.mm \
qioscontext.mm \
qiosinputcontext.mm \
@@ -27,7 +26,6 @@ HEADERS = \
qioseventdispatcher.h \
qiosbackingstore.h \
qiosapplicationdelegate.h \
- qiosorientationlistener.h \
qiosviewcontroller.h \
qioscontext.h \
qiosinputcontext.h \
diff --git a/src/plugins/platforms/ios/qiosorientationlistener.h b/src/plugins/platforms/ios/qiosorientationlistener.h
deleted file mode 100644
index 9d2e902ce1..0000000000
--- a/src/plugins/platforms/ios/qiosorientationlistener.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QIOSORIENTATIONLISTENER_H
-#define QIOSORIENTATIONLISTENER_H
-
-#include <UIKit/UIKit.h>
-#include <qpa/qplatformscreen.h>
-
-QT_BEGIN_NAMESPACE
-
-class QIOSScreen;
-Qt::ScreenOrientation convertToQtOrientation(UIDeviceOrientation uiDeviceOrientation);
-UIDeviceOrientation convertToUIOrientation(Qt::ScreenOrientation qtOrientation);
-
-QT_END_NAMESPACE
-
-@interface QIOSOrientationListener : NSObject {
- @public
- QIOSScreen *m_screen;
- Qt::ScreenOrientation m_orientation;
-}
-- (id) initWithQIOSScreen:(QIOSScreen *)screen;
-
-@end
-
-#endif
-
diff --git a/src/plugins/platforms/ios/qiosorientationlistener.mm b/src/plugins/platforms/ios/qiosorientationlistener.mm
deleted file mode 100644
index 264b77f14f..0000000000
--- a/src/plugins/platforms/ios/qiosorientationlistener.mm
+++ /dev/null
@@ -1,130 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qiosorientationlistener.h"
-#include "qiosscreen.h"
-#include <qpa/qwindowsysteminterface.h>
-
-QT_BEGIN_NAMESPACE
-
-Qt::ScreenOrientation convertToQtOrientation(UIDeviceOrientation uiDeviceOrientation)
-{
- Qt::ScreenOrientation qtOrientation;
- switch (uiDeviceOrientation) {
- case UIDeviceOrientationPortraitUpsideDown:
- qtOrientation = Qt::InvertedPortraitOrientation;
- break;
- case UIDeviceOrientationLandscapeLeft:
- qtOrientation = Qt::InvertedLandscapeOrientation;
- break;
- case UIDeviceOrientationLandscapeRight:
- qtOrientation = Qt::LandscapeOrientation;
- break;
- case UIDeviceOrientationFaceUp:
- case UIDeviceOrientationFaceDown:
- qtOrientation = static_cast<Qt::ScreenOrientation>(-1); // not supported ATM.
- break;
- default:
- qtOrientation = Qt::PortraitOrientation;
- break;
- }
- return qtOrientation;
-}
-
-UIDeviceOrientation convertToUIOrientation(Qt::ScreenOrientation qtOrientation)
-{
- UIDeviceOrientation uiOrientation;
- switch (qtOrientation) {
- case Qt::LandscapeOrientation:
- uiOrientation = UIDeviceOrientationLandscapeRight;
- break;
- case Qt::InvertedLandscapeOrientation:
- uiOrientation = UIDeviceOrientationLandscapeLeft;
- break;
- case Qt::InvertedPortraitOrientation:
- uiOrientation = UIDeviceOrientationPortraitUpsideDown;
- break;
- case Qt::PrimaryOrientation:
- case Qt::PortraitOrientation:
- default:
- uiOrientation = UIDeviceOrientationPortrait;
- break;
- }
- return uiOrientation;
-}
-
-QT_END_NAMESPACE
-
-@implementation QIOSOrientationListener
-
-- (id) initWithQIOSScreen:(QIOSScreen *)screen
-{
- self = [super init];
- if (self) {
- m_screen = screen;
- m_orientation = convertToQtOrientation([UIDevice currentDevice].orientation);
- [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
- [[NSNotificationCenter defaultCenter]
- addObserver:self
- selector:@selector(orientationChanged:)
- name:@"UIDeviceOrientationDidChangeNotification" object:nil];
- }
- return self;
-}
-
-- (void) dealloc
-{
- [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
- [super dealloc];
-}
-
-- (void) orientationChanged:(NSNotification *)notification
-{
- Q_UNUSED(notification);
- Qt::ScreenOrientation qtOrientation = convertToQtOrientation([UIDevice currentDevice].orientation);
- if (qtOrientation != -1) {
- m_orientation = qtOrientation;
- QWindowSystemInterface::handleScreenOrientationChange(m_screen->screen(), m_orientation);
- }
-}
-
-@end
-
diff --git a/src/plugins/platforms/ios/qiosscreen.h b/src/plugins/platforms/ios/qiosscreen.h
index e05a6cd6a1..17a5c3149a 100644
--- a/src/plugins/platforms/ios/qiosscreen.h
+++ b/src/plugins/platforms/ios/qiosscreen.h
@@ -45,10 +45,14 @@
#include <UIKit/UIKit.h>
#include <qpa/qplatformscreen.h>
-#include <qiosorientationlistener.h>
+
+@class QIOSOrientationListener;
QT_BEGIN_NAMESPACE
+Qt::ScreenOrientation toQtScreenOrientation(UIDeviceOrientation uiDeviceOrientation);
+UIDeviceOrientation fromQtScreenOrientation(Qt::ScreenOrientation qtOrientation);
+
class QIOSScreen : public QPlatformScreen
{
public:
diff --git a/src/plugins/platforms/ios/qiosscreen.mm b/src/plugins/platforms/ios/qiosscreen.mm
index f4cade2e6d..02d719eaf1 100644
--- a/src/plugins/platforms/ios/qiosscreen.mm
+++ b/src/plugins/platforms/ios/qiosscreen.mm
@@ -45,8 +45,96 @@
#include <sys/sysctl.h>
+@interface QIOSOrientationListener : NSObject {
+ @public
+ QIOSScreen *m_screen;
+}
+- (id) initWithQIOSScreen:(QIOSScreen *)screen;
+@end
+
+@implementation QIOSOrientationListener
+
+- (id) initWithQIOSScreen:(QIOSScreen *)screen
+{
+ self = [super init];
+ if (self) {
+ m_screen = screen;
+ [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
+ [[NSNotificationCenter defaultCenter]
+ addObserver:self
+ selector:@selector(orientationChanged:)
+ name:@"UIDeviceOrientationDidChangeNotification" object:nil];
+ }
+ return self;
+}
+
+- (void) dealloc
+{
+ [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
+ [[NSNotificationCenter defaultCenter]
+ removeObserver:self
+ name:@"UIDeviceOrientationDidChangeNotification" object:nil];
+ [super dealloc];
+}
+
+- (void) orientationChanged:(NSNotification *)notification
+{
+ Q_UNUSED(notification);
+ Qt::ScreenOrientation orientation = toQtScreenOrientation([UIDevice currentDevice].orientation);
+ if (orientation != -1)
+ QWindowSystemInterface::handleScreenOrientationChange(m_screen->screen(), orientation);
+}
+
+@end
+
QT_BEGIN_NAMESPACE
+Qt::ScreenOrientation toQtScreenOrientation(UIDeviceOrientation uiDeviceOrientation)
+{
+ Qt::ScreenOrientation qtOrientation;
+ switch (uiDeviceOrientation) {
+ case UIDeviceOrientationPortraitUpsideDown:
+ qtOrientation = Qt::InvertedPortraitOrientation;
+ break;
+ case UIDeviceOrientationLandscapeLeft:
+ qtOrientation = Qt::InvertedLandscapeOrientation;
+ break;
+ case UIDeviceOrientationLandscapeRight:
+ qtOrientation = Qt::LandscapeOrientation;
+ break;
+ case UIDeviceOrientationFaceUp:
+ case UIDeviceOrientationFaceDown:
+ qtOrientation = static_cast<Qt::ScreenOrientation>(-1); // not supported ATM.
+ break;
+ default:
+ qtOrientation = Qt::PortraitOrientation;
+ break;
+ }
+ return qtOrientation;
+}
+
+UIDeviceOrientation fromQtScreenOrientation(Qt::ScreenOrientation qtOrientation)
+{
+ UIDeviceOrientation uiOrientation;
+ switch (qtOrientation) {
+ case Qt::LandscapeOrientation:
+ uiOrientation = UIDeviceOrientationLandscapeRight;
+ break;
+ case Qt::InvertedLandscapeOrientation:
+ uiOrientation = UIDeviceOrientationLandscapeLeft;
+ break;
+ case Qt::InvertedPortraitOrientation:
+ uiOrientation = UIDeviceOrientationPortraitUpsideDown;
+ break;
+ case Qt::PrimaryOrientation:
+ case Qt::PortraitOrientation:
+ default:
+ uiOrientation = UIDeviceOrientationPortrait;
+ break;
+ }
+ return uiOrientation;
+}
+
/*!
Returns the model identifier of the device.
@@ -137,7 +225,7 @@ Qt::ScreenOrientation QIOSScreen::nativeOrientation() const
Qt::ScreenOrientation QIOSScreen::orientation() const
{
- return m_orientationListener ? m_orientationListener->m_orientation : nativeOrientation();
+ return toQtScreenOrientation([UIDevice currentDevice].orientation);
}
void QIOSScreen::setOrientationUpdateMask(Qt::ScreenOrientations mask)
diff --git a/src/plugins/platforms/ios/qiosviewcontroller.mm b/src/plugins/platforms/ios/qiosviewcontroller.mm
index fe9e02666f..8c280d11d9 100644
--- a/src/plugins/platforms/ios/qiosviewcontroller.mm
+++ b/src/plugins/platforms/ios/qiosviewcontroller.mm
@@ -69,7 +69,7 @@
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
Q_UNUSED(fromInterfaceOrientation);
- Qt::ScreenOrientation orientation = convertToQtOrientation(self.interfaceOrientation);
+ Qt::ScreenOrientation orientation = toQtScreenOrientation(self.interfaceOrientation);
if (orientation == -1)
return;
diff --git a/src/plugins/platforms/ios/qioswindow.mm b/src/plugins/platforms/ios/qioswindow.mm
index a2901efd1d..cc016da106 100644
--- a/src/plugins/platforms/ios/qioswindow.mm
+++ b/src/plugins/platforms/ios/qioswindow.mm
@@ -43,7 +43,6 @@
#include "qioscontext.h"
#include "qiosscreen.h"
#include "qiosapplicationdelegate.h"
-#include "qiosorientationlistener.h"
#include "qiosviewcontroller.h"
#import <QuartzCore/CAEAGLLayer.h>
@@ -272,7 +271,7 @@ void QIOSWindow::handleContentOrientationChange(Qt::ScreenOrientation orientatio
{
// Keep the status bar in sync with content orientation. This will ensure
// that the task bar (and associated gestures) are aligned correctly:
- UIDeviceOrientation uiOrientation = convertToUIOrientation(orientation);
+ UIDeviceOrientation uiOrientation = fromQtScreenOrientation(orientation);
[[UIApplication sharedApplication] setStatusBarOrientation:uiOrientation animated:NO];
}