Salome HOME
Merge from V6_main 28/02/2013
[modules/gui.git] / src / OCCViewer / OCCViewer_VService.cxx
index 86181d9538dfb24a86ffe810d182c3d9323339d9..e4fb689b8ddf21bc42279d7df5796389fc4fd9da 100755 (executable)
 #include <V3d_Viewer.hxx>
 #include <V3d_View.hxx>
 
+#include <Basics_OCCTVersion.hxx>
+
+#if OCC_VERSION_LARGE > 0x06050500
+
+//
+// new code, changed in OCCT v6.6.0
+//
+
+#include <Aspect_DisplayConnection.hxx>
+#include <Graphic3d.hxx>
+#include <Graphic3d_GraphicDriver.hxx>
+#ifdef WNT
+#include <WNT_Window.hxx>
+#else
+#include <Xw_Window.hxx>
+#endif
+
+#else // #if OCC_VERSION_LARGE > 0x06050500
+
+//
+// obsolete code (before OCCT v6.6.0); to be removed
+//
+
 #ifdef WNT
 #include <WNT_Window.hxx>
 #include <Graphic3d_WNTGraphicDevice.hxx>
 #include <Graphic3d_GraphicDevice.hxx>
 #endif
 
+#endif // #if OCC_VERSION_LARGE > 0x06050500
+
 /*!
     Create native view window for CasCade view [ static ]
 */
 Handle(Aspect_Window) OCCViewer_VService::CreateWindow( const Handle(V3d_View)& view,
-                                                        const Standard_Integer hiwin,
-                                                        const Standard_Integer lowin,
-                                                        const Xw_WindowQuality quality )
+                                                       WId winId )
 {
+#if OCC_VERSION_LARGE > 0x06050500
+
+//
+// new code, changed in OCCT v6.6.0
+//
+  Aspect_Handle aWindowHandle = (Aspect_Handle)winId;
+#ifdef WNT
+  Handle(WNT_Window) viewWindow = new WNT_Window( aWindowHandle );
+#else
+  Handle(Aspect_DisplayConnection) aDispConnection = view->Viewer()->Driver()->GetDisplayConnection();
+  Handle(Xw_Window) viewWindow = new Xw_Window( aDispConnection, aWindowHandle );
+#endif
+  return viewWindow;
+
+#else // #if OCC_VERSION_LARGE > 0x06050500
+
+//
+// obsolete code (before OCCT v6.6.0); to be removed
+//
+  int hwnd = (int)winId;
+  short lowin = (short)hwnd;
+  short hiwin = (short)( hwnd >> 16 );
+
 #ifdef WNT
   Handle(WNT_Window) viewWindow = new WNT_Window( Handle(Graphic3d_WNTGraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin );
   // Prevent flickering
   viewWindow->SetFlags( WDF_NOERASEBKGRND );
 #else
-  Handle(Xw_Window) viewWindow = new Xw_Window( Handle(Graphic3d_GraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin, quality );
+  Handle(Xw_Window) viewWindow = new Xw_Window( Handle(Graphic3d_GraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin, Xw_WQ_SAMEQUALITY );
 #endif
   return viewWindow;
+
+#endif // #if OCC_VERSION_LARGE > 0x06050500
 }
 
 /*!
     Maps CasCade view to the window [ static ]
 */
-void OCCViewer_VService::SetWindow( const Handle(V3d_View)& view,
-                                    const Standard_Integer hiwin,
-                                    const Standard_Integer lowin,
-                                    const Xw_WindowQuality quality )
-{
-  view->SetWindow( OCCViewer_VService::CreateWindow( view, hiwin, lowin, quality ) );
-}
+// void OCCViewer_VService::SetWindow( const Handle(V3d_View)& view,
+//                                     const Standard_Integer hiwin,
+//                                     const Standard_Integer lowin,
+//                                     const Xw_WindowQuality quality )
+// {
+//   view->SetWindow( OCCViewer_VService::CreateWindow( view, hiwin, lowin, quality ) );
+// }
 
 /*!
     Magnifies 'view' based on previous view [ static ]
 */
-void OCCViewer_VService::SetMagnify( const Handle(V3d_View)& view,
-                                    const Standard_Integer hiwin,
-                                    const Standard_Integer lowin,
-                                    const Handle(V3d_View)& prevView,
-                                    const Standard_Integer x1,
-                                    const Standard_Integer y1,
-                                    const Standard_Integer x2,
-                                    const Standard_Integer y2,
-                                    const Xw_WindowQuality aQuality )
-{
-#ifdef WNT
-  Handle(WNT_Window) w =
-    new WNT_Window( Handle(Graphic3d_WNTGraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin );
-#else
-  Handle(Xw_Window) w =
-    new Xw_Window( Handle(Graphic3d_GraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin, aQuality );
-#endif
-  view->SetMagnify( w, prevView, x1, y1, x2, y2 );
-}
+// void OCCViewer_VService::SetMagnify( const Handle(V3d_View)& view,
+//                                  const Standard_Integer hiwin,
+//                                  const Standard_Integer lowin,
+//                                  const Handle(V3d_View)& prevView,
+//                                  const Standard_Integer x1,
+//                                  const Standard_Integer y1,
+//                                  const Standard_Integer x2,
+//                                  const Standard_Integer y2,
+//                                  const Xw_WindowQuality aQuality )
+// {
+// #ifdef WNT
+//   Handle(WNT_Window) w =
+//     new WNT_Window( Handle(Graphic3d_WNTGraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin );
+// #else
+//   Handle(Xw_Window) w =
+//     new Xw_Window( Handle(Graphic3d_GraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin, aQuality );
+// #endif
+//   view->SetMagnify( w, prevView, x1, y1, x2, y2 );
+// }
 
 /*!
     Creates viewer 3d [ static ]
@@ -96,6 +144,32 @@ Handle(V3d_Viewer) OCCViewer_VService::Viewer3d( const Standard_CString aDisplay
                                                 const Standard_Boolean ComputedMode,
                                                 const Standard_Boolean aDefaultComputedMode )
 {
+#if OCC_VERSION_LARGE > 0x06050500
+
+//
+// new code, changed in OCCT v6.6.0
+//
+
+  static Handle(Graphic3d_GraphicDriver) aGraphicDriver;
+  if (aGraphicDriver.IsNull())
+  {
+    Handle(Aspect_DisplayConnection) aDisplayConnection;
+#ifndef WNT
+    aDisplayConnection = new Aspect_DisplayConnection( aDisplay );
+#endif
+    aGraphicDriver = Graphic3d::InitGraphicDriver( aDisplayConnection );
+  }
+
+  return new V3d_Viewer( aGraphicDriver, aName, aDomain, ViewSize, ViewProj,
+                        Quantity_NOC_GRAY30, V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT,
+                        ComputedMode, aDefaultComputedMode, V3d_TEX_NONE );
+  
+#else // #if OCC_VERSION_LARGE > 0x06050500
+
+//
+// obsolete code (before OCCT v6.6.0); to be removed
+//
+
 #ifndef WNT
   static Handle(Graphic3d_GraphicDevice) defaultdevice;
   if ( defaultdevice.IsNull() )
@@ -111,4 +185,6 @@ Handle(V3d_Viewer) OCCViewer_VService::Viewer3d( const Standard_CString aDisplay
                         Quantity_NOC_GRAY30, V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT,
                         ComputedMode, aDefaultComputedMode, V3d_TEX_NONE);
 #endif  // WNT
+
+#endif // #if OCC_VERSION_LARGE > 0x06050500
 }