Salome HOME
updated copyright message
[modules/gui.git] / src / SVTK / SVTK_RenderWindowInteractor.cxx
index 2cba3970aa31de3cc0bafe5f2baacf974119bea4..3406d70136202bcad7bf040d7a5a3b9b7864e3dc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023  CEA, EDF, 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,9 @@
 // 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 <QX11Info>
+#if !defined(WIN32) && !defined(__APPLE__)
+#include <xcb/xcb.h>
+#include <QX11Info>
 #endif
 #include <QMouseEvent>
 
@@ -81,7 +82,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 +110,10 @@ QVTK_RenderWindowInteractor
 QVTK_RenderWindowInteractor
 ::~QVTK_RenderWindowInteractor() 
 {
-#ifndef WIN32
-  SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance();
+#if !defined WIN32 && !defined __APPLE__
+  SVTK_SpaceMouseXCB* aSpaceMouse = SVTK_SpaceMouseXCB::getInstance();
   if ( aSpaceMouse && aSpaceMouse->isSpaceMouseOn() )
-    aSpaceMouse->close( QX11Info::display() );
+    aSpaceMouse->close( QX11Info::connection() );
 #endif
 }
 
@@ -196,7 +197,7 @@ QVTK_RenderWindowInteractor
 */
 void
 QVTK_RenderWindowInteractor
-::paintEvent( QPaintEvent* theEvent ) 
+::paintEvent( QPaintEvent* /*theEvent*/ ) 
 {
   GetDevice()->CreateTimer(VTKI_TIMER_FIRST);
 }
@@ -207,7 +208,7 @@ QVTK_RenderWindowInteractor
 */
 void
 QVTK_RenderWindowInteractor
-::resizeEvent( QResizeEvent* theEvent )
+::resizeEvent( QResizeEvent* /*theEvent*/ )
 {
   int* aSize = getRenderWindow()->GetSize();
   int aWidth = aSize[0];
@@ -242,7 +243,7 @@ QVTK_RenderWindowInteractor
 */
 void
 QVTK_RenderWindowInteractor
-::contextMenuEvent( QContextMenuEvent* event )
+::contextMenuEvent( QContextMenuEvent* /*event*/ )
 {}
 
 /*!
@@ -320,7 +321,7 @@ QVTK_RenderWindowInteractor
 */
 void
 QVTK_RenderWindowInteractor
-::mouseDoubleClickEvent( QMouseEvent* event )
+::mouseDoubleClickEvent( QMouseEvent* /*event*/ )
 {}
 
 
@@ -377,7 +378,7 @@ QVTK_RenderWindowInteractor
 */
 void  
 QVTK_RenderWindowInteractor
-::enterEvent( QEvent* event )
+::enterEvent( QEvent* /*event*/ )
 {
   if(FOCUS_UNDER_MOUSE){
     activateWindow();
@@ -406,17 +407,16 @@ QVTK_RenderWindowInteractor
 {
   QWidget::focusInEvent( event );
 
-#ifndef WIN32
+#if !defined WIN32 && !defined __APPLE__
   // register set space mouse events receiver
-  SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance();
-
+  SVTK_SpaceMouseXCB* aSpaceMouse = SVTK_SpaceMouseXCB::getInstance();
   if ( aSpaceMouse )
   {
     if ( !aSpaceMouse->isSpaceMouseOn() )
-      // initialize 3D space mouse driver 
-      aSpaceMouse->initialize( QX11Info::display(), winId() );
+      // initialize 3D space mouse driver
+      aSpaceMouse->initialize( QX11Info::connection(), winId() );
     else
-      aSpaceMouse->setWindow( QX11Info::display(), winId() );
+      aSpaceMouse->setWindow( QX11Info::connection(), winId() );
   }
 #endif
 }
@@ -431,61 +431,46 @@ QVTK_RenderWindowInteractor
 {
   QWidget::focusOutEvent( event );
 
-#ifndef WIN32
-  // unregister set space mouse events receiver
-  SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance();
+#if !defined WIN32 && !defined __APPLE__
+  SVTK_SpaceMouseXCB* aSpaceMouse = SVTK_SpaceMouseXCB::getInstance();
   if ( aSpaceMouse && aSpaceMouse->isSpaceMouseOn() )
-    aSpaceMouse->setWindow( QX11Info::display(), 0 );
+    aSpaceMouse->setWindow( QX11Info::connection(), 0 );
 #endif
 }
 
-
-#ifdef WIN32
-
-/*!
-  To handle native Win32 events (from such devices as SpaceMouse)
-*/
-bool QVTK_RenderWindowInteractor::winEvent( MSG* msg, long* result )
+bool QVTK_RenderWindowInteractor
+::nativeEvent(const QByteArray& eventType, void* message, long* result)
 {
-  // TODO: Implement event handling for SpaceMouse
-  return QWidget::winEvent( msg, result);
-}
-
-#else
-
-/*!
-  To handle native X11 events (from such devices as SpaceMouse)
-*/
-bool 
-QVTK_RenderWindowInteractor
-::x11Event( XEvent *xEvent )
-{
-  // handle 3d space mouse events
-  if ( SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance() )
+#if defined(WIN32)
+  // TODO: WIN32-related implementation
+#elif !defined(__APPLE__)
+  if ( eventType == "xcb_generic_event_t" )
   {
-    if ( aSpaceMouse->isSpaceMouseOn() && xEvent->type == ClientMessage )
+    xcb_generic_event_t* ev = static_cast<xcb_generic_event_t *>(message);
+    if ( SVTK_SpaceMouseXCB* aSpaceMouse = SVTK_SpaceMouseXCB::getInstance() )
     {
-      SVTK_SpaceMouse::MoveEvent anEvent;
-      int type = aSpaceMouse->translateEvent( QX11Info::display(), xEvent, &anEvent, 1.0, 1.0 );
-      switch ( type )
+      if ( aSpaceMouse->isSpaceMouseOn() && ev->response_type == XCB_CLIENT_MESSAGE )
       {
-      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;
+        SVTK_SpaceMouse::MoveEvent anEvent;
+        int type = aSpaceMouse->translateEvent( QX11Info::connection(), (xcb_client_message_event_t*)ev, &anEvent, 1.0, 1.0 );
+        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
       }
-      return true; // stop handling the event
     }
   }
-
-  return QWidget::x11Event( xEvent );
-}
-
 #endif
+ return QWidget::nativeEvent( eventType, message, result );
+}
 
 /*!
   Constructor
@@ -532,10 +517,6 @@ SVTK_RenderWindowInteractor
     aStyle->SetInteractor(NULL);
     myInteractorStyles.pop();
   }
-
-  SetRenderer(NULL);
-
-  GetDevice()->SetRenderWindow(NULL);
 }
 
 /*!