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>
This commit is contained in:
Richard Moe Gustavsen 2012-12-17 10:59:45 +01:00 committed by Tor Arne Vestbø
parent d5d3f5ea8e
commit 70774d021a
7 changed files with 96 additions and 203 deletions

View File

@ -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 \

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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)

View File

@ -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;

View File

@ -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];
}