Cleanup: remove redundant doxygen \file argument
[blender.git] / intern / ghost / intern / GHOST_WindowCocoa.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file \ingroup GHOST
21  * Declaration of GHOST_WindowCocoa class.
22  */
23
24 #ifndef __GHOST_WINDOWCOCOA_H__
25 #define __GHOST_WINDOWCOCOA_H__
26
27 #ifndef __APPLE__
28 #error Apple OSX only!
29 #endif // __APPLE__
30
31 #include "GHOST_Window.h"
32 #include "STR_String.h"
33
34 @class CocoaWindow;
35 @class CocoaOpenGLView;
36 @class NSCursor;
37 @class NSScreen;
38
39 class GHOST_SystemCocoa;
40
41 class GHOST_WindowCocoa : public GHOST_Window {
42 public:
43         /**
44          * Constructor.
45          * Creates a new window and opens it.
46          * To check if the window was created properly, use the getValid() method.
47          * \param systemCocoa           The associated system class to forward events to
48          * \param title                         The text shown in the title bar of the window.
49          * \param left                          The coordinate of the left edge of the window.
50          * \param bottom                        The coordinate of the bottom edge of the window.
51          * \param width                         The width the window.
52          * \param height                        The height the window.
53          * \param state                         The state the window is initially opened with.
54          * \param type                          The type of drawing context installed in this window.
55          * \param stereoVisual          Stereo visual for quad buffered stereo.
56          * \param numOfAASamples        Number of samples used for AA (zero if no AA)
57          */
58         GHOST_WindowCocoa(
59             GHOST_SystemCocoa *systemCocoa,
60             const STR_String& title,
61             GHOST_TInt32 left,
62             GHOST_TInt32 bottom,
63             GHOST_TUns32 width,
64             GHOST_TUns32 height,
65             GHOST_TWindowState state,
66             GHOST_TDrawingContextType type = GHOST_kDrawingContextTypeNone,
67             const bool stereoVisual = false,
68             const GHOST_TUns16 numOfAASamples = 0,
69             bool is_debug = false
70             );
71
72         /**
73          * Destructor.
74          * Closes the window and disposes resources allocated.
75          */
76         ~GHOST_WindowCocoa();
77
78         /**
79          * Returns indication as to whether the window is valid.
80          * \return The validity of the window.
81          */
82         bool getValid() const;
83
84         /**
85          * Returns the associated NSWindow object
86          * \return The associated NSWindow object
87          */
88         void *getOSWindow() const;
89
90         /**
91          * Sets the title displayed in the title bar.
92          * \param title The title to display in the title bar.
93          */
94         void setTitle(const STR_String& title);
95
96         /**
97          * Returns the title displayed in the title bar.
98          * \param title The title displayed in the title bar.
99          */
100         void getTitle(STR_String& title) const;
101
102         /**
103          * Returns the window rectangle dimensions.
104          * The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen.
105          * \param bounds The bounding rectangle of the window.
106          */
107         void getWindowBounds(GHOST_Rect& bounds) const;
108
109         /**
110          * Returns the client rectangle dimensions.
111          * The left and top members of the rectangle are always zero.
112          * \param bounds The bounding rectangle of the client area of the window.
113          */
114         void getClientBounds(GHOST_Rect& bounds) const;
115
116         /**
117          * Resizes client rectangle width.
118          * \param width The new width of the client area of the window.
119          */
120         GHOST_TSuccess setClientWidth(GHOST_TUns32 width);
121
122         /**
123          * Resizes client rectangle height.
124          * \param height The new height of the client area of the window.
125          */
126         GHOST_TSuccess setClientHeight(GHOST_TUns32 height);
127
128         /**
129          * Resizes client rectangle.
130          * \param width         The new width of the client area of the window.
131          * \param height        The new height of the client area of the window.
132          */
133         GHOST_TSuccess setClientSize(GHOST_TUns32 width, GHOST_TUns32 height);
134
135         /**
136          * Returns the state of the window (normal, minimized, maximized).
137          * \return The state of the window.
138          */
139         GHOST_TWindowState getState() const;
140
141         /**
142          * Sets the window "modified" status, indicating unsaved changes
143          * \param isUnsavedChanges Unsaved changes or not
144          * \return Indication of success.
145          */
146         GHOST_TSuccess setModifiedState(bool isUnsavedChanges);
147
148         /**
149          * Converts a point in screen coordinates to client rectangle coordinates
150          * \param inX   The x-coordinate on the screen.
151          * \param inY   The y-coordinate on the screen.
152          * \param outX  The x-coordinate in the client rectangle.
153          * \param outY  The y-coordinate in the client rectangle.
154          */
155         void screenToClient(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const;
156
157         /**
158          * Converts a point in screen coordinates to client rectangle coordinates
159          * \param inX   The x-coordinate in the client rectangle.
160          * \param inY   The y-coordinate in the client rectangle.
161          * \param outX  The x-coordinate on the screen.
162          * \param outY  The y-coordinate on the screen.
163          */
164         void clientToScreen(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const;
165
166         /**
167          * Converts a point in screen coordinates to client rectangle coordinates
168          * but without the y coordinate conversion needed for ghost compatibility.
169          * \param inX   The x-coordinate in the client rectangle.
170          * \param inY   The y-coordinate in the client rectangle.
171          * \param outX  The x-coordinate on the screen.
172          * \param outY  The y-coordinate on the screen.
173          */
174         void clientToScreenIntern(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const;
175
176         /**
177          * Converts a point in screen coordinates to client rectangle coordinates,
178          * but without the y coordinate conversion needed for ghost compatibility.
179          * \param inX   The x-coordinate in the client rectangle.
180          * \param inY   The y-coordinate in the client rectangle.
181          * \param outX  The x-coordinate on the screen.
182          * \param outY  The y-coordinate on the screen.
183          */
184         void screenToClientIntern(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const;
185
186         /**
187          * Gets the screen the window is displayed in
188          * \return The NSScreen object
189          */
190         NSScreen *getScreen();
191
192         /**
193          * Sets the state of the window (normal, minimized, maximized).
194          * \param state The state of the window.
195          * \return Indication of success.
196          */
197         GHOST_TSuccess setState(GHOST_TWindowState state);
198
199         /**
200          * Sets the order of the window (bottom, top).
201          * \param order The order of the window.
202          * \return Indication of success.
203          */
204         GHOST_TSuccess setOrder(GHOST_TWindowOrder order);
205
206         void loadCursor(bool visible, GHOST_TStandardCursor cursor) const;
207
208         const GHOST_TabletData *GetTabletData()
209         {
210                 return &m_tablet;
211         }
212
213         GHOST_TabletData& GetCocoaTabletData()
214         {
215                 return m_tablet;
216         }
217
218         /**
219          * Sets the progress bar value displayed in the window/application icon
220          * \param progress The progress % (0.0 to 1.0)
221          */
222         GHOST_TSuccess setProgressBar(float progress);
223
224         /**
225          * Hides the progress bar icon
226          */
227         GHOST_TSuccess endProgressBar();
228
229
230         void setNativePixelSize(void);
231
232         GHOST_TSuccess beginFullScreen() const {return GHOST_kFailure;}
233
234         GHOST_TSuccess endFullScreen() const {return GHOST_kFailure;}
235
236         /** public function to get the window containing the OpenGL view */
237         CocoaWindow *getCocoaWindow() const {return m_window;};
238
239         /* Internal value to ensure proper redraws during animations */
240         void setImmediateDraw(bool value) { m_immediateDraw = value; }
241         bool getImmediateDraw(void) const { return m_immediateDraw; }
242
243 protected:
244
245         /**
246          * \param type  The type of rendering context create.
247          * \return Indication of success.
248          */
249         GHOST_Context *newDrawingContext(GHOST_TDrawingContextType type);
250
251         /**
252          * Invalidates the contents of this window.
253          * \return Indication of success.
254          */
255         GHOST_TSuccess invalidate();
256
257         /**
258          * Sets the cursor visibility on the window using
259          * native window system calls.
260          */
261         GHOST_TSuccess setWindowCursorVisibility(bool visible);
262
263         /**
264          * Sets the cursor grab on the window using
265          * native window system calls.
266          */
267         GHOST_TSuccess setWindowCursorGrab(GHOST_TGrabCursorMode mode);
268
269         /**
270          * Sets the cursor shape on the window using
271          * native window system calls.
272          */
273         GHOST_TSuccess setWindowCursorShape(GHOST_TStandardCursor shape);
274
275         /**
276          * Sets the cursor shape on the window using
277          * native window system calls.
278          */
279         GHOST_TSuccess setWindowCustomCursorShape(GHOST_TUns8 *bitmap, GHOST_TUns8 *mask,
280                                                           int sizex, int sizey, int hotX, int hotY, int fg_color, int bg_color);
281
282         GHOST_TSuccess setWindowCustomCursorShape(GHOST_TUns8 bitmap[16][2], GHOST_TUns8 mask[16][2], int hotX, int hotY);
283
284         /** The window containing the OpenGL view */
285         CocoaWindow *m_window;
286
287         /** The openGL view */
288         CocoaOpenGLView *m_openGLView;
289
290         /** The mother SystemCocoa class to send events */
291         GHOST_SystemCocoa *m_systemCocoa;
292
293         NSCursor *m_customCursor;
294
295         GHOST_TabletData m_tablet;
296
297         bool m_immediateDraw;
298         bool m_debug_context; // for debug messages during context setup
299 };
300
301 #endif // __GHOST_WINDOWCOCOA_H__