2 * fg_state_blackberry.c
4 * BlackBerry-specific freeglut state query methods.
6 * Copyright (c) 2012 Stephen J. Baker. All Rights Reserved.
7 * Written by John F. Fay, <fayjf@sourceforge.net>
8 * Copyright (C) 2012 Sylvain Beucler
9 * Copyright (C) 2013 Vincent Simonetti
11 * Permission is hereby granted, free of charge, to any person obtaining a
12 * copy of this software and associated documentation files (the "Software"),
13 * to deal in the Software without restriction, including without limitation
14 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15 * and/or sell copies of the Software, and to permit persons to whom the
16 * Software is furnished to do so, subject to the following conditions:
18 * The above copyright notice and this permission notice shall be included
19 * in all copies or substantial portions of the Software.
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
24 * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
25 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
26 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 #include <GL/freeglut.h>
31 #include <screen/screen.h>
32 #include "fg_internal.h"
33 #include "egl/fg_state_egl.h"
35 //From fg_state_android.c
36 int fgPlatformGlutDeviceGet ( GLenum eWhat )
38 int deviceCount, i, value;
39 screen_device_t* devices;
43 case GLUT_HAS_KEYBOARD:
44 /* BlackBerry has a keyboard, though it may be virtual. */
48 /* BlackBerry has a touchscreen. Consider it as a mouse since we have no guarantee
49 that a mouse will be used (in which case it's a simulator). */
52 case GLUT_NUM_MOUSE_BUTTONS:
53 /* BlackBerry has a touchscreen, which we can consider a 1-button mouse at min.
54 Otherwise check for an actual mouse, else get max touch points */
55 if(!screen_get_context_property_iv(fgDisplay.pDisplay.screenContext, SCREEN_PROPERTY_DEVICE_COUNT, &deviceCount)) {
56 devices = (screen_device_t*)calloc(deviceCount, sizeof(screen_device_t));
57 if(!screen_get_context_property_pv(fgDisplay.pDisplay.screenContext, SCREEN_PROPERTY_DEVICES, (void**)devices)) {
58 /* Check for a pointer */
59 for(i = 0; i < deviceCount; i++) {
60 if(!screen_get_device_property_iv(devices[i], SCREEN_PROPERTY_TYPE, &value) &&
61 value == SCREEN_EVENT_POINTER &&
62 !screen_get_device_property_iv(devices[i], SCREEN_PROPERTY_BUTTON_COUNT, &value)) {
66 /* Check for mtouch */
67 for(i = 0; i < deviceCount; i++) {
68 if(!screen_get_device_property_iv(devices[i], SCREEN_PROPERTY_TYPE, &value) &&
69 value == SCREEN_EVENT_MTOUCH_TOUCH &&
70 !screen_get_device_property_iv(devices[i], SCREEN_PROPERTY_MAXIMUM_TOUCH_ID, &value)) {
77 /* Backup, pretend it's a 1-button mouse */
81 fgWarning( "glutDeviceGet(): missing enum handle %d", eWhat );
85 /* And now -- the failure. */
89 int fgPlatformGlutGet ( GLenum eWhat )
92 /* One full-screen window only */
95 case GLUT_WINDOW_BORDER_WIDTH:
96 case GLUT_WINDOW_HEADER_HEIGHT:
99 case GLUT_WINDOW_WIDTH:
100 case GLUT_WINDOW_HEIGHT:
102 if ( fgStructure.CurrentWindow == NULL )
106 if ( screen_get_window_property_iv(fgStructure.CurrentWindow->Window.Handle, SCREEN_PROPERTY_BUFFER_SIZE, size) != 0 )
108 if ( screen_get_window_property_iv(fgStructure.CurrentWindow->Window.Handle, SCREEN_PROPERTY_ROTATION, &orientation) != 0 )
110 int orientationDif = abs(orientation - fgStructure.CurrentWindow->State.pWState.originalRotation);
111 if (orientationDif == 90 || orientationDif == 270) {
112 /* Swap dim. if screen is rotated */
119 case GLUT_WINDOW_WIDTH:
121 case GLUT_WINDOW_HEIGHT:
127 case GLUT_WINDOW_COLORMAP_SIZE:
128 /* 0 for RGBA/non-indexed mode */
129 /* Under BlackBerry and GLES more generally, no indexed-mode */
133 return fghPlatformGlutGetEGL(eWhat);