X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSVTK%2FSVTK_RenderWindowInteractor.cxx;h=c6278f7c2665cbe197a689dd12bafa7907d2a69f;hb=refs%2Fheads%2Fngr%2Fpython3_dev_pv5.4;hp=ac07e118c22a87257ff3833547f9a329635b537c;hpb=c4b058d18583af7f94042eb55d4b933dd222d2e6;p=modules%2Fgui.git diff --git a/src/SVTK/SVTK_RenderWindowInteractor.cxx b/src/SVTK/SVTK_RenderWindowInteractor.cxx index ac07e118c..c6278f7c2 100644 --- a/src/SVTK/SVTK_RenderWindowInteractor.cxx +++ b/src/SVTK/SVTK_RenderWindowInteractor.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -34,8 +34,11 @@ // QT Includes // Put Qt includes before the X11 includes which #define the symbol None // (see SVTK_SpaceMouse.h) to avoid the compilation error. -#ifndef WIN32 -# include +#if !defined(WIN32) && !defined(__APPLE__) +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) +#include +#endif +#include #endif #include @@ -81,7 +84,7 @@ QVTK_RenderWindowInteractor myRenderWindow->Delete(); myRenderWindow->DoubleBufferOn(); -#ifndef WIN32 +#if !defined WIN32 && !defined __APPLE__ myRenderWindow->SetDisplayId((void*)QX11Info::display()); #endif myRenderWindow->SetWindowId((void*)winId()); @@ -109,10 +112,16 @@ QVTK_RenderWindowInteractor QVTK_RenderWindowInteractor ::~QVTK_RenderWindowInteractor() { -#ifndef WIN32 - SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance(); +#if !defined WIN32 && !defined __APPLE__ +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) + SVTK_SpaceMouseX* aSpaceMouse = SVTK_SpaceMouseX::getInstance(); if ( aSpaceMouse && aSpaceMouse->isSpaceMouseOn() ) aSpaceMouse->close( QX11Info::display() ); +#else + SVTK_SpaceMouseXCB* aSpaceMouse = SVTK_SpaceMouseXCB::getInstance(); + if ( aSpaceMouse && aSpaceMouse->isSpaceMouseOn() ) + aSpaceMouse->close( QX11Info::connection() ); +#endif #endif } @@ -406,10 +415,10 @@ QVTK_RenderWindowInteractor { QWidget::focusInEvent( event ); -#ifndef WIN32 +#if !defined WIN32 && !defined __APPLE__ // register set space mouse events receiver - SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance(); - +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) + SVTK_SpaceMouseX* aSpaceMouse = SVTK_SpaceMouseX::getInstance(); if ( aSpaceMouse ) { if ( !aSpaceMouse->isSpaceMouseOn() ) @@ -418,6 +427,17 @@ QVTK_RenderWindowInteractor else aSpaceMouse->setWindow( QX11Info::display(), winId() ); } +#else + SVTK_SpaceMouseXCB* aSpaceMouse = SVTK_SpaceMouseXCB::getInstance(); + if ( aSpaceMouse ) + { + if ( !aSpaceMouse->isSpaceMouseOn() ) + // initialize 3D space mouse driver + aSpaceMouse->initialize( QX11Info::connection(), winId() ); + else + aSpaceMouse->setWindow( QX11Info::connection(), winId() ); + } +#endif #endif } @@ -431,16 +451,23 @@ QVTK_RenderWindowInteractor { QWidget::focusOutEvent( event ); -#ifndef WIN32 +#if !defined WIN32 && !defined __APPLE__ +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) // unregister set space mouse events receiver - SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance(); + SVTK_SpaceMouseX* aSpaceMouse = SVTK_SpaceMouseX::getInstance(); if ( aSpaceMouse && aSpaceMouse->isSpaceMouseOn() ) aSpaceMouse->setWindow( QX11Info::display(), 0 ); +#else + SVTK_SpaceMouseXCB* aSpaceMouse = SVTK_SpaceMouseXCB::getInstance(); + if ( aSpaceMouse && aSpaceMouse->isSpaceMouseOn() ) + aSpaceMouse->setWindow( QX11Info::connection(), 0 ); +#endif #endif } - -#ifdef WIN32 +// TODO (QT5 PORTING) Below is a temporary solution, to allow compiling with Qt 5 +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +#if defined(WIN32) /*! To handle native Win32 events (from such devices as SpaceMouse) @@ -451,17 +478,16 @@ bool QVTK_RenderWindowInteractor::winEvent( MSG* msg, long* result ) return QWidget::winEvent( msg, result); } -#else - +#elif !defined(__APPLE__) /*! To handle native X11 events (from such devices as SpaceMouse) */ -bool +bool QVTK_RenderWindowInteractor ::x11Event( XEvent *xEvent ) { // handle 3d space mouse events - if ( SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance() ) + if ( SVTK_SpaceMouseX* aSpaceMouse = SVTK_SpaceMouseX::getInstance() ) { if ( aSpaceMouse->isSpaceMouseOn() && xEvent->type == ClientMessage ) { @@ -487,6 +513,52 @@ QVTK_RenderWindowInteractor #endif +#else // QT_VERSION < QT_VERSION_CHECK(5, 0, 0) + +bool QVTK_RenderWindowInteractor +::nativeEvent(const QByteArray& eventType, void* message, long* result) +{ +#if defined(WIN32) + // TODO: WIN32-related implementation +#elif !defined(__APPLE__) + if ( eventType == "xcb_generic_event_t" ) + { + xcb_generic_event_t* ev = static_cast(message); +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) + // TODO: this code is never called + if ( SVTK_SpaceMouseX* aSpaceMouse = SVTK_SpaceMouseX::getInstance() ) +#else + if ( SVTK_SpaceMouseXCB* aSpaceMouse = SVTK_SpaceMouseXCB::getInstance() ) +#endif + { + if ( aSpaceMouse->isSpaceMouseOn() && ev->response_type == XCB_CLIENT_MESSAGE ) + { + SVTK_SpaceMouse::MoveEvent anEvent; +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) + // TODO: this code is never called + int type = aSpaceMouse->translateEvent( QX11Info::display(), xEvent, &anEvent, 1.0, 1.0 ); +#else + int type = aSpaceMouse->translateEvent( QX11Info::connection(), (xcb_client_message_event_t*)ev, &anEvent, 1.0, 1.0 ); +#endif + switch ( type ) + { + case SVTK_SpaceMouse::SpaceMouseMove: + GetDevice()->InvokeEvent( SVTK::SpaceMouseMoveEvent, anEvent.data ); + break; + case SVTK_SpaceMouse::SpaceButtonPress: + GetDevice()->InvokeEvent( SVTK::SpaceMouseButtonEvent, &anEvent.button ); + break; + case SVTK_SpaceMouse::SpaceButtonRelease: + break; + } + return true; // stop handling the event + } + } + } +#endif + return QWidget::nativeEvent( eventType, message, result ); +} +#endif /*! Constructor */