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