79d82f73a6efc0fa2cbe7a3630a8ddb234512d1a
[freeglut] / src / blackberry / fg_window_blackberry.c
1 /*
2  * fg_window_blackberry.c
3  *
4  * Window management methods for BlackBerry
5  *
6  * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
7  * Written by Pawel W. Olszta, <olszta@sourceforge.net>
8  * Copied for Platform code by Evan Felix <karcaw at gmail.com>
9  * Copyright (C) 2012  Sylvain Beucler
10  * Copyright (C) 2013  Vincent Simonetti
11  *
12  * Permission is hereby granted, free of charge, to any person obtaining a
13  * copy of this software and associated documentation files (the "Software"),
14  * to deal in the Software without restriction, including without limitation
15  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16  * and/or sell copies of the Software, and to permit persons to whom the
17  * Software is furnished to do so, subject to the following conditions:
18  *
19  * The above copyright notice and this permission notice shall be included
20  * in all copies or substantial portions of the Software.
21  *
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
25  * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
26  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
27  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28  */
29
30 #define FREEGLUT_BUILDING_LIB
31 #include <GL/freeglut.h>
32 #include "fg_internal.h"
33 #include "egl/fg_window_egl.h"
34 #include <screen/screen.h>
35 #include <bps/screen.h>
36
37 /*
38  * Opens a window. Requires a SFG_Window object created and attached
39  * to the freeglut structure. OpenGL context is created here.
40  */
41 void fgPlatformOpenWindow( SFG_Window* window, const char* title,
42                            GLboolean positionUse, int x, int y,
43                            GLboolean sizeUse, int w, int h,
44                            GLboolean gameMode, GLboolean isSubWindow )
45 {
46   /* TODO: only one full-screen window possible? */
47   if (fgDisplay.pDisplay.single_native_window != NULL) {
48     fgWarning("You can't have more than one window on BlackBerry");
49     return;
50   }
51   window->Window.pContext.event = NULL; //XXX Should probably be done elsewhere. Done here so there is no event at the moment
52
53   /* Create window */
54   if (screen_create_context(&window->Window.pContext.screenContext, 0)) {
55     fgError("Could not create screen context");
56         return;
57   }
58   screen_window_t sWindow;
59   if (screen_create_window(&sWindow, window->Window.pContext.screenContext)) {
60         screen_destroy_context(window->Window.pContext.screenContext);
61         fgError("Could not create window");
62         return;
63   }
64   fgDisplay.pDisplay.single_native_window = sWindow;
65
66   /* Set window properties */
67   int screenFormat = SCREEN_FORMAT_RGBA8888;
68 #ifdef __X86__
69   int screenUsage = SCREEN_USAGE_OPENGL_ES2;
70 #else
71   int screenUsage = SCREEN_USAGE_DISPLAY | SCREEN_USAGE_OPENGL_ES2; // Physical device copy directly into physical display
72 #endif
73   if (screen_set_window_property_iv(sWindow, SCREEN_PROPERTY_FORMAT, &screenFormat)) {
74         screen_destroy_window(sWindow);
75         screen_destroy_context(window->Window.pContext.screenContext);
76         fgError("Could not set window format");
77         return;
78   }
79   if (screen_set_window_property_iv(sWindow, SCREEN_PROPERTY_USAGE, &screenUsage)) {
80         screen_destroy_window(sWindow);
81         screen_destroy_context(window->Window.pContext.screenContext);
82         fgError("Could not set window usage");
83         return;
84   }
85
86   /* Could set size based on what is specified for window. Work on another time
87   int size[2];
88   size[0] = w;
89   size[1] = h;
90   if (screen_set_window_property_iv(sWindow, SCREEN_PROPERTY_BUFFER_SIZE, size)) {
91         screen_destroy_window(sWindow);
92         screen_destroy_context(window->Window.pContext.screenContext);
93         fgError("Could not set window buffer size");
94         return;
95   }*/
96
97   /* Create window buffers */
98   if (screen_create_window_buffers(sWindow, 2)) {
99         screen_destroy_window(sWindow);
100         screen_destroy_context(window->Window.pContext.screenContext);
101         fgError("Could not create window buffers");
102         return;
103   }
104
105   /* Request window events */
106   screen_request_events(window->Window.pContext.screenContext);
107
108   /* Save window */
109   window->Window.Handle = fgDisplay.pDisplay.single_native_window;
110   window->State.WorkMask |= GLUT_INIT_WORK;
111
112   /* Create context */
113   fghChooseConfig(&window->Window.pContext.egl.Config);
114   window->Window.Context = fghCreateNewContextEGL(window);
115
116   /* Create EGL window */
117   fghPlatformOpenWindowEGL(window);
118
119   window->State.Visible = GL_TRUE;
120 }
121
122 /*
123  * Request a window resize
124  */
125 void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height )
126 {
127   fprintf(stderr, "fgPlatformReshapeWindow: STUB\n");
128 }
129
130 /*
131  * Closes a window, destroying the frame and OpenGL context
132  */
133 void fgPlatformCloseWindow( SFG_Window* window )
134 {
135   fghPlatformCloseWindowEGL(window);
136
137   screen_stop_events(window->Window.pContext.screenContext);
138
139   screen_destroy_window((screen_window_t)window->Window.Handle);
140
141   screen_destroy_context(window->Window.pContext.screenContext);
142 }
143
144 /*
145  * This function makes the specified window visible
146  */
147 void fgPlatformShowWindow( void )
148 {
149   fprintf(stderr, "fgPlatformShowWindow: STUB\n");
150 }
151
152 /*
153  * This function hides the specified window
154  */
155 void fgPlatformHideWindow( SFG_Window *window )
156 {
157   fprintf(stderr, "fgPlatformHideWindow: STUB\n");
158 }
159
160 /*
161  * Iconify the specified window (top-level windows only)
162  */
163 void fgPlatformIconifyWindow( SFG_Window *window )
164 {
165   fprintf(stderr, "fgPlatformGlutIconifyWindow: STUB\n");
166 }
167
168 /*
169  * Set the current window's title
170  */
171 void fgPlatformGlutSetWindowTitle( const char* title )
172 {
173   fprintf(stderr, "fgPlatformGlutSetWindowTitle: STUB\n");
174 }
175
176 /*
177  * Set the current window's iconified title
178  */
179 void fgPlatformGlutSetIconTitle( const char* title )
180 {
181   fprintf(stderr, "fgPlatformGlutSetIconTitle: STUB\n");}
182
183 /*
184  * Change the specified window's position
185  */
186 void fgPlatformPositionWindow( SFG_Window *window, int x, int y )
187 {
188   fprintf(stderr, "fgPlatformPositionWindow: STUB\n");
189 }
190
191 /*
192  * Lowers the specified window (by Z order change)
193  */
194 void fgPlatformPushWindow( SFG_Window *window )
195 {
196   fprintf(stderr, "fgPlatformPushWindow: STUB\n");
197 }
198
199 /*
200  * Raises the specified window (by Z order change)
201  */
202 void fgPlatformPopWindow( SFG_Window *window )
203 {
204   fprintf(stderr, "fgPlatformPopWindow: STUB\n");
205 }
206
207 /*
208  * Toggle the window's full screen state.
209  */
210 void fgPlatformFullScreenToggle( SFG_Window *win )
211 {
212   fprintf(stderr, "fgPlatformFullScreenToggle: STUB\n");
213 }