0030507: Visualization - introduce AIS_ViewController
[occt.git] / src / Xw / Xw_Window.hxx
old mode 100755 (executable)
new mode 100644 (file)
index dac5840..5356f07
@@ -1,11 +1,11 @@
 // Created on: 2013-04-06
 // Created by: Kirill Gavrilov
-// Copyright (c) 2013 OPEN CASCADE SAS
+// Copyright (c) 2013-2014 OPEN CASCADE SAS
 //
 // This file is part of Open CASCADE Technology software library.
 //
-// This library is free software; you can redistribute it and / or modify it
-// under the terms of the GNU Lesser General Public version 2.1 as published
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
 // by the Free Software Foundation, with special exception defined in the file
 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
 // distribution for complete text of the license and disclaimer of any warranty.
 #ifndef _Xw_Window_H__
 #define _Xw_Window_H__
 
-#if !defined(_WIN32) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX))
+#if !defined(_WIN32) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX)) && !defined(__ANDROID__) && !defined(__QNX__)
 
 #include <Aspect_Window.hxx>
 
+#include <Aspect_VKey.hxx>
 #include <Aspect_DisplayConnection.hxx>
 #include <Aspect_FillMethod.hxx>
 #include <Aspect_GradientFillMethod.hxx>
 #include <Aspect_Handle.hxx>
 #include <Aspect_TypeOfResize.hxx>
 #include <Standard.hxx>
-#include <Standard_DefineHandle.hxx>
+#include <Standard_Type.hxx>
 #include <Quantity_NameOfColor.hxx>
-#include <Quantity_Parameter.hxx>
-#include <Quantity_Ratio.hxx>
 
 class Aspect_WindowDefinitionError;
 class Aspect_WindowError;
@@ -40,6 +39,10 @@ class Aspect_GradientBackground;
 //! This class defines XLib window intended for creation of OpenGL context.
 class Xw_Window : public Aspect_Window
 {
+public:
+
+  //! Convert X11 virtual key (KeySym) into Aspect_VKey.
+  Standard_EXPORT static Aspect_VKey VirtualKeyFromNative (unsigned long theKey);
 
 public:
 
@@ -50,47 +53,44 @@ public:
                              const Standard_Integer thePxLeft,
                              const Standard_Integer thePxTop,
                              const Standard_Integer thePxWidth,
-                             const Standard_Integer thePxHeight);
+                             const Standard_Integer thePxHeight,
+                             const Aspect_FBConfig  theFBConfig = NULL);
 
   //! Creates a wrapper over existing Window handle
   Standard_EXPORT Xw_Window (const Handle(Aspect_DisplayConnection)& theXDisplay,
-                             const Window theXWin);
-
-  //! Destroies the Window and all resourses attached to it
-  Standard_EXPORT virtual void Destroy();
+                             const Window theXWin,
+                             const Aspect_FBConfig theFBConfig = NULL);
 
-  ~Xw_Window()
-  {
-    Destroy();
-  }
+  //! Destroys the Window and all resourses attached to it
+  Standard_EXPORT ~Xw_Window();
 
   //! Opens the window <me>
-  Standard_EXPORT virtual void Map() const;
+  Standard_EXPORT virtual void Map() const Standard_OVERRIDE;
 
   //! Closes the window <me>
-  Standard_EXPORT virtual void Unmap() const;
+  Standard_EXPORT virtual void Unmap() const Standard_OVERRIDE;
 
   //! Applies the resizing to the window <me>
-  Standard_EXPORT virtual Aspect_TypeOfResize DoResize() const;
+  Standard_EXPORT virtual Aspect_TypeOfResize DoResize() const Standard_OVERRIDE;
 
   //! Apply the mapping change to the window <me>
-  Standard_EXPORT virtual Standard_Boolean DoMapping() const;
+  Standard_EXPORT virtual Standard_Boolean DoMapping() const Standard_OVERRIDE;
 
   //! Returns True if the window <me> is opened
-  Standard_EXPORT virtual Standard_Boolean IsMapped() const;
+  Standard_EXPORT virtual Standard_Boolean IsMapped() const Standard_OVERRIDE;
 
   //! Returns The Window RATIO equal to the physical WIDTH/HEIGHT dimensions
-  Standard_EXPORT virtual Quantity_Ratio Ratio() const;
+  Standard_EXPORT virtual Standard_Real Ratio() const Standard_OVERRIDE;
 
   //! Returns The Window POSITION in PIXEL
   Standard_EXPORT virtual void Position (Standard_Integer& X1,
                                          Standard_Integer& Y1,
                                          Standard_Integer& X2,
-                                         Standard_Integer& Y2) const;
+                                         Standard_Integer& Y2) const Standard_OVERRIDE;
 
   //! Returns The Window SIZE in PIXEL
   Standard_EXPORT virtual void Size (Standard_Integer& theWidth,
-                                     Standard_Integer& theHeight) const;
+                                     Standard_Integer& theHeight) const Standard_OVERRIDE;
 
   //! @return native Window handle
   Standard_EXPORT Window XWindow() const;
@@ -98,10 +98,39 @@ public:
   //! @return connection to X Display
   Standard_EXPORT const Handle(Aspect_DisplayConnection)& DisplayConnection() const;
 
+  //! @return native Window handle
+  virtual Aspect_Drawable NativeHandle() const Standard_OVERRIDE
+  {
+    return (Aspect_Drawable )XWindow();
+  }
+
+  //! @return parent of native Window handle
+  virtual Aspect_Drawable NativeParentHandle() const Standard_OVERRIDE
+  {
+    return 0;
+  }
+
+  //! @return native Window FB config (GLXFBConfig on Xlib)
+  virtual Aspect_FBConfig NativeFBConfig() const Standard_OVERRIDE
+  {
+    return myFBConfig;
+  }
+
+  //! Sets window title.
+  Standard_EXPORT virtual void SetTitle (const TCollection_AsciiString& theTitle) Standard_OVERRIDE;
+
+  //! Invalidate entire window content through generation of Expose event.
+  //! This method does not aggregate multiple calls into single event - dedicated event will be sent on each call.
+  //! When NULL display connection is specified, the connection specified on window creation will be used.
+  //! Sending exposure messages from non-window thread would require dedicated display connection opened specifically
+  //! for this working thread to avoid race conditions, since Xlib display connection is not thread-safe by default.
+  Standard_EXPORT virtual void InvalidateContent (const Handle(Aspect_DisplayConnection)& theDisp) Standard_OVERRIDE;
+
 protected:
 
   Handle(Aspect_DisplayConnection) myDisplay; //!< X Display connection
   Window           myXWindow;  //!< XLib window handle
+  Aspect_FBConfig  myFBConfig; //!< GLXFBConfig
   Standard_Integer myXLeft;    //!< left   position in pixels
   Standard_Integer myYTop;     //!< top    position in pixels
   Standard_Integer myXRight;   //!< right  position in pixels
@@ -110,7 +139,7 @@ protected:
 
 public:
 
-  DEFINE_STANDARD_RTTI(Xw_Window)
+  DEFINE_STANDARD_RTTIEXT(Xw_Window,Aspect_Window)
 
 };