0030429: Samples - add simple glfw 3D Viewer sample
[occt.git] / src / Aspect / Aspect_DisplayConnection.cxx
1 // Copyright (c) 2013-2014 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 #include <Aspect_DisplayConnection.hxx>
15
16 #include <Aspect_DisplayConnectionDefinitionError.hxx>
17 #include <OSD_Environment.hxx>
18
19
20 IMPLEMENT_STANDARD_RTTIEXT(Aspect_DisplayConnection,Standard_Transient)
21
22 // =======================================================================
23 // function : Aspect_DisplayConnection
24 // purpose  :
25 // =======================================================================
26 Aspect_DisplayConnection::Aspect_DisplayConnection()
27 {
28 #if !defined(_WIN32) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX)) && !defined(__ANDROID__) && !defined(__QNX__)
29   myDisplay = NULL;
30   myIsOwnDisplay = false;
31   OSD_Environment anEnv ("DISPLAY");
32   myDisplayName = anEnv.Value();
33   Init (NULL);
34 #endif
35 }
36
37 // =======================================================================
38 // function : ~Aspect_DisplayConnection
39 // purpose  :
40 // =======================================================================
41 Aspect_DisplayConnection::~Aspect_DisplayConnection()
42 {
43 #if !defined(_WIN32) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX)) && !defined(__ANDROID__) && !defined(__QNX__)
44   if (myDisplay != NULL
45    && myIsOwnDisplay)
46   {
47     XCloseDisplay (myDisplay);
48   }
49 #endif
50 }
51
52 #if !defined(_WIN32) && (!defined(__APPLE__) || defined(MACOSX_USE_GLX)) && !defined(__ANDROID__) && !defined(__QNX__)
53 // =======================================================================
54 // function : Aspect_DisplayConnection
55 // purpose  :
56 // =======================================================================
57 Aspect_DisplayConnection::Aspect_DisplayConnection (const TCollection_AsciiString& theDisplayName)
58 : myDisplay (NULL),
59   myIsOwnDisplay (false)
60 {
61   myDisplayName = theDisplayName;
62   Init (NULL);
63 }
64
65 // =======================================================================
66 // function : Aspect_DisplayConnection
67 // purpose  :
68 // =======================================================================
69 Aspect_DisplayConnection::Aspect_DisplayConnection (Display* theDisplay)
70 : myDisplay (NULL),
71   myIsOwnDisplay (false)
72 {
73   Init (theDisplay);
74 }
75
76 // =======================================================================
77 // function : Init
78 // purpose  :
79 // =======================================================================
80 void Aspect_DisplayConnection::Init (Display* theDisplay)
81 {
82   if (myDisplay != NULL
83    && myIsOwnDisplay)
84   {
85     XCloseDisplay (myDisplay);
86   }
87   myIsOwnDisplay = false;
88   myAtoms.Clear();
89
90   myDisplay = theDisplay != NULL ? theDisplay : XOpenDisplay (myDisplayName.ToCString());
91   if (myDisplay == NULL)
92   {
93     TCollection_AsciiString aMessage;
94     aMessage += "Can not connect to the server \"";
95     aMessage += myDisplayName + "\"";
96     throw Aspect_DisplayConnectionDefinitionError(aMessage.ToCString());
97   }
98   else
99   {
100     myIsOwnDisplay = theDisplay == NULL;
101     myAtoms.Bind (Aspect_XA_DELETE_WINDOW, XInternAtom(myDisplay, "WM_DELETE_WINDOW", False));
102   }
103 }
104
105 // =======================================================================
106 // function : GetAtom
107 // purpose  :
108 // =======================================================================
109 Atom Aspect_DisplayConnection::GetAtom (const Aspect_XAtom theAtom) const
110 {
111   Atom anAtom = myAtoms.Find(theAtom);
112   return anAtom;
113 }
114
115 #endif