0032308: Configuration - make Xlib dependency optional
[occt.git] / src / Aspect / Aspect_DisplayConnection.hxx
index 2cfba3d..5bde7a4 100755 (executable)
 
 #include <Standard_Transient.hxx>
 #include <Aspect_XAtom.hxx>
+#include <Aspect_FBConfig.hxx>
 
 #include <TCollection_AsciiString.hxx>
 #include <NCollection_DataMap.hxx>
 
-#if !defined(_WIN32) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX)) && !defined(__ANDROID__) && !defined(__QNX__) && !defined(__EMSCRIPTEN__)
-  #include <InterfaceGraphic.hxx>
-  #include <Aspect_FBConfig.hxx>
-#endif
+struct Aspect_XDisplay;
+struct Aspect_XVisualInfo;
 
 //! This class creates and provides connection with X server.
 //! Raises exception if can not connect to X server.
-//! On Windows and Mac OS X (in case when Cocoa used) platforms this class do nothing.
-//! WARRNING: Do not close display connection manualy!
-
+//! On Windows and Mac OS X (in case when Cocoa used) platforms this class does nothing.
+//! WARRNING: Do not close display connection manually!
 class Aspect_DisplayConnection : public Standard_Transient
 {
+  DEFINE_STANDARD_RTTIEXT(Aspect_DisplayConnection, Standard_Transient)
 public:
 
   //! Default constructor. Creates connection with display name taken from "DISPLAY" environment variable
   Standard_EXPORT Aspect_DisplayConnection();
 
   //! Destructor. Close opened connection.
-  Standard_EXPORT ~Aspect_DisplayConnection();
+  Standard_EXPORT virtual ~Aspect_DisplayConnection();
 
-#if !defined(_WIN32) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX)) && !defined(__ANDROID__) && !defined(__QNX__) && !defined(__EMSCRIPTEN__)
   //! Constructor. Creates connection with display specified in theDisplayName.
   //! Display name should be in format "hostname:number" or "hostname:number.screen_number", where:
   //! hostname      - Specifies the name of the host machine on which the display is physically attached.
   //! number        - Specifies the number of the display server on that host machine.
   //! screen_number - Specifies the screen to be used on that server. Optional variable.
-  Aspect_DisplayConnection (const TCollection_AsciiString& theDisplayName);
+  Standard_EXPORT Aspect_DisplayConnection (const TCollection_AsciiString& theDisplayName);
 
   //! Constructor wrapping existing Display instance.
   //! WARNING! it is a responsibility of application to keep this pointer
   //! valid while Aspect_DisplayConnection is alive and to close Display when it is no more needed.
-  Aspect_DisplayConnection (Display* theDisplay);
+  Standard_EXPORT Aspect_DisplayConnection (Aspect_XDisplay* theDisplay);
 
   //! @return pointer to Display structure that serves as the connection to the X server.
-  Display* GetDisplay() { return myDisplay; }
+  Aspect_XDisplay* GetDisplayAspect() { return myDisplay; }
 
   //! @return TRUE if X Display has been allocated by this class
   Standard_Boolean IsOwnDisplay() const { return myIsOwnDisplay; }
 
   //! @return identifier(atom) for custom named property associated with windows that use current connection to X server.
-  Atom GetAtom (const Aspect_XAtom theAtom) const;
+  uint64_t GetAtom (const Aspect_XAtom theAtom) const
+  {
+    return myAtoms.Find (theAtom);
+  }
 
   //! @return display name for this connection.
   const TCollection_AsciiString& GetDisplayName() { return myDisplayName; }
@@ -71,27 +72,60 @@ public:
   //! to keep this pointer valid while Aspect_DisplayConnection is alive
   //! and to close Display when it is no more needed.
   //! @param theDisplay external pointer to allocated Display, or NULL if new connection should be created
-  void Init (Display* theDisplay);
+  Standard_EXPORT void Init (Aspect_XDisplay* theDisplay);
 
   //! Return default window visual or NULL when undefined.
-  XVisualInfo* GetDefaultVisualInfo() const { return myDefVisualInfo; }
+  Aspect_XVisualInfo* GetDefaultVisualInfo() const { return myDefVisualInfo; }
 
   //! @return native Window FB config (GLXFBConfig on Xlib)
   Aspect_FBConfig GetDefaultFBConfig() const { return myDefFBConfig; }
 
   //! Set default window visual; the visual will be deallocated using XFree().
-  Standard_EXPORT void SetDefaultVisualInfo (XVisualInfo* theVisual,
+  Standard_EXPORT void SetDefaultVisualInfo (Aspect_XVisualInfo* theVisual,
                                              Aspect_FBConfig theFBConfig);
 
+#ifdef X_PROTOCOL
+  //! Constructor wrapping existing Display instance.
+  //! WARNING! it is a responsibility of application to keep this pointer
+  //! valid while Aspect_DisplayConnection is alive and to close Display when it is no more needed.
+  Aspect_DisplayConnection (Display* theDisplay)
+  : Aspect_DisplayConnection ((Aspect_XDisplay* )theDisplay) {}
+
+  //! @return pointer to Display structure that serves as the connection to the X server.
+  Display* GetDisplay() { return (Display* )myDisplay; }
+
+  //! Return default window visual or NULL when undefined.
+  XVisualInfo* GetDefaultVisualInfoX() const { return (XVisualInfo* )myDefVisualInfo; }
+
+  //! Set default window visual; the visual will be deallocated using XFree().
+  void SetDefaultVisualInfo (XVisualInfo* theVisual,
+                             Aspect_FBConfig theFBConfig)
+  {
+    SetDefaultVisualInfo ((Aspect_XVisualInfo* )theVisual, theFBConfig);
+  }
+
+  //! @return identifier(atom) for custom named property associated with windows that use current connection to X server.
+  Atom GetAtomX (const Aspect_XAtom theAtom) const
+  {
+    return (Atom )GetAtom (theAtom);
+  }
+
+  //! Open connection with display specified in myDisplayName class field
+  //! or takes theDisplay parameter when it is not NULL.
+  void Init (Display* theDisplay)
+  {
+    Init ((Aspect_XDisplay* )theDisplay);
+  }
+#endif
+
 private:
 
-  Display*                 myDisplay;
-  XVisualInfo*             myDefVisualInfo;
+  Aspect_XDisplay*         myDisplay;
+  Aspect_XVisualInfo*      myDefVisualInfo;
   Aspect_FBConfig          myDefFBConfig;
-  NCollection_DataMap<Aspect_XAtom, Atom> myAtoms;
+  NCollection_DataMap<Aspect_XAtom, uint64_t> myAtoms;
   TCollection_AsciiString  myDisplayName;
   Standard_Boolean         myIsOwnDisplay;
-#endif
 
 private:
 
@@ -99,10 +133,6 @@ private:
   Aspect_DisplayConnection            (const Aspect_DisplayConnection& );
   Aspect_DisplayConnection& operator= (const Aspect_DisplayConnection& );
 
-public:
-
-  DEFINE_STANDARD_RTTIEXT(Aspect_DisplayConnection,Standard_Transient) // Type definition
-
 };
 
 DEFINE_STANDARD_HANDLE (Aspect_DisplayConnection, Standard_Transient)