Add QCocoaNativeInterface.
authorMorten Sorvig <morten.sorvig@nokia.com>
Fri, 20 May 2011 08:47:59 +0000 (10:47 +0200)
committerMorten Sorvig <morten.sorvig@nokia.com>
Fri, 20 May 2011 08:58:37 +0000 (10:58 +0200)
Supports getting the NSOpenGLContext for now.

src/plugins/platforms/cocoa/cocoa.pro
src/plugins/platforms/cocoa/qcocoaglcontext.h
src/plugins/platforms/cocoa/qcocoaglcontext.mm
src/plugins/platforms/cocoa/qcocoaintegration.h
src/plugins/platforms/cocoa/qcocoaintegration.mm
src/plugins/platforms/cocoa/qcocoanativeinterface.h [new file with mode: 0644]
src/plugins/platforms/cocoa/qcocoanativeinterface.mm [new file with mode: 0644]

index 87846a9..5d75163 100644 (file)
@@ -10,7 +10,9 @@ OBJECTIVE_SOURCES = main.mm \
     qcocoaeventloopintegration.mm \
     qcocoaautoreleasepool.mm \
     qnswindowdelegate.mm \
-    qcocoaglcontext.mm
+    qcocoaglcontext.mm \
+    qcocoanativeinterface.mm
+
 
 OBJECTIVE_HEADERS = qcocoaintegration.h \
     qcocoawindowsurface.h \
@@ -19,7 +21,10 @@ OBJECTIVE_HEADERS = qcocoaintegration.h \
     qcocoaeventloopintegration.h \
     qcocoaautoreleasepool.h \
     qnswindowdelegate.h \
-    qcocoaglcontext.h
+    qcocoaglcontext.h \
+    qcocoanativeinterface.h
+
+DEFINES += QT_BUILD_COCOA_LIB
 
 #add libz for freetype.
 LIBS += -lz
@@ -30,4 +35,3 @@ QT += core-private gui-private
 include(../fontdatabases/basicunix/basicunix.pri)
 target.path += $$[QT_INSTALL_PLUGINS]/platforms
 INSTALLS += target
-
index b9a84a1..4d330a4 100644 (file)
@@ -18,6 +18,7 @@ public:
     void* getProcAddress(const QString& procName);
     QWindowFormat windowFormat() const;
     static NSOpenGLPixelFormat *createNSOpenGLPixelFormat();
+    NSOpenGLContext *nsOpenGLContext() const;
 private:
     NSOpenGLView *m_glView;
 };
index 505be4a..3a87537 100644 (file)
@@ -76,3 +76,8 @@ NSOpenGLPixelFormat *QCocoaGLContext::createNSOpenGLPixelFormat()
     return pixelFormat;
 }
 
+NSOpenGLContext *QCocoaGLContext::nsOpenGLContext() const
+{
+    return [m_glView openGLContext];
+}
+
index 21bdf6c..1d961ed 100644 (file)
@@ -85,7 +85,7 @@ public:
     QPlatformFontDatabase *fontDatabase() const;
 
     QPlatformEventLoopIntegration *createEventLoopIntegration() const;
-
+    QPlatformNativeInterface *nativeInterface() const;
 private:
     QList<QPlatformScreen *> mScreens;
     QPlatformFontDatabase *mFontDb;
index ab8763a..31815d8 100644 (file)
@@ -44,6 +44,7 @@
 #include "qcocoawindow.h"
 #include "qcocoawindowsurface.h"
 #include "qcocoaeventloopintegration.h"
+#include "qcocoanativeinterface.h"
 
 #include "qbasicunixfontdatabase.h"
 
@@ -127,4 +128,10 @@ QPlatformEventLoopIntegration *QCocoaIntegration::createEventLoopIntegration() c
 {
     return new QCocoaEventLoopIntegration();
 }
+
+QPlatformNativeInterface *QCocoaIntegration::nativeInterface() const
+{
+    return new QCocoaNativeInterface();
+}
+
 QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.h b/src/plugins/platforms/cocoa/qcocoanativeinterface.h
new file mode 100644 (file)
index 0000000..78f5ce0
--- /dev/null
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** 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, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QCOCOANATIVEINTERFACE_H
+#define QCOCOANATIVEINTERFACE_H
+
+#include <QtGui/QPlatformNativeInterface>
+
+class QWidget;
+
+class QCocoaNativeInterface : public QPlatformNativeInterface
+{
+public:
+    void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window);
+};
+
+#endif // QCOCOANATIVEINTERFACE_H
diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
new file mode 100644 (file)
index 0000000..859e04c
--- /dev/null
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** 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, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qcocoanativeinterface.h"
+#include "qcocoaglcontext.h"
+#include <qbytearray.h>
+#include <qwindow.h>
+#include "qplatformwindow_qpa.h"
+#include "qwindowformat_qpa.h"
+#include "qplatformglcontext_qpa.h"
+#include "qwindowcontext_qpa.h"
+#include <qdebug.h>
+
+void *QCocoaNativeInterface::nativeResourceForWindow(const QByteArray &resourceString, QWindow *window)
+{
+    if (resourceString == "nsopenglcontext") {
+        QPlatformGLContext *platformContext = window->glContext()->handle();
+        return static_cast<QCocoaGLContext *>(platformContext)->nsOpenGLContext();
+    }
+    return 0;
+}