1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-16 10:08:36 +03:00

0023701: Add Cocoa support to Qt samples

Adapted Qt samples for using Cocoa on Mac OS X
This commit is contained in:
dbv 2013-01-25 14:41:33 +04:00
parent 6aac585ac8
commit 5f9575b332
7 changed files with 83 additions and 35 deletions

View File

@ -18,9 +18,11 @@
#include <Graphic3d_ExportFormat.hxx> #include <Graphic3d_ExportFormat.hxx>
#include <QWindowsStyle> #include <QWindowsStyle>
#ifdef WNT #if defined(_WIN32) || defined(__WIN32__)
#include <WNT_Window.hxx> #include <WNT_Window.hxx>
#include <Graphic3d_WNTGraphicDevice.hxx> #include <Graphic3d_WNTGraphicDevice.hxx>
#elif defined(__APPLE__) && !defined(MACOSX_USE_GLX)
#include <Cocoa_Window.hxx>
#else #else
#include <QX11Info> #include <QX11Info>
#include <GL/glx.h> #include <GL/glx.h>
@ -53,7 +55,7 @@ View::View( Handle(AIS_InteractiveContext) theContext, QWidget* parent )
: QWidget( parent ), : QWidget( parent ),
myViewActions( 0 ) myViewActions( 0 )
{ {
#ifndef WNT #if !defined(_WIN32) && !defined(__WIN32__) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX))
//XSynchronize( x11Display(),true ); // it is possible to use QApplication::syncX(); //XSynchronize( x11Display(),true ); // it is possible to use QApplication::syncX();
XSynchronize( x11Info().display(),true ); // it is possible to use QApplication::syncX(); XSynchronize( x11Info().display(),true ); // it is possible to use QApplication::syncX();
#endif #endif
@ -70,7 +72,7 @@ myViewActions( 0 )
setAttribute(Qt::WA_PaintOnScreen); setAttribute(Qt::WA_PaintOnScreen);
setAttribute(Qt::WA_NoSystemBackground); setAttribute(Qt::WA_NoSystemBackground);
#if !defined WNT #if !defined(_WIN32) && !defined(__WIN32__) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX))
XVisualInfo* pVisualInfo; XVisualInfo* pVisualInfo;
if ( x11Info().display() ) if ( x11Info().display() )
{ {
@ -163,18 +165,24 @@ void View::init()
{ {
if (myView.IsNull()) if (myView.IsNull())
myView = myContext->CurrentViewer()->CreateView(); myView = myContext->CurrentViewer()->CreateView();
int windowHandle = (int) winId(); #if defined(_WIN32) || defined(__WIN32__)
short hi, lo; Aspect_Handle aWindowHandle = (Aspect_Handle )winId();
lo = (short) windowHandle; Handle(WNT_Window) hWnd = new WNT_Window (Handle(Graphic3d_WNTGraphicDevice)::DownCast (myContext->CurrentViewer()->Device()),
hi = (short) (windowHandle >> 16); aWindowHandle);
#ifdef WNT #elif defined(__APPLE__) && !defined(MACOSX_USE_GLX)
Handle(WNT_Window) hWnd = new WNT_Window(Handle(Graphic3d_WNTGraphicDevice)::DownCast(myContext->CurrentViewer()->Device()),(int) hi,(int) lo); NSView* aViewHandle = (NSView* )winId();
Handle(Cocoa_Window) hWnd = new Cocoa_Window (aViewHandle);
#else #else
Handle(Xw_Window) hWnd = new Xw_Window(Handle(Graphic3d_GraphicDevice)::DownCast(myContext->CurrentViewer()->Device()),(int) hi,(int) lo,Xw_WQ_SAMEQUALITY); Aspect_Handle aWindowHandle = (Aspect_Handle )winId();
Handle(Xw_Window) hWnd = new Xw_Window (Handle(Graphic3d_GraphicDevice)::DownCast (myContext->CurrentViewer()->Device()),
aWindowHandle,
Xw_WQ_SAMEQUALITY);
#endif // WNT #endif // WNT
myView->SetWindow (hWnd); myView->SetWindow (hWnd);
if (!hWnd->IsMapped()) if (!hWnd->IsMapped())
{
hWnd->Map(); hWnd->Map();
}
myView->SetBackgroundColor (Quantity_NOC_BLACK); myView->SetBackgroundColor (Quantity_NOC_BLACK);
myView->MustBeResized(); myView->MustBeResized();
} }

View File

@ -30,9 +30,13 @@ unix {
OBJECTS_DIR = ./$$UNAME/obj OBJECTS_DIR = ./$$UNAME/obj
MOC_DIR = ./$$UNAME/src MOC_DIR = ./$$UNAME/src
} }
INCLUDEPATH += $$QMAKE_INCDIR_X11 $$QMAKE_INCDIR_OPENGL $$QMAKE_INCDIR_THREAD
DEFINES += LIN LININTEL OCC_CONVERT_SIGNALS HAVE_CONFIG_H HAVE_WOK_CONFIG_H QT_NO_STL MACOSX_USE_GLX = $$(MACOSX_USE_GLX)
LIBS += -L$$QMAKE_LIBDIR_X11 $$QMAKE_LIBS_X11 -L$$QMAKE_LIBDIR_OPENGL $$QMAKE_LIBS_OPENGL $$QMAKE_LIBS_THREAD
!macx | equals(MACOSX_USE_GLX, true): INCLUDEPATH += $$QMAKE_INCDIR_X11 $$QMAKE_INCDIR_OPENGL $$QMAKE_INCDIR_THREAD
!macx | equals(MACOSX_USE_GLX, true): DEFINES += LIN LININTEL
DEFINES += OCC_CONVERT_SIGNALS HAVE_CONFIG_H HAVE_WOK_CONFIG_H QT_NO_STL
!macx | equals(MACOSX_USE_GLX, true): LIBS += -L$$QMAKE_LIBDIR_X11 $$QMAKE_LIBS_X11 -L$$QMAKE_LIBDIR_OPENGL $$QMAKE_LIBS_OPENGL $$QMAKE_LIBS_THREAD
LIBS += -lfreeimageplus LIBS += -lfreeimageplus
LIBS += -ltbb -ltbbmalloc LIBS += -ltbb -ltbbmalloc
} }

2
samples/qt/IESample/make.sh Normal file → Executable file
View File

@ -4,4 +4,6 @@ export aSamplePath="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
if [ -e "${aSamplePath}/env.sh" ]; then source "${aSamplePath}/env.sh"; fi if [ -e "${aSamplePath}/env.sh" ]; then source "${aSamplePath}/env.sh"; fi
cd $aSamplePath cd $aSamplePath
qmake IESample.pro qmake IESample.pro
if test `uname -s` != "Darwin"; then
make make
fi

View File

@ -8,7 +8,17 @@ host=`uname -s`
STATION=$host STATION=$host
RES_DIR="${aSamplePath}/res" RES_DIR="${aSamplePath}/res"
BIN_DIR="${aSamplePath}/${STATION}/bin"
aSystem=`uname -s`
if [ "$aSystem" == "Darwin" ]; then
if [ "${CASDEB}" == "d" ]; then
BIN_DIR="${aSamplePath}/build/Debug/IESample.app/Contents/MacOS"
else
BIN_DIR="${aSamplePath}/build/Release/IESample.app/Contents/MacOS"
fi
else
BIN_DIR="${aSamplePath}/${STATION}/bin${CASDEB}"
fi
CSF_ResourcesDefaults="${RES_DIR}" CSF_ResourcesDefaults="${RES_DIR}"
CSF_IEResourcesDefaults="${RES_DIR}" CSF_IEResourcesDefaults="${RES_DIR}"
@ -20,7 +30,11 @@ export PATH
if test ! -r "${BIN_DIR}/IESample"; then if test ! -r "${BIN_DIR}/IESample"; then
echo "Executable \"${BIN_DIR}/IESample\" not found." echo "Executable \"${BIN_DIR}/IESample\" not found."
if [ "$aSystem" == "Darwin" ]; then
echo "Probably you don't compile the application. Build it with Xcode."
else
echo "Probably you don't compile the application. Execute \"make\"." echo "Probably you don't compile the application. Execute \"make\"."
fi
exit 1 exit 1
fi fi

View File

@ -32,9 +32,13 @@ unix {
OBJECTS_DIR = ./$$UNAME/obj OBJECTS_DIR = ./$$UNAME/obj
MOC_DIR = ./$$UNAME/src MOC_DIR = ./$$UNAME/src
} }
INCLUDEPATH += $$QMAKE_INCDIR_X11 $$QMAKE_INCDIR_OPENGL $$QMAKE_INCDIR_THREAD
DEFINES += LIN LININTEL OCC_CONVERT_SIGNALS HAVE_CONFIG_H HAVE_WOK_CONFIG_H MACOSX_USE_GLX = $$(MACOSX_USE_GLX)
LIBS += -L$$QMAKE_LIBDIR_X11 $$QMAKE_LIBS_X11 -L$$QMAKE_LIBDIR_OPENGL $$QMAKE_LIBS_OPENGL $$QMAKE_LIBS_THREAD
!macx | equals(MACOSX_USE_GLX, true): INCLUDEPATH += $$QMAKE_INCDIR_X11 $$QMAKE_INCDIR_OPENGL $$QMAKE_INCDIR_THREAD
!macx | equals(MACOSX_USE_GLX, true): DEFINES += LIN LININTEL
DEFINES += OCC_CONVERT_SIGNALS HAVE_CONFIG_H HAVE_WOK_CONFIG_H QT_NO_STL
!macx | equals(MACOSX_USE_GLX, true): LIBS += -L$$QMAKE_LIBDIR_X11 $$QMAKE_LIBS_X11 -L$$QMAKE_LIBDIR_OPENGL $$QMAKE_LIBS_OPENGL $$QMAKE_LIBS_THREAD
LIBS += -lfreeimageplus LIBS += -lfreeimageplus
LIBS += -ltbb -ltbbmalloc LIBS += -ltbb -ltbbmalloc
} }

View File

@ -4,4 +4,6 @@ export aSamplePath="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
if [ -e "${aSamplePath}/env.sh" ]; then source "${aSamplePath}/env.sh"; fi if [ -e "${aSamplePath}/env.sh" ]; then source "${aSamplePath}/env.sh"; fi
cd $aSamplePath cd $aSamplePath
qmake Tutorial.pro qmake Tutorial.pro
if test `uname -s` != "Darwin"; then
make make
fi

View File

@ -8,7 +8,17 @@ host=`uname -s`
STATION=$host STATION=$host
RES_DIR="${aSamplePath}/res" RES_DIR="${aSamplePath}/res"
BIN_DIR="${aSamplePath}/${STATION}/bin"
aSystem=`uname -s`
if [ "$aSystem" == "Darwin" ]; then
if [ "${CASDEB}" == "d" ]; then
BIN_DIR="${aSamplePath}/build/Debug/Tutorial.app/Contents/MacOS"
else
BIN_DIR="${aSamplePath}/build/Release/Tutorial.app/Contents/MacOS"
fi
else
BIN_DIR="${aSamplePath}/${STATION}/bin${CASDEB}"
fi
CSF_ResourcesDefaults="${RES_DIR}" CSF_ResourcesDefaults="${RES_DIR}"
CSF_TutorialResourcesDefaults="${RES_DIR}" CSF_TutorialResourcesDefaults="${RES_DIR}"
@ -20,7 +30,11 @@ export PATH
if test ! -r "${BIN_DIR}/Tutorial"; then if test ! -r "${BIN_DIR}/Tutorial"; then
echo "Executable \"${BIN_DIR}/Tutorial\" not found." echo "Executable \"${BIN_DIR}/Tutorial\" not found."
if [ "$aSystem" == "Darwin" ]; then
echo "Probably you don't compile the application. Build it with Xcode."
else
echo "Probably you don't compile the application. Execute \"make\"." echo "Probably you don't compile the application. Execute \"make\"."
fi
exit 1 exit 1
fi fi