2 * fg_window_blackberry.c
4 * Window management methods for BlackBerry
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
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:
19 * The above copyright notice and this permission notice shall be included
20 * in all copies or substantial portions of the Software.
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.
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>
38 * Opens a window. Requires a SFG_Window object created and attached
39 * to the freeglut structure. OpenGL context is created here.
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 )
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");
51 window->Window.pContext.event = NULL; //XXX Should probably be done elsewhere. Done here so there is no event at the moment
54 if (screen_create_context(&window->Window.pContext.screenContext, 0)) {
55 fgError("Could not create screen context");
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");
64 fgDisplay.pDisplay.single_native_window = sWindow;
66 /* Set window properties */
67 int screenFormat = SCREEN_FORMAT_RGBA8888;
69 int screenUsage = SCREEN_USAGE_OPENGL_ES2;
71 int screenUsage = SCREEN_USAGE_DISPLAY | SCREEN_USAGE_OPENGL_ES2; // Physical device copy directly into physical display
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");
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");
86 /* Could set size based on what is specified for window. Work on another time
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");
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");
105 /* Request window events */
106 screen_request_events(window->Window.pContext.screenContext);
109 window->Window.Handle = fgDisplay.pDisplay.single_native_window;
110 window->State.WorkMask |= GLUT_INIT_WORK;
113 fghChooseConfig(&window->Window.pContext.egl.Config);
114 window->Window.Context = fghCreateNewContextEGL(window);
116 /* Create EGL window */
117 fghPlatformOpenWindowEGL(window);
119 window->State.Visible = GL_TRUE;
123 * Request a window resize
125 void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height )
127 fprintf(stderr, "fgPlatformReshapeWindow: STUB\n");
131 * Closes a window, destroying the frame and OpenGL context
133 void fgPlatformCloseWindow( SFG_Window* window )
135 fghPlatformCloseWindowEGL(window);
137 screen_stop_events(window->Window.pContext.screenContext);
139 screen_destroy_window((screen_window_t)window->Window.Handle);
141 screen_destroy_context(window->Window.pContext.screenContext);
145 * This function makes the specified window visible
147 void fgPlatformShowWindow( void )
149 fprintf(stderr, "fgPlatformShowWindow: STUB\n");
153 * This function hides the specified window
155 void fgPlatformHideWindow( SFG_Window *window )
157 fprintf(stderr, "fgPlatformHideWindow: STUB\n");
161 * Iconify the specified window (top-level windows only)
163 void fgPlatformIconifyWindow( SFG_Window *window )
165 fprintf(stderr, "fgPlatformGlutIconifyWindow: STUB\n");
169 * Set the current window's title
171 void fgPlatformGlutSetWindowTitle( const char* title )
173 fprintf(stderr, "fgPlatformGlutSetWindowTitle: STUB\n");
177 * Set the current window's iconified title
179 void fgPlatformGlutSetIconTitle( const char* title )
181 fprintf(stderr, "fgPlatformGlutSetIconTitle: STUB\n");}
184 * Change the specified window's position
186 void fgPlatformPositionWindow( SFG_Window *window, int x, int y )
188 fprintf(stderr, "fgPlatformPositionWindow: STUB\n");
192 * Lowers the specified window (by Z order change)
194 void fgPlatformPushWindow( SFG_Window *window )
196 fprintf(stderr, "fgPlatformPushWindow: STUB\n");
200 * Raises the specified window (by Z order change)
202 void fgPlatformPopWindow( SFG_Window *window )
204 fprintf(stderr, "fgPlatformPopWindow: STUB\n");
208 * Toggle the window's full screen state.
210 void fgPlatformFullScreenToggle( SFG_Window *win )
212 fprintf(stderr, "fgPlatformFullScreenToggle: STUB\n");