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 )
39 int deviceCount, i, value;
40 screen_device_t* devices;
45 case GLUT_HAS_KEYBOARD:
46 /* BlackBerry has a keyboard, though it may be virtual. */
50 /* BlackBerry has a touchscreen. Consider it as a mouse since we have no guarantee
51 that a mouse will be used (in which case it's a simulator). */
54 case GLUT_NUM_MOUSE_BUTTONS:
55 /* BlackBerry has a touchscreen, which we can consider a 1-button mouse at min.
56 Otherwise check for an actual mouse, else get max touch points. PlayBook does not support this. */
58 if(!screen_get_context_property_iv(fgDisplay.pDisplay.screenContext, SCREEN_PROPERTY_DEVICE_COUNT, &deviceCount)) {
59 devices = (screen_device_t*)calloc(deviceCount, sizeof(screen_device_t));
60 if(!screen_get_context_property_pv(fgDisplay.pDisplay.screenContext, SCREEN_PROPERTY_DEVICES, (void**)devices)) {
61 /* Check for a pointer */
62 for(i = 0; i < deviceCount; i++) {
63 if(!screen_get_device_property_iv(devices[i], SCREEN_PROPERTY_TYPE, &value) &&
64 value == SCREEN_EVENT_POINTER &&
65 !screen_get_device_property_iv(devices[i], SCREEN_PROPERTY_BUTTON_COUNT, &value)) {
70 /* Check for mtouch */
71 for(i = 0; i < deviceCount; i++) {
72 if(!screen_get_device_property_iv(devices[i], SCREEN_PROPERTY_TYPE, &value) &&
73 value == SCREEN_EVENT_MTOUCH_TOUCH &&
74 !screen_get_device_property_iv(devices[i], SCREEN_PROPERTY_MAXIMUM_TOUCH_ID, &value)) {
83 /* Backup, pretend it's a 1-button mouse */
87 fgWarning( "glutDeviceGet(): missing enum handle %d", eWhat );
91 /* And now -- the failure. */
95 int fgPlatformGlutGet ( GLenum eWhat )
98 /* One full-screen window only */
101 case GLUT_WINDOW_BORDER_WIDTH:
102 case GLUT_WINDOW_HEADER_HEIGHT:
105 case GLUT_WINDOW_WIDTH:
106 case GLUT_WINDOW_HEIGHT:
108 if ( fgStructure.CurrentWindow == NULL )
113 if ( screen_get_window_property_iv(fgStructure.CurrentWindow->Window.Handle, SCREEN_PROPERTY_BUFFER_SIZE, size) != 0 )
115 if ( screen_get_window_property_iv(fgStructure.CurrentWindow->Window.Handle, SCREEN_PROPERTY_ROTATION, &orientation) != 0 )
118 int orientationDif = abs(orientation - fgStructure.CurrentWindow->State.pWState.originalRotation);
119 if (orientationDif == 90 || orientationDif == 270) {
120 /* Swap dim. if screen is rotated */
127 case GLUT_WINDOW_WIDTH:
129 case GLUT_WINDOW_HEIGHT:
135 case GLUT_WINDOW_COLORMAP_SIZE:
136 /* 0 for RGBA/non-indexed mode */
137 /* Under BlackBerry and GLES more generally, no indexed-mode */
141 return fghPlatformGlutGetEGL(eWhat);