Added ability to get screen size of display
[freeglut] / src / blackberry / fg_init_blackberry.c
index 5a1a9d9..ed1b1c9 100644 (file)
 #include "fg_init.h"
 #include "egl/fg_init_egl.h"
 #include <bps/bps.h>
-#include <bps/navigator.h>
+#include <screen/screen.h>
 
 void fgPlatformInitialize()
 {
     bps_initialize();
 
-    navigator_request_events(0);
-    //XXX rotation lock? navigator_rotation_lock(true);
-
     fghPlatformInitializeEGL();
 
+    /* Prepare for screen events */
+    fgDisplay.pDisplay.event = NULL;
+    fgDisplay.pDisplay.screenContext = NULL;
+
+    /* Create window */
+    if (screen_create_context(&fgDisplay.pDisplay.screenContext, 0)) {
+        fgError("Could not create screen context");
+        return;
+    }
+
+    /* Get screen size */
+    int displayCount;
+    screen_display_t* displays;
+    int vals[2];
+    if(screen_get_context_property_iv(fgDisplay.pDisplay.screenContext, SCREEN_PROPERTY_DISPLAY_COUNT, &displayCount)) {
+        fgWarning("Could not get display count. Screen size not determined and will be left at default values");
+    } else if(displayCount >= 1) {
+        displays = (screen_display_t*)calloc(displayCount, sizeof(screen_display_t));
+        if(screen_get_context_property_pv(fgDisplay.pDisplay.screenContext, SCREEN_PROPERTY_DISPLAYS, (void**)displays)) {
+            fgWarning("Could not get displays. Screen size not determined and will be left at default values");
+        } else {
+            /* We only care about the first one, which is the device display */
+            if(screen_get_display_property_iv(displays[0], SCREEN_PROPERTY_SIZE, vals)) {
+                fgWarning("Could not get display size. Values will be left at default");
+            } else {
+                if(screen_get_display_property_iv(displays[0], SCREEN_PROPERTY_ROTATION, &displayCount) || (displayCount == 0 || displayCount == 180)) {
+                    fgDisplay.ScreenWidth = vals[0];
+                    fgDisplay.ScreenHeight = vals[1];
+                } else {
+                    fgDisplay.ScreenWidth = vals[1];
+                    fgDisplay.ScreenHeight = vals[0];
+                }
+            }
+            if(screen_get_display_property_iv(displays[0], SCREEN_PROPERTY_PHYSICAL_SIZE, vals)) {
+                fgWarning("Could not get physical display size. Values will be left at default");
+            } else {
+                fgDisplay.ScreenWidthMM = vals[0];
+                fgDisplay.ScreenHeightMM = vals[1];
+            }
+        }
+        free(displays);
+    }
+
     /* Get start time */
     fgState.Time = fgSystemTime();
 
@@ -50,7 +90,8 @@ void fgPlatformCloseDisplay()
 {
     fghPlatformCloseDisplayEGL();
 
-    navigator_stop_events(0);
+    screen_destroy_context(fgDisplay.pDisplay.screenContext);
+    fgDisplay.pDisplay.screenContext = NULL;
 
     bps_shutdown();
 }