iOS: copy brute-force port of Qt4 uikit plugin into Qt5.
The plugin has been renamed from uikit to ios. Other than that, the plugin will now build, but do nothing. Most of the Qt4 code is preserved, with a rough translation into the Qt5 qpa API. A lot of code has simply been commented out so far, and most lacking at the moment is the event dispatcher which will need to be rewritten, and the opengl paint device implementation. But it should suffice as a starting ground. Also: The plugin will currently not automatically build when building Qt, this needs to be enabled from configure first. Change-Id: I0d229a453a8477618e06554655bffc5505203b44 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
This commit is contained in:
parent
6382105f3d
commit
8cbdb25ee6
3
src/plugins/platforms/ios/ios.json
Normal file
3
src/plugins/platforms/ios/ios.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"Keys": [ "ios" ]
|
||||
}
|
27
src/plugins/platforms/ios/ios.pro
Normal file
27
src/plugins/platforms/ios/ios.pro
Normal file
@ -0,0 +1,27 @@
|
||||
TARGET = qios
|
||||
include(../../qpluginbase.pri)
|
||||
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
|
||||
|
||||
QT += opengl
|
||||
QT += core-private gui-private platformsupport-private opengl-private widgets-private
|
||||
LIBS += -framework Cocoa -framework UIKit
|
||||
|
||||
OBJECTIVE_SOURCES = main.mm \
|
||||
qiosintegration.mm \
|
||||
qioswindow.mm \
|
||||
qiosscreen.mm \
|
||||
qioseventdispatcher.mm \
|
||||
qiosbackingstore.mm
|
||||
|
||||
OBJECTIVE_HEADERS = qiosintegration.h \
|
||||
qioswindow.h \
|
||||
qiosscreen.h \
|
||||
qioseventdispatcher.h \
|
||||
qiosbackingstore.h
|
||||
|
||||
#HEADERS = qiossoftwareinputhandler.h
|
||||
|
||||
#include(../fontdatabases/coretext/coretext.pri)
|
||||
|
||||
target.path += $$[QT_INSTALL_PLUGINS]/platforms
|
||||
INSTALLS += target
|
69
src/plugins/platforms/ios/main.mm
Normal file
69
src/plugins/platforms/ios/main.mm
Normal file
@ -0,0 +1,69 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <qpa/qplatformintegrationplugin.h>
|
||||
#include <qpa/qplatformthemeplugin.h>
|
||||
#include "qiosintegration.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QIOSIntegrationPlugin : public QPlatformIntegrationPlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.1" FILE "ios.json")
|
||||
public:
|
||||
QPlatformIntegration *create(const QString&, const QStringList&);
|
||||
};
|
||||
|
||||
QPlatformIntegration * QIOSIntegrationPlugin::create(const QString& system, const QStringList& paramList)
|
||||
{
|
||||
Q_UNUSED(paramList);
|
||||
if (system.toLower() == "ios")
|
||||
return new QIOSIntegration;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#include "main.moc"
|
||||
|
||||
|
65
src/plugins/platforms/ios/qiosbackingstore.h
Normal file
65
src/plugins/platforms/ios/qiosbackingstore.h
Normal file
@ -0,0 +1,65 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QIOSBACKINGSTORE_H
|
||||
#define QIOSBACKINGSTORE_H
|
||||
|
||||
#include <qpa/qplatformintegration.h>
|
||||
#include <qpa/qplatformbackingstore.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QIOSBackingStore : public QPlatformBackingStore
|
||||
{
|
||||
public:
|
||||
QIOSBackingStore(QWindow *window);
|
||||
|
||||
QPaintDevice *paintDevice();
|
||||
void flush(QWindow *window, const QRegion ®ion, const QPoint &offset);
|
||||
void resize(const QSize &size, const QRegion &staticContents);
|
||||
|
||||
private:
|
||||
QPaintDevice *mPaintDevice;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QIOSBACKINGSTORE_H
|
139
src/plugins/platforms/ios/qiosbackingstore.mm
Normal file
139
src/plugins/platforms/ios/qiosbackingstore.mm
Normal file
@ -0,0 +1,139 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qiosbackingstore.h"
|
||||
#include "qioswindow.h"
|
||||
|
||||
#include <QtOpenGL/private/qgl_p.h>
|
||||
#include <QtOpenGL/private/qglpaintdevice_p.h>
|
||||
|
||||
#include <QtDebug>
|
||||
|
||||
class EAGLPaintDevice;
|
||||
|
||||
@interface PaintDeviceHelper : NSObject {
|
||||
EAGLPaintDevice *device;
|
||||
}
|
||||
|
||||
@property (nonatomic, assign) EAGLPaintDevice *device;
|
||||
|
||||
- (void)eaglView:(EAGLView *)view usesFramebuffer:(GLuint)buffer;
|
||||
|
||||
@end
|
||||
|
||||
class EAGLPaintDevice : public QGLPaintDevice
|
||||
{
|
||||
public:
|
||||
EAGLPaintDevice(QWindow *window)
|
||||
:QGLPaintDevice(), mWindow(window)
|
||||
{
|
||||
#if defined(QT_OPENGL_ES_2)
|
||||
helper = [[PaintDeviceHelper alloc] init];
|
||||
helper.device = this;
|
||||
EAGLView *view = static_cast<QIOSWindow *>(window->handle())->nativeView();
|
||||
view.delegate = helper;
|
||||
m_thisFBO = view.fbo;
|
||||
#endif
|
||||
}
|
||||
|
||||
~EAGLPaintDevice()
|
||||
{
|
||||
#if defined(QT_OPENGL_ES_2)
|
||||
[helper release];
|
||||
#endif
|
||||
}
|
||||
|
||||
void setFramebuffer(GLuint buffer) { m_thisFBO = buffer; }
|
||||
int devType() const { return QInternal::OpenGL; }
|
||||
QSize size() const { return mWindow->geometry().size(); }
|
||||
QGLContext* context() const {
|
||||
// Todo: siplify this:
|
||||
return QGLContext::fromOpenGLContext(
|
||||
static_cast<QIOSWindow *>(mWindow->handle())->glContext()->context());
|
||||
}
|
||||
|
||||
QPaintEngine *paintEngine() const { return qt_qgl_paint_engine(); }
|
||||
|
||||
private:
|
||||
QWindow *mWindow;
|
||||
PaintDeviceHelper *helper;
|
||||
};
|
||||
|
||||
@implementation PaintDeviceHelper
|
||||
@synthesize device;
|
||||
|
||||
- (void)eaglView:(EAGLView *)view usesFramebuffer:(GLuint)buffer
|
||||
{
|
||||
Q_UNUSED(view)
|
||||
if (device)
|
||||
device->setFramebuffer(buffer);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QIOSBackingStore::QIOSBackingStore(QWindow *window)
|
||||
: QPlatformBackingStore(window), mPaintDevice(new EAGLPaintDevice(window))
|
||||
{
|
||||
}
|
||||
|
||||
QPaintDevice *QIOSBackingStore::paintDevice()
|
||||
{
|
||||
return mPaintDevice;
|
||||
}
|
||||
|
||||
void QIOSBackingStore::flush(QWindow *window, const QRegion ®ion, const QPoint &offset)
|
||||
{
|
||||
Q_UNUSED(region);
|
||||
Q_UNUSED(offset);
|
||||
qDebug() << __FUNCTION__ << "not implemented";
|
||||
//static_cast<QIOSWindow *>(window->handle())->glContext()->swapBuffers();
|
||||
}
|
||||
|
||||
void QIOSBackingStore::resize(const QSize &size, const QRegion &staticContents)
|
||||
{
|
||||
Q_UNUSED(size);
|
||||
Q_UNUSED(staticContents);
|
||||
qDebug() << __FUNCTION__ << "not implemented";
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
110
src/plugins/platforms/ios/qioseventdispatcher.h
Normal file
110
src/plugins/platforms/ios/qioseventdispatcher.h
Normal file
@ -0,0 +1,110 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 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$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (c) 2007-2008, Apple, Inc.
|
||||
**
|
||||
** All rights reserved.
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are met:
|
||||
**
|
||||
** * Redistributions of source code must retain the above copyright notice,
|
||||
** this list of conditions and the following disclaimer.
|
||||
**
|
||||
** * Redistributions in binary form must reproduce the above copyright notice,
|
||||
** this list of conditions and the following disclaimer in the documentation
|
||||
** and/or other materials provided with the distribution.
|
||||
**
|
||||
** * Neither the name of Apple, Inc. nor the names of its contributors
|
||||
** may be used to endorse or promote products derived from this software
|
||||
** without specific prior written permission.
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
** PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
** LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
** NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QEVENTDISPATCHER_IOS_P_H
|
||||
#define QEVENTDISPATCHER_IOS_P_H
|
||||
|
||||
#include <QtCore/qabstracteventdispatcher.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QIOSEventDispatcher : public QAbstractEventDispatcher
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit QIOSEventDispatcher(QObject *parent = 0); ~QIOSEventDispatcher();
|
||||
|
||||
bool processEvents(QEventLoop::ProcessEventsFlags flags);
|
||||
bool hasPendingEvents();
|
||||
|
||||
void registerSocketNotifier(QSocketNotifier *notifier);
|
||||
void unregisterSocketNotifier(QSocketNotifier *notifier);
|
||||
|
||||
void registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object);
|
||||
bool unregisterTimer(int timerId);
|
||||
bool unregisterTimers(QObject *object);
|
||||
QList<QAbstractEventDispatcher::TimerInfo> registeredTimers(QObject *object) const;
|
||||
|
||||
int remainingTime(int timerId);
|
||||
|
||||
void wakeUp();
|
||||
void interrupt();
|
||||
void flush();
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QEVENTDISPATCHER_IOS_P_H
|
154
src/plugins/platforms/ios/qioseventdispatcher.mm
Normal file
154
src/plugins/platforms/ios/qioseventdispatcher.mm
Normal file
@ -0,0 +1,154 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 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$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (c) 2007-2008, Apple, Inc.
|
||||
**
|
||||
** All rights reserved.
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are met:
|
||||
**
|
||||
** * Redistributions of source code must retain the above copyright notice,
|
||||
** this list of conditions and the following disclaimer.
|
||||
**
|
||||
** * Redistributions in binary form must reproduce the above copyright notice,
|
||||
** this list of conditions and the following disclaimer in the documentation
|
||||
** and/or other materials provided with the distribution.
|
||||
**
|
||||
** * Neither the name of Apple, Inc. nor the names of its contributors
|
||||
** may be used to endorse or promote products derived from this software
|
||||
** without specific prior written permission.
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
** PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
** LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
** NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qioseventdispatcher.h"
|
||||
#include <qdebug.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
QT_USE_NAMESPACE
|
||||
|
||||
QIOSEventDispatcher::QIOSEventDispatcher(QObject *parent)
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
qDebug() << __FUNCTION__ << "eventdispatcher not implemented";
|
||||
}
|
||||
|
||||
QIOSEventDispatcher::~QIOSEventDispatcher()
|
||||
{}
|
||||
|
||||
bool QIOSEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags)
|
||||
{
|
||||
Q_UNUSED(flags);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool QIOSEventDispatcher::hasPendingEvents()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void QIOSEventDispatcher::registerSocketNotifier(QSocketNotifier *notifier)
|
||||
{
|
||||
Q_UNUSED(notifier);
|
||||
}
|
||||
|
||||
void QIOSEventDispatcher::unregisterSocketNotifier(QSocketNotifier *notifier)
|
||||
{
|
||||
Q_UNUSED(notifier);
|
||||
}
|
||||
|
||||
void QIOSEventDispatcher::registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object)
|
||||
{
|
||||
Q_UNUSED(timerId);
|
||||
Q_UNUSED(interval);
|
||||
Q_UNUSED(timerType);
|
||||
Q_UNUSED(object);
|
||||
}
|
||||
|
||||
bool QIOSEventDispatcher::unregisterTimer(int timerId)
|
||||
{
|
||||
Q_UNUSED(timerId);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool QIOSEventDispatcher::unregisterTimers(QObject *object)
|
||||
{
|
||||
Q_UNUSED(object);
|
||||
return false;
|
||||
}
|
||||
|
||||
QList<QAbstractEventDispatcher::TimerInfo> QIOSEventDispatcher::registeredTimers(QObject *object) const
|
||||
{
|
||||
Q_UNUSED(object);
|
||||
return QList<TimerInfo>();
|
||||
}
|
||||
|
||||
int QIOSEventDispatcher::remainingTime(int timerId)
|
||||
{
|
||||
Q_UNUSED(timerId);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void QIOSEventDispatcher::wakeUp()
|
||||
{}
|
||||
|
||||
void QIOSEventDispatcher::interrupt()
|
||||
{}
|
||||
|
||||
void QIOSEventDispatcher::flush()
|
||||
{}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
75
src/plugins/platforms/ios/qiosintegration.h
Normal file
75
src/plugins/platforms/ios/qiosintegration.h
Normal file
@ -0,0 +1,75 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QPLATFORMINTEGRATION_UIKIT_H
|
||||
#define QPLATFORMINTEGRATION_UIKIT_H
|
||||
|
||||
#include <qpa/qplatformintegration.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QIOSIntegration : public QPlatformIntegration
|
||||
{
|
||||
public:
|
||||
QIOSIntegration();
|
||||
~QIOSIntegration();
|
||||
|
||||
static QIOSIntegration *instance();
|
||||
|
||||
QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const;
|
||||
QPlatformWindow *createPlatformWindow(QWindow *window) const;
|
||||
QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;
|
||||
|
||||
QList<QPlatformScreen *> screens() const;
|
||||
|
||||
QPlatformFontDatabase *fontDatabase() const;
|
||||
|
||||
QAbstractEventDispatcher *guiThreadEventDispatcher() const;
|
||||
|
||||
private:
|
||||
QList<QPlatformScreen *> mScreens;
|
||||
QPlatformFontDatabase *mFontDb;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
106
src/plugins/platforms/ios/qiosintegration.mm
Normal file
106
src/plugins/platforms/ios/qiosintegration.mm
Normal file
@ -0,0 +1,106 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qiosIntegration.h"
|
||||
#include "qioswindow.h"
|
||||
#include "qiosbackingstore.h"
|
||||
#include "qiosscreen.h"
|
||||
#include "qioseventdispatcher.h"
|
||||
|
||||
#include <QtPlatformSupport/private/qcoretextfontdatabase_p.h>
|
||||
|
||||
#include <QtDebug>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
static QIOSIntegration *m_instance = 0;
|
||||
|
||||
QIOSIntegration * QIOSIntegration::instance()
|
||||
{
|
||||
return m_instance;
|
||||
}
|
||||
|
||||
QIOSIntegration::QIOSIntegration()
|
||||
:mFontDb(new QCoreTextFontDatabase)
|
||||
{
|
||||
if (!m_instance)
|
||||
m_instance = this;
|
||||
mScreens << new QIOSScreen(0);
|
||||
}
|
||||
|
||||
QIOSIntegration::~QIOSIntegration()
|
||||
{
|
||||
}
|
||||
|
||||
QPlatformPixmap *QIOSIntegration::createPlatformPixmap(QPlatformPixmap::PixelType type) const
|
||||
{
|
||||
Q_UNUSED(type);
|
||||
qDebug() << __FUNCTION__ << "not yet implemented";
|
||||
return 0;
|
||||
//return new QRasterPixmapData(type);
|
||||
}
|
||||
|
||||
QPlatformWindow *QIOSIntegration::createPlatformWindow(QWindow *window) const
|
||||
{
|
||||
return new QIOSWindow(window);
|
||||
}
|
||||
|
||||
QList<QPlatformScreen *> QIOSIntegration::screens() const
|
||||
{
|
||||
return mScreens;
|
||||
}
|
||||
|
||||
QPlatformBackingStore *QIOSIntegration::createPlatformBackingStore(QWindow *window) const
|
||||
{
|
||||
return new QIOSBackingStore(window);
|
||||
}
|
||||
|
||||
QAbstractEventDispatcher *QIOSIntegration::guiThreadEventDispatcher() const
|
||||
{
|
||||
return new QIOSEventDispatcher();
|
||||
}
|
||||
|
||||
QPlatformFontDatabase * QIOSIntegration::fontDatabase() const
|
||||
{
|
||||
return mFontDb;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
76
src/plugins/platforms/ios/qiosscreen.h
Normal file
76
src/plugins/platforms/ios/qiosscreen.h
Normal file
@ -0,0 +1,76 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QIOSSCREEN_H
|
||||
#define QIOSSCREEN_H
|
||||
|
||||
#include <UIKit/UIKit.h>
|
||||
|
||||
#include <qpa/qplatformscreen.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QIOSScreen : public QPlatformScreen
|
||||
{
|
||||
public:
|
||||
QIOSScreen(int screenIndex);
|
||||
~QIOSScreen();
|
||||
|
||||
QRect geometry() const { return m_geometry; }
|
||||
int depth() const { return m_depth; }
|
||||
QImage::Format format() const { return m_format; }
|
||||
QSizeF physicalSize() const { return m_physicalSize; }
|
||||
|
||||
UIScreen *uiScreen() const;
|
||||
|
||||
void updateInterfaceOrientation();
|
||||
private:
|
||||
QRect m_geometry;
|
||||
int m_depth;
|
||||
QImage::Format m_format;
|
||||
QSize m_physicalSize;
|
||||
int m_index;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
|
||||
#endif
|
120
src/plugins/platforms/ios/qiosscreen.mm
Normal file
120
src/plugins/platforms/ios/qiosscreen.mm
Normal file
@ -0,0 +1,120 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qiosscreen.h"
|
||||
#include "qioswindow.h"
|
||||
|
||||
#include <QtGui/QGuiApplication>
|
||||
|
||||
#include <QtDebug>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QIOSScreen::QIOSScreen(int screenIndex)
|
||||
: QPlatformScreen(),
|
||||
m_index(screenIndex)
|
||||
{
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
CGRect bounds = [uiScreen() bounds];
|
||||
CGFloat scale = [uiScreen() scale];
|
||||
updateInterfaceOrientation();
|
||||
|
||||
m_format = QImage::Format_ARGB32_Premultiplied;
|
||||
|
||||
m_depth = 24;
|
||||
|
||||
const qreal inch = 25.4;
|
||||
qreal unscaledDpi = 160.;
|
||||
int dragDistance = 12 * scale;
|
||||
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
||||
unscaledDpi = 132.;
|
||||
dragDistance = 10 * scale;
|
||||
}
|
||||
m_physicalSize = QSize(qRound(bounds.size.width * inch / unscaledDpi), qRound(bounds.size.height * inch / unscaledDpi));
|
||||
|
||||
//qApp->setStartDragDistance(dragDistance);
|
||||
|
||||
/*
|
||||
QFont font; // system font is helvetica, so that is fine already
|
||||
font.setPixelSize([UIFont systemFontSize] * scale);
|
||||
qApp->setFont(font);
|
||||
*/
|
||||
|
||||
[pool release];
|
||||
}
|
||||
|
||||
QIOSScreen::~QIOSScreen()
|
||||
{
|
||||
}
|
||||
|
||||
UIScreen *QIOSScreen::uiScreen() const
|
||||
{
|
||||
return [[UIScreen screens] objectAtIndex:m_index];
|
||||
}
|
||||
|
||||
void QIOSScreen::updateInterfaceOrientation()
|
||||
{
|
||||
qDebug() << __FUNCTION__ << "not implemented";
|
||||
/*
|
||||
CGRect bounds = [uiScreen() bounds];
|
||||
CGFloat scale = [uiScreen() scale];
|
||||
switch ([[UIApplication sharedApplication] statusBarOrientation]) {
|
||||
case UIInterfaceOrientationPortrait:
|
||||
case UIInterfaceOrientationPortraitUpsideDown:
|
||||
m_geometry = QRect(bounds.origin.x * scale, bounds.origin.y * scale,
|
||||
bounds.size.width * scale, bounds.size.height * scale);;
|
||||
break;
|
||||
case UIInterfaceOrientationLandscapeLeft:
|
||||
case UIInterfaceOrientationLandscapeRight:
|
||||
m_geometry = QRect(bounds.origin.x * scale, bounds.origin.y * scale,
|
||||
bounds.size.height * scale, bounds.size.width * scale);
|
||||
break;
|
||||
}
|
||||
foreach (QWidget *widget, qApp->topLevelWidgets()) {
|
||||
QIOSWindow *platformWindow = static_cast<QIOSWindow *>(widget->platformWindow());
|
||||
if (platformWindow && platformWindow->platformScreen() == this) {
|
||||
platformWindow->updateGeometryAndOrientation();
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
73
src/plugins/platforms/ios/qiossoftwareinputhandler.h
Normal file
73
src/plugins/platforms/ios/qiossoftwareinputhandler.h
Normal file
@ -0,0 +1,73 @@
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QIOSSOFTWAREINPUTHANDLER_H
|
||||
#define QIOSSOFTWAREINPUTHANDLER_H
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QPointer>
|
||||
#include <QtWidgets/QWidget>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QIOSSoftwareInputHandler : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QIOSSoftwareInputHandler() : mCurrentFocusWidget(0), mCurrentFocusObject(0) {}
|
||||
bool eventFilter(QObject *obj, QEvent *event);
|
||||
|
||||
private slots:
|
||||
void activeFocusChanged(bool focus);
|
||||
|
||||
private:
|
||||
bool closeSoftwareInputPanel(QWidget *widget);
|
||||
|
||||
QPointer<QWidget> mCurrentFocusWidget;
|
||||
QPointer<QObject> mCurrentFocusObject;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif
|
135
src/plugins/platforms/ios/qioswindow.h
Normal file
135
src/plugins/platforms/ios/qioswindow.h
Normal file
@ -0,0 +1,135 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QIOSWINDOW_H
|
||||
#define QIOSWINDOW_H
|
||||
|
||||
#include <qpa/qplatformwindow.h>
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <OpenGLES/ES1/gl.h>
|
||||
#import <OpenGLES/ES1/glext.h>
|
||||
#import <OpenGLES/ES2/gl.h>
|
||||
#import <OpenGLES/ES2/glext.h>
|
||||
#import <OpenGLES/EAGL.h>
|
||||
|
||||
@interface EAGLView : UIView <UIKeyInput>
|
||||
{
|
||||
QPlatformWindow *mWindow;
|
||||
EAGLContext *mContext;
|
||||
|
||||
GLint mFramebufferWidth;
|
||||
GLint mFramebufferHeight;
|
||||
|
||||
GLuint mFramebuffer, mColorRenderbuffer, mDepthRenderbuffer;
|
||||
|
||||
id delegate;
|
||||
// ------- Text Input ----------
|
||||
UITextAutocapitalizationType autocapitalizationType;
|
||||
UITextAutocorrectionType autocorrectionType;
|
||||
BOOL enablesReturnKeyAutomatically;
|
||||
UIKeyboardAppearance keyboardAppearance;
|
||||
UIKeyboardType keyboardType;
|
||||
UIReturnKeyType returnKeyType;
|
||||
BOOL secureTextEntry;
|
||||
}
|
||||
|
||||
- (void)setContext:(EAGLContext *)newContext;
|
||||
- (void)presentFramebuffer;
|
||||
- (void)deleteFramebuffer;
|
||||
- (void)createFramebuffer;
|
||||
- (void)makeCurrent;
|
||||
- (void)setWindow:(QPlatformWindow *)window;
|
||||
- (void)sendMouseEventForTouches:(NSSet *)touches withEvent:(UIEvent *)event fakeButtons:(Qt::MouseButtons)buttons;
|
||||
|
||||
@property (readonly,getter=fbo) GLint fbo;
|
||||
@property (nonatomic, assign) id delegate;
|
||||
|
||||
// ------- Text Input ----------
|
||||
|
||||
@property(nonatomic) UITextAutocapitalizationType autocapitalizationType;
|
||||
@property(nonatomic) UITextAutocorrectionType autocorrectionType;
|
||||
@property(nonatomic) BOOL enablesReturnKeyAutomatically;
|
||||
@property(nonatomic) UIKeyboardAppearance keyboardAppearance;
|
||||
@property(nonatomic) UIKeyboardType keyboardType;
|
||||
@property(nonatomic) UIReturnKeyType returnKeyType;
|
||||
@property(nonatomic, getter=isSecureTextEntry) BOOL secureTextEntry;
|
||||
|
||||
@end
|
||||
|
||||
@protocol EAGLViewDelegate
|
||||
- (void)eaglView:(EAGLView *)view usesFramebuffer:(GLuint)buffer;
|
||||
@end
|
||||
|
||||
class EAGLPlatformContext;
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QIOSScreen;
|
||||
|
||||
class QIOSWindow : public QPlatformWindow
|
||||
{
|
||||
public:
|
||||
explicit QIOSWindow(QWindow *window);
|
||||
~QIOSWindow();
|
||||
|
||||
UIWindow *nativeWindow() const { return mWindow; }
|
||||
EAGLView *nativeView() const { return mView; }
|
||||
void setGeometry(const QRect &rect);
|
||||
|
||||
UIWindow *ensureNativeWindow();
|
||||
|
||||
QPlatformOpenGLContext *glContext() const;
|
||||
|
||||
QIOSScreen *platformScreen() const { return mScreen; }
|
||||
|
||||
void updateGeometryAndOrientation();
|
||||
private:
|
||||
QIOSScreen *mScreen;
|
||||
UIWindow *mWindow;
|
||||
CGRect mFrame;
|
||||
EAGLView *mView;
|
||||
mutable EAGLPlatformContext *mContext;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QIOSWINDOW_H
|
449
src/plugins/platforms/ios/qioswindow.mm
Normal file
449
src/plugins/platforms/ios/qioswindow.mm
Normal file
@ -0,0 +1,449 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#import <QuartzCore/CAEAGLLayer.h>
|
||||
|
||||
#include "qioswindow.h"
|
||||
|
||||
#include "qiosscreen.h"
|
||||
|
||||
#include <QtDebug>
|
||||
#include <QtGui/QKeyEvent>
|
||||
#include <qpa/qplatformopenglcontext.h>
|
||||
#include <qpa/qwindowsysteminterface.h>
|
||||
|
||||
#include <QtDebug>
|
||||
|
||||
static GLint stencilBits()
|
||||
{
|
||||
static GLint bits;
|
||||
static bool initialized = false;
|
||||
if (!initialized) {
|
||||
glGetIntegerv(GL_STENCIL_BITS, &bits);
|
||||
initialized = true;
|
||||
}
|
||||
return bits;
|
||||
}
|
||||
|
||||
/*
|
||||
static GLint depthBits()
|
||||
{
|
||||
// we can choose between GL_DEPTH24_STENCIL8_OES and GL_DEPTH_COMPONENT16
|
||||
return stencilBits() > 0 ? 24 : 16;
|
||||
}
|
||||
*/
|
||||
|
||||
class EAGLPlatformContext : public QPlatformOpenGLContext
|
||||
{
|
||||
public:
|
||||
EAGLPlatformContext(EAGLView *view)
|
||||
: mView(view)
|
||||
{
|
||||
/*
|
||||
mFormat.setWindowApi(QPlatformWindowFormat::OpenGL);
|
||||
mFormat.setDepthBufferSize(depthBits());
|
||||
mFormat.setAccumBufferSize(0);
|
||||
mFormat.setRedBufferSize(8);
|
||||
mFormat.setGreenBufferSize(8);
|
||||
mFormat.setBlueBufferSize(8);
|
||||
mFormat.setAlphaBufferSize(8);
|
||||
mFormat.setStencilBufferSize(stencilBits());
|
||||
mFormat.setSamples(0);
|
||||
mFormat.setSampleBuffers(false);
|
||||
mFormat.setDoubleBuffer(true);
|
||||
mFormat.setDepth(true);
|
||||
mFormat.setRgba(true);
|
||||
mFormat.setAlpha(true);
|
||||
mFormat.setAccum(false);
|
||||
mFormat.setStencil(stencilBits() > 0);
|
||||
mFormat.setStereo(false);
|
||||
mFormat.setDirectRendering(false);
|
||||
*/
|
||||
|
||||
#if defined(QT_OPENGL_ES_2)
|
||||
EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
|
||||
#else
|
||||
EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
|
||||
#endif
|
||||
[mView setContext:aContext];
|
||||
}
|
||||
|
||||
~EAGLPlatformContext() { }
|
||||
|
||||
bool makeCurrent(QPlatformSurface *surface)
|
||||
{
|
||||
Q_UNUSED(surface);
|
||||
qDebug() << __FUNCTION__ << "not implemented";
|
||||
//QPlatformOpenGLContext::makeCurrent();
|
||||
//[mView makeCurrent];
|
||||
return false;
|
||||
}
|
||||
|
||||
void doneCurrent()
|
||||
{
|
||||
qDebug() << __FUNCTION__ << "not implemented";
|
||||
//QPlatformOpenGLContext::doneCurrent();
|
||||
}
|
||||
|
||||
void swapBuffers(QPlatformSurface *surface)
|
||||
{
|
||||
Q_UNUSED(surface);
|
||||
qDebug() << __FUNCTION__ << "not implemented";
|
||||
//[mView presentFramebuffer];
|
||||
}
|
||||
|
||||
QFunctionPointer getProcAddress(const QByteArray& ) { return 0; }
|
||||
|
||||
QSurfaceFormat format() const
|
||||
{
|
||||
return mFormat;
|
||||
}
|
||||
|
||||
private:
|
||||
EAGLView *mView;
|
||||
|
||||
QSurfaceFormat mFormat;
|
||||
};
|
||||
|
||||
@implementation EAGLView
|
||||
|
||||
@synthesize delegate;
|
||||
|
||||
+ (Class)layerClass
|
||||
{
|
||||
return [CAEAGLLayer class];
|
||||
}
|
||||
|
||||
- (id)initWithFrame:(CGRect)frame
|
||||
{
|
||||
if ((self = [super initWithFrame:frame])) {
|
||||
CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
|
||||
eaglLayer.opaque = TRUE;
|
||||
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||
[NSNumber numberWithBool:YES], kEAGLDrawablePropertyRetainedBacking,
|
||||
kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat,
|
||||
nil];
|
||||
autocapitalizationType = UITextAutocapitalizationTypeNone;
|
||||
autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
enablesReturnKeyAutomatically = NO;
|
||||
keyboardAppearance = UIKeyboardAppearanceDefault;
|
||||
keyboardType = UIKeyboardTypeDefault;
|
||||
returnKeyType = UIReturnKeyDone;
|
||||
secureTextEntry = NO;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)setContext:(EAGLContext *)newContext
|
||||
{
|
||||
if (mContext != newContext)
|
||||
{
|
||||
[self deleteFramebuffer];
|
||||
[mContext release];
|
||||
mContext = [newContext retain];
|
||||
[EAGLContext setCurrentContext:nil];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)presentFramebuffer
|
||||
{
|
||||
if (mContext) {
|
||||
[EAGLContext setCurrentContext:mContext];
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, mColorRenderbuffer);
|
||||
[mContext presentRenderbuffer:GL_RENDERBUFFER];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)deleteFramebuffer
|
||||
{
|
||||
if (mContext)
|
||||
{
|
||||
[EAGLContext setCurrentContext:mContext];
|
||||
if (mFramebuffer) {
|
||||
glDeleteFramebuffers(1, &mFramebuffer);
|
||||
mFramebuffer = 0;
|
||||
}
|
||||
if (mColorRenderbuffer) {
|
||||
glDeleteRenderbuffers(1, &mColorRenderbuffer);
|
||||
mColorRenderbuffer = 0;
|
||||
}
|
||||
if (mDepthRenderbuffer) {
|
||||
glDeleteRenderbuffers(1, &mDepthRenderbuffer);
|
||||
mDepthRenderbuffer = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)createFramebuffer
|
||||
{
|
||||
if (mContext && !mFramebuffer)
|
||||
{
|
||||
[EAGLContext setCurrentContext:mContext];
|
||||
glGenFramebuffers(1, &mFramebuffer);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer);
|
||||
|
||||
glGenRenderbuffers(1, &mColorRenderbuffer);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, mColorRenderbuffer);
|
||||
[mContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer *)self.layer];
|
||||
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &mFramebufferWidth);
|
||||
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &mFramebufferHeight);
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, mColorRenderbuffer);
|
||||
|
||||
glGenRenderbuffers(1, &mDepthRenderbuffer);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, mDepthRenderbuffer);
|
||||
if (stencilBits() > 0) {
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, mFramebufferWidth, mFramebufferHeight);
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, mDepthRenderbuffer);
|
||||
} else {
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, mFramebufferWidth, mFramebufferHeight);
|
||||
}
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, mDepthRenderbuffer);
|
||||
|
||||
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
|
||||
NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
|
||||
if (delegate && [delegate respondsToSelector:@selector(eaglView:usesFramebuffer:)]) {
|
||||
[delegate eaglView:self usesFramebuffer:mFramebuffer];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)makeCurrent
|
||||
{
|
||||
if (mContext)
|
||||
{
|
||||
[EAGLContext setCurrentContext:mContext];
|
||||
if (!mFramebuffer)
|
||||
[self createFramebuffer];
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer);
|
||||
glViewport(0, 0, mFramebufferWidth, mFramebufferHeight);
|
||||
}
|
||||
}
|
||||
|
||||
- (GLint)fbo
|
||||
{
|
||||
return mFramebuffer;
|
||||
}
|
||||
|
||||
- (void)setWindow:(QPlatformWindow *)window
|
||||
{
|
||||
mWindow = window;
|
||||
}
|
||||
|
||||
- (void)sendMouseEventForTouches:(NSSet *)touches withEvent:(UIEvent *)event fakeButtons:(Qt::MouseButtons)buttons
|
||||
{
|
||||
UITouch *touch = [touches anyObject];
|
||||
CGPoint locationInView = [touch locationInView:self];
|
||||
CGFloat scaleFactor = [self contentScaleFactor];
|
||||
QPoint p(locationInView.x * scaleFactor, locationInView.y * scaleFactor);
|
||||
// TODO handle global touch point? for status bar?
|
||||
QWindowSystemInterface::handleMouseEvent(mWindow->window(), (ulong)(event.timestamp*1000),
|
||||
p, p, buttons);
|
||||
}
|
||||
|
||||
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
|
||||
{
|
||||
[self sendMouseEventForTouches:touches withEvent:event fakeButtons:Qt::LeftButton];
|
||||
}
|
||||
|
||||
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
|
||||
{
|
||||
[self sendMouseEventForTouches:touches withEvent:event fakeButtons:Qt::LeftButton];
|
||||
}
|
||||
|
||||
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
|
||||
{
|
||||
[self sendMouseEventForTouches:touches withEvent:event fakeButtons:Qt::NoButton];
|
||||
}
|
||||
|
||||
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
|
||||
{
|
||||
[self sendMouseEventForTouches:touches withEvent:event fakeButtons:Qt::NoButton];
|
||||
}
|
||||
|
||||
// ------- Text Input ----------
|
||||
|
||||
@synthesize autocapitalizationType;
|
||||
@synthesize autocorrectionType;
|
||||
@synthesize enablesReturnKeyAutomatically;
|
||||
@synthesize keyboardAppearance;
|
||||
@synthesize keyboardType;
|
||||
@synthesize returnKeyType;
|
||||
@synthesize secureTextEntry;
|
||||
|
||||
- (BOOL)canBecomeFirstResponder
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)hasText
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)insertText:(NSString *)text
|
||||
{
|
||||
QString string = QString::fromUtf8([text UTF8String]);
|
||||
int key = 0;
|
||||
if ([text isEqualToString:@"\n"])
|
||||
key = (int)Qt::Key_Return;
|
||||
|
||||
// Send key event to window system interface
|
||||
QWindowSystemInterface::handleKeyEvent(
|
||||
0, QEvent::KeyPress, key, Qt::NoModifier, string, false, int(string.length()));
|
||||
QWindowSystemInterface::handleKeyEvent(
|
||||
0, QEvent::KeyRelease, key, Qt::NoModifier, string, false, int(string.length()));
|
||||
}
|
||||
|
||||
- (void)deleteBackward
|
||||
{
|
||||
// Send key event to window system interface
|
||||
QWindowSystemInterface::handleKeyEvent(
|
||||
0, QEvent::KeyPress, (int)Qt::Key_Backspace, Qt::NoModifier);
|
||||
QWindowSystemInterface::handleKeyEvent(
|
||||
0, QEvent::KeyRelease, (int)Qt::Key_Backspace, Qt::NoModifier);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QIOSWindow::QIOSWindow(QWindow *window) :
|
||||
QPlatformWindow(window),
|
||||
mWindow(nil),
|
||||
mContext(0)
|
||||
{
|
||||
mScreen = static_cast<QIOSScreen *>(QPlatformScreen::platformScreenForWindow(window));
|
||||
mView = [[EAGLView alloc] init];
|
||||
}
|
||||
|
||||
QIOSWindow::~QIOSWindow()
|
||||
{
|
||||
delete mContext; mContext = 0;
|
||||
[mView release];
|
||||
[mWindow release];
|
||||
}
|
||||
|
||||
void QIOSWindow::setGeometry(const QRect &rect)
|
||||
{
|
||||
// Not supported. Only a single "full screen" window is supported
|
||||
QPlatformWindow::setGeometry(rect);
|
||||
}
|
||||
|
||||
UIWindow *QIOSWindow::ensureNativeWindow()
|
||||
{
|
||||
if (!mWindow) {
|
||||
mWindow = [[UIWindow alloc] init];
|
||||
updateGeometryAndOrientation();
|
||||
// window
|
||||
mWindow.screen = mScreen->uiScreen();
|
||||
// for some reason setting the screen resets frame.origin, so we need to set the frame afterwards
|
||||
mWindow.frame = mFrame;
|
||||
|
||||
// view
|
||||
[mView deleteFramebuffer];
|
||||
mView.frame = CGRectMake(0, 0, mWindow.bounds.size.width, mWindow.bounds.size.height); // fill
|
||||
[mView setContentScaleFactor:[mWindow.screen scale]];
|
||||
[mView setMultipleTouchEnabled:YES];
|
||||
[mView setWindow:this];
|
||||
[mWindow addSubview:mView];
|
||||
[mWindow setNeedsDisplay];
|
||||
[mWindow makeKeyAndVisible];
|
||||
}
|
||||
return mWindow;
|
||||
}
|
||||
|
||||
void QIOSWindow::updateGeometryAndOrientation()
|
||||
{
|
||||
if (!mWindow)
|
||||
return;
|
||||
mFrame = [mScreen->uiScreen() applicationFrame];
|
||||
CGRect screen = [mScreen->uiScreen() bounds];
|
||||
QRect geom;
|
||||
CGFloat angle = 0;
|
||||
switch ([[UIApplication sharedApplication] statusBarOrientation]) {
|
||||
case UIInterfaceOrientationPortrait:
|
||||
geom = QRect(mFrame.origin.x, mFrame.origin.y, mFrame.size.width, mFrame.size.height);
|
||||
break;
|
||||
case UIInterfaceOrientationPortraitUpsideDown:
|
||||
geom = QRect(screen.size.width - mFrame.origin.x - mFrame.size.width,
|
||||
screen.size.height - mFrame.origin.y - mFrame.size.height,
|
||||
mFrame.size.width,
|
||||
mFrame.size.height);
|
||||
angle = M_PI;
|
||||
break;
|
||||
case UIInterfaceOrientationLandscapeLeft:
|
||||
geom = QRect(screen.size.height - mFrame.origin.y - mFrame.size.height,
|
||||
mFrame.origin.x,
|
||||
mFrame.size.height,
|
||||
mFrame.size.width);
|
||||
angle = -M_PI/2.;
|
||||
break;
|
||||
case UIInterfaceOrientationLandscapeRight:
|
||||
geom = QRect(mFrame.origin.y,
|
||||
screen.size.width - mFrame.origin.x - mFrame.size.width,
|
||||
mFrame.size.height,
|
||||
mFrame.size.width);
|
||||
angle = +M_PI/2.;
|
||||
break;
|
||||
}
|
||||
|
||||
CGFloat scale = [mScreen->uiScreen() scale];
|
||||
geom = QRect(geom.x() * scale, geom.y() * scale,
|
||||
geom.width() * scale, geom.height() * scale);
|
||||
|
||||
if (angle != 0) {
|
||||
[mView layer].transform = CATransform3DMakeRotation(angle, 0, 0, 1.);
|
||||
} else {
|
||||
[mView layer].transform = CATransform3DIdentity;
|
||||
}
|
||||
[mView setNeedsDisplay];
|
||||
window()->setGeometry(geom);
|
||||
}
|
||||
|
||||
QPlatformOpenGLContext *QIOSWindow::glContext() const
|
||||
{
|
||||
if (!mContext) {
|
||||
mContext = new EAGLPlatformContext(mView);
|
||||
}
|
||||
return mContext;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
Loading…
Reference in New Issue
Block a user