fixed spacing in the headers to get rid of some warnings and some other
[blender.git] / intern / ghost / intern / GHOST_WindowX11.h
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 /**
33
34  * $Id$
35  * Copyright (C) 2001 NaN Technologies B.V.
36  * @author      Maarten Gribnau
37  * @date        May 7, 2001
38  */
39
40 #ifndef _GHOST_WINDOWX11_H_
41 #define _GHOST_WINDOWX11_H_
42
43 #include "GHOST_Window.h"
44 #include <X11/Xlib.h>
45 #include <GL/glx.h>
46
47 #include <map>
48
49 class STR_String;
50 class GHOST_SystemX11;
51
52 /**
53  * X11 implementation of GHOST_IWindow.
54  * Dimensions are given in screen coordinates that are relative to the upper-left corner of the screen. 
55  * @author      Laurence Bourn
56  * @date        October 26, 2001
57  */
58
59 class GHOST_WindowX11 : public GHOST_Window
60 {
61 public:
62         /**
63          * Constructor.
64          * Creates a new window and opens it.
65          * To check if the window was created properly, use the getValid() method.
66          * @param title         The text shown in the title bar of the window.
67          * @param left          The coordinate of the left edge of the window.
68          * @param top           The coordinate of the top edge of the window.
69          * @param width         The width the window.
70          * @param height        The height the window.
71          * @param state         The state the window is initially opened with.
72          * @param type          The type of drawing context installed in this window.
73          * @param stereoVisual  Stereo visual for quad buffered stereo.
74          */
75         GHOST_WindowX11(
76                 GHOST_SystemX11 *system,
77                 Display * display,
78                 const STR_String& title, 
79                 GHOST_TInt32 left,
80                 GHOST_TInt32 top,
81                 GHOST_TUns32 width,     
82                 GHOST_TUns32 height,
83                 GHOST_TWindowState state,
84                 GHOST_TDrawingContextType type = GHOST_kDrawingContextTypeNone,
85                 const bool stereoVisual = false
86         );
87
88                 bool 
89         getValid(
90         ) const;
91
92                 void 
93         setTitle(const STR_String& title);
94
95                 void 
96         getTitle(
97                 STR_String& title
98         ) const;
99
100                 void 
101         getWindowBounds(
102                 GHOST_Rect& bounds
103         ) const;
104         
105                 void 
106         getClientBounds(
107                 GHOST_Rect& bounds
108         ) const;
109
110                 GHOST_TSuccess 
111         setClientWidth(
112                 GHOST_TUns32 width
113         );
114
115                 GHOST_TSuccess 
116         setClientHeight(
117                 GHOST_TUns32 height
118         );
119
120                 GHOST_TSuccess 
121         setClientSize(
122                 GHOST_TUns32 width,
123                 GHOST_TUns32 height
124         );
125
126                 void 
127         screenToClient(
128                 GHOST_TInt32 inX,
129                 GHOST_TInt32 inY,
130                 GHOST_TInt32& outX,
131                 GHOST_TInt32& outY
132         ) const;
133
134                 void 
135         clientToScreen(
136                 GHOST_TInt32 inX,
137                 GHOST_TInt32 inY,
138                 GHOST_TInt32& outX,
139                 GHOST_TInt32& outY
140         ) const;
141         
142                 GHOST_TWindowState 
143         getState(
144         ) const ;
145
146                 GHOST_TSuccess 
147         setState(
148                 GHOST_TWindowState state
149         );
150         
151                 GHOST_TSuccess 
152         setOrder(
153                 GHOST_TWindowOrder order
154         );
155         
156                 GHOST_TSuccess 
157         swapBuffers(
158         );
159         
160                 GHOST_TSuccess 
161         activateDrawingContext(
162         );
163                 GHOST_TSuccess 
164         invalidate(
165         );
166
167         /**
168          * Destructor.
169          * Closes the window and disposes resources allocated.
170          */
171          ~GHOST_WindowX11();
172
173         /**
174          * @section 
175          * X11 system specific calls.
176          */
177
178         /**
179          * The reverse of invalidate! Tells this window
180          * that all events for it have been pushed into
181          * the GHOST event queue.
182          */
183
184                 void
185         validate(
186         );      
187
188         /**     
189          * Return a handle to the x11 window type.
190          */
191                 Window 
192         getXWindow(
193         );      
194
195 protected:
196         /**
197          * Tries to install a rendering context in this window.
198          * @param type  The type of rendering context installed.
199          * @return Indication as to whether installation has succeeded.
200          */
201                 GHOST_TSuccess 
202         installDrawingContext(
203                 GHOST_TDrawingContextType type
204         );
205
206         /**
207          * Removes the current drawing context.
208          * @return Indication as to whether removal has succeeded.
209          */
210                 GHOST_TSuccess 
211         removeDrawingContext(
212         );
213
214         /**
215          * Sets the cursor visibility on the window using
216          * native window system calls.
217          */
218                 GHOST_TSuccess 
219         setWindowCursorVisibility(
220                 bool visible
221         );
222         
223         /**
224          * Sets the cursor shape on the window using
225          * native window system calls.
226          */
227                 GHOST_TSuccess 
228         setWindowCursorShape(
229                 GHOST_TStandardCursor shape
230         );
231
232         /**
233          * Sets the cursor shape on the window using
234          * native window system calls.
235          */
236                 GHOST_TSuccess
237         setWindowCustomCursorShape(
238                 GHOST_TUns8 bitmap[16][2], 
239                 GHOST_TUns8 mask[16][2], 
240                 int hotX, 
241                 int hotY
242         );
243
244 private :
245
246         /// Force use of public constructor.
247         
248         GHOST_WindowX11(
249         );
250
251         GHOST_WindowX11(
252                 const GHOST_WindowX11 &
253         );
254
255                 Cursor
256         getStandardCursor(
257                 GHOST_TStandardCursor g_cursor
258         );
259         
260                 Cursor 
261         getEmptyCursor(
262         );
263         
264         GLXContext      m_context;
265         Window  m_window;
266         Display         *m_display;
267         XVisualInfo     *m_visual;
268
269         /** The first created OpenGL context (for sharing display lists) */
270         static GLXContext s_firstContext;
271
272         /// A pointer to the typed system class.
273         
274         GHOST_SystemX11 * m_system;
275
276         bool m_valid_setup;
277
278         /** Used to concatenate calls to invalidate() on this window. */
279         bool m_invalid_window;
280
281         /** XCursor structure of an empty (blank) cursor */
282         Cursor m_empty_cursor;
283         
284         /** XCursor structure of the custom cursor */
285         Cursor m_custom_cursor;
286         
287         /** Cache of XC_* ID's to XCursor structures */
288         std::map<unsigned int, Cursor> m_standard_cursors;
289 };
290
291
292 #endif // _GHOST_WINDOWX11_H_
293