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:
parent
d5d3f5ea8e
commit
70774d021a
@ -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 \
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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];
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user