Moving platform-specific fields in "SFG_Display" into a substructure
[freeglut] / src / Common / freeglut_gamemode.c
index 48991a6..d3df2bc 100644 (file)
@@ -39,9 +39,9 @@
 \r
 \r
 /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */\r
-extern void fghRememberState( void );\r
-extern void fghRestoreState( void );\r
-extern GLboolean fghChangeDisplayMode( GLboolean haveToTest );\r
+extern void fgPlatformRememberState( void );\r
+extern void fgPlatformRestoreState( void );\r
+extern GLboolean fgPlatformChangeDisplayMode( GLboolean haveToTest );\r
 \r
 \r
 #if TARGET_HOST_POSIX_X11\r
@@ -53,11 +53,11 @@ static int xrandr_resize(int xsz, int ysz, int rate, int just_checking)
     Status result = -1;\r
 \r
     /* must check at runtime for the availability of the extension */\r
-    if(!XRRQueryExtension(fgDisplay.Display, &event_base, &error_base)) {\r
+    if(!XRRQueryExtension(fgDisplay.pDisplay.Display, &event_base, &error_base)) {\r
         return -1;\r
     }\r
 \r
-    XRRQueryVersion(fgDisplay.Display, &ver_major, &ver_minor);\r
+    XRRQueryVersion(fgDisplay.pDisplay.Display, &ver_major, &ver_minor);\r
 \r
     /* we only heed the rate if we CAN actually use it (Xrandr >= 1.1) and\r
      * the user actually cares about it (rate > 0)\r
@@ -80,7 +80,7 @@ static int xrandr_resize(int xsz, int ysz, int rate, int just_checking)
             XRRFreeScreenConfigInfo(xrr_config);\r
         }\r
 \r
-        if(!(xrr_config = XRRGetScreenInfo(fgDisplay.Display, fgDisplay.RootWindow))) {\r
+        if(!(xrr_config = XRRGetScreenInfo(fgDisplay.pDisplay.Display, fgDisplay.RootWindow))) {\r
             fgWarning("XRRGetScreenInfo failed");\r
             break;\r
         }\r
@@ -136,12 +136,12 @@ static int xrandr_resize(int xsz, int ysz, int rate, int just_checking)
 \r
 #if ( RANDR_MAJOR >= 1 ) || ( ( RANDR_MAJOR == 1 ) && ( RANDR_MINOR >= 1 ) )\r
         if(use_rate)\r
-            result = XRRSetScreenConfigAndRate(fgDisplay.Display, xrr_config,\r
-                    fgDisplay.RootWindow, res_idx, rot, rate, timestamp);\r
+            result = XRRSetScreenConfigAndRate(fgDisplay.pDisplay.Display, xrr_config,\r
+                    fgDisplay.pDisplay.RootWindow, res_idx, rot, rate, timestamp);\r
         else\r
 #endif\r
-            result = XRRSetScreenConfig(fgDisplay.Display, xrr_config,\r
-                    fgDisplay.RootWindow, res_idx, rot, timestamp);\r
+            result = XRRSetScreenConfig(fgDisplay.pDisplay.Display, xrr_config,\r
+                    fgDisplay.pDisplay.RootWindow, res_idx, rot, timestamp);\r
 \r
     } while(result == RRSetConfigInvalidTime);\r
 \r
@@ -163,7 +163,7 @@ static int xrandr_resize(int xsz, int ysz, int rate, int just_checking)
  * Remembers the current visual settings, so that\r
  * we can change them and restore later...\r
  */\r
-static void fghRememberState( void )\r
+void fgPlatformRememberState( void )\r
 {\r
     int event_base, error_base;\r
 \r
@@ -174,33 +174,33 @@ static void fghRememberState( void )
     Window junk_window;\r
     unsigned int junk_mask;\r
 \r
-    XQueryPointer(fgDisplay.Display, fgDisplay.RootWindow,\r
+    XQueryPointer(fgDisplay.pDisplay.Display, fgDisplay.pDisplay.RootWindow,\r
             &junk_window, &junk_window,\r
-            &fgDisplay.DisplayPointerX, &fgDisplay.DisplayPointerY,\r
-            &fgDisplay.DisplayPointerX, &fgDisplay.DisplayPointerY, &junk_mask);\r
+            &fgDisplay.pDisplay.DisplayPointerX, &fgDisplay.pDisplay.DisplayPointerY,\r
+            &fgDisplay.pDisplay.DisplayPointerX, &fgDisplay.pDisplay.DisplayPointerY, &junk_mask);\r
 \r
 #   ifdef HAVE_X11_EXTENSIONS_XRANDR_H\r
-    if(XRRQueryExtension(fgDisplay.Display, &event_base, &error_base)) {\r
+    if(XRRQueryExtension(fgDisplay.pDisplay.Display, &event_base, &error_base)) {\r
         XRRScreenConfiguration *xrr_config;\r
         XRRScreenSize *ssizes;\r
         Rotation rot;\r
         int ssize_count, curr;\r
 \r
-        if((xrr_config = XRRGetScreenInfo(fgDisplay.Display, fgDisplay.RootWindow))) {\r
+        if((xrr_config = XRRGetScreenInfo(fgDisplay.pDisplay.Display, fgDisplay.pDisplay.RootWindow))) {\r
             ssizes = XRRConfigSizes(xrr_config, &ssize_count);\r
             curr = XRRConfigCurrentConfiguration(xrr_config, &rot);\r
 \r
-            fgDisplay.prev_xsz = ssizes[curr].width;\r
-            fgDisplay.prev_ysz = ssizes[curr].height;\r
-            fgDisplay.prev_refresh = -1;\r
+            fgDisplay.pDisplay.prev_xsz = ssizes[curr].width;\r
+            fgDisplay.pDisplay.prev_ysz = ssizes[curr].height;\r
+            fgDisplay.pDisplay.prev_refresh = -1;\r
 \r
 #       if ( RANDR_MAJOR >= 1 ) || ( ( RANDR_MAJOR == 1 ) && ( RANDR_MINOR >= 1 ) )\r
             if(fgState.GameModeRefresh != -1) {\r
-                fgDisplay.prev_refresh = XRRConfigCurrentRate(xrr_config);\r
+                fgDisplay.pDisplay.prev_refresh = XRRConfigCurrentRate(xrr_config);\r
             }\r
 #       endif\r
 \r
-            fgDisplay.prev_size_valid = 1;\r
+            fgDisplay.pDisplay.prev_size_valid = 1;\r
 \r
             XRRFreeScreenConfigInfo(xrr_config);\r
         }\r
@@ -212,7 +212,7 @@ static void fghRememberState( void )
      * not approved as X Consortium standards\r
      */\r
 #   ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H\r
-    if(!XF86VidModeQueryExtension(fgDisplay.Display, &event_base, &error_base)) {\r
+    if(!XF86VidModeQueryExtension(fgDisplay.pDisplay.Display, &event_base, &error_base)) {\r
         return;\r
     }\r
 \r
@@ -221,23 +221,23 @@ static void fghRememberState( void )
      * restore the ViewPort on LeaveGameMode():\r
      */\r
     if( !XF86VidModeGetViewPort(\r
-             fgDisplay.Display,\r
-             fgDisplay.Screen,\r
-             &fgDisplay.DisplayViewPortX,\r
-             &fgDisplay.DisplayViewPortY ) )\r
+             fgDisplay.pDisplay.Display,\r
+             fgDisplay.pDisplay.Screen,\r
+             &fgDisplay.pDisplay.DisplayViewPortX,\r
+             &fgDisplay.pDisplay.DisplayViewPortY ) )\r
         fgWarning( "XF86VidModeGetViewPort failed" );\r
 \r
 \r
     /* Query the current display settings: */\r
-    fgDisplay.DisplayModeValid =\r
+    fgDisplay.pDisplay.DisplayModeValid =\r
       XF86VidModeGetModeLine(\r
-        fgDisplay.Display,\r
-        fgDisplay.Screen,\r
-        &fgDisplay.DisplayModeClock,\r
-        &fgDisplay.DisplayMode\r
+        fgDisplay.pDisplay.Display,\r
+        fgDisplay.pDisplay.Screen,\r
+        &fgDisplay.pDisplay.DisplayModeClock,\r
+        &fgDisplay.pDisplay.DisplayMode\r
     );\r
 \r
-    if( !fgDisplay.DisplayModeValid )\r
+    if( !fgDisplay.pDisplay.DisplayModeValid )\r
         fgWarning( "XF86VidModeGetModeLine failed" );\r
 #   endif\r
 \r
@@ -248,21 +248,21 @@ static void fghRememberState( void )
 /*\r
  * Restores the previously remembered visual settings\r
  */\r
-static void fghRestoreState( void )\r
+void fgPlatformRestoreState( void )\r
 {\r
     /* Restore the remembered pointer position: */\r
     XWarpPointer(\r
-        fgDisplay.Display, None, fgDisplay.RootWindow, 0, 0, 0, 0,\r
-        fgDisplay.DisplayPointerX, fgDisplay.DisplayPointerY\r
+        fgDisplay.pDisplay.Display, None, fgDisplay.pDisplay.RootWindow, 0, 0, 0, 0,\r
+        fgDisplay.pDisplay.DisplayPointerX, fgDisplay.pDisplay.DisplayPointerY\r
     );\r
 \r
 \r
 #   ifdef HAVE_X11_EXTENSIONS_XRANDR_H\r
-    if(fgDisplay.prev_size_valid) {\r
-        if(xrandr_resize(fgDisplay.prev_xsz, fgDisplay.prev_ysz, fgDisplay.prev_refresh, 0) != -1) {\r
-            fgDisplay.prev_size_valid = 0;\r
+    if(fgDisplay.pDisplay.prev_size_valid) {\r
+        if(xrandr_resize(fgDisplay.pDisplay.prev_xsz, fgDisplay.pDisplay.prev_ysz, fgDisplay.pDisplay.prev_refresh, 0) != -1) {\r
+            fgDisplay.pDisplay.prev_size_valid = 0;\r
 #       ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H\r
-            fgDisplay.DisplayModeValid = 0;\r
+            fgDisplay.pDisplay.DisplayModeValid = 0;\r
 #       endif\r
             return;\r
         }\r
@@ -277,14 +277,14 @@ static void fghRestoreState( void )
      * not approved as X Consortium standards\r
      */\r
 \r
-    if( fgDisplay.DisplayModeValid )\r
+    if( fgDisplay.pDisplay.DisplayModeValid )\r
     {\r
         XF86VidModeModeInfo** displayModes;\r
         int i, displayModesCount;\r
 \r
         if( !XF86VidModeGetAllModeLines(\r
-                 fgDisplay.Display,\r
-                 fgDisplay.Screen,\r
+                 fgDisplay.pDisplay.Display,\r
+                 fgDisplay.pDisplay.Screen,\r
                  &displayModesCount,\r
                  &displayModes ) )\r
         {\r
@@ -299,13 +299,13 @@ static void fghRestoreState( void )
          */\r
         for( i = 0; i < displayModesCount; i++ )\r
         {\r
-            if(displayModes[ i ]->hdisplay == fgDisplay.DisplayMode.hdisplay &&\r
-               displayModes[ i ]->vdisplay == fgDisplay.DisplayMode.vdisplay &&\r
-               displayModes[ i ]->dotclock == fgDisplay.DisplayModeClock )\r
+            if(displayModes[ i ]->hdisplay == fgDisplay.pDisplay.DisplayMode.hdisplay &&\r
+               displayModes[ i ]->vdisplay == fgDisplay.pDisplay.DisplayMode.vdisplay &&\r
+               displayModes[ i ]->dotclock == fgDisplay.pDisplay.DisplayModeClock )\r
             {\r
                 if( !XF86VidModeSwitchToMode(\r
-                         fgDisplay.Display,\r
-                         fgDisplay.Screen,\r
+                         fgDisplay.pDisplay.Display,\r
+                         fgDisplay.pDisplay.Screen,\r
                          displayModes[ i ] ) )\r
                 {\r
                     fgWarning( "XF86VidModeSwitchToMode failed" );\r
@@ -313,10 +313,10 @@ static void fghRestoreState( void )
                 }\r
 \r
                 if( !XF86VidModeSetViewPort(\r
-                         fgDisplay.Display,\r
-                         fgDisplay.Screen,\r
-                         fgDisplay.DisplayViewPortX,\r
-                         fgDisplay.DisplayViewPortY ) )\r
+                         fgDisplay.pDisplay.Display,\r
+                         fgDisplay.pDisplay.Screen,\r
+                         fgDisplay.pDisplay.DisplayViewPortX,\r
+                         fgDisplay.pDisplay.DisplayViewPortY ) )\r
                     fgWarning( "XF86VidModeSetViewPort failed" );\r
 \r
 \r
@@ -325,11 +325,11 @@ static void fghRestoreState( void )
                  * calls exit() we've to flush the X11 output queue to have the\r
                  * commands sent to the X server before the application exits.\r
                  */\r
-                XFlush( fgDisplay.Display );\r
+                XFlush( fgDisplay.pDisplay.Display );\r
 \r
-                fgDisplay.DisplayModeValid = 0;\r
+                fgDisplay.pDisplay.DisplayModeValid = 0;\r
 #       ifdef HAVE_X11_EXTENSIONS_XRANDR_H\r
-                fgDisplay.prev_size_valid = 0;\r
+                fgDisplay.pDisplay.prev_size_valid = 0;\r
 #       endif\r
 \r
                 break;\r
@@ -398,7 +398,7 @@ static int fghCheckDisplayModes( GLboolean exactMatch, int displayModesCount, XF
 /*\r
  * Changes the current display mode to match user's settings\r
  */\r
-static GLboolean fghChangeDisplayMode( GLboolean haveToTest )\r
+GLboolean fgPlatformChangeDisplayMode( GLboolean haveToTest )\r
 {\r
     GLboolean success = GL_FALSE;\r
     /* first try to use XRandR, then fallback to XF86VidMode */\r
@@ -420,7 +420,7 @@ static GLboolean fghChangeDisplayMode( GLboolean haveToTest )
      * This is also used by applications which check modes by calling\r
      * glutGameModeGet(GLUT_GAME_MODE_POSSIBLE), so allow the check:\r
      */\r
-    if( haveToTest || fgDisplay.DisplayModeValid )\r
+    if( haveToTest || fgDisplay.pDisplay.DisplayModeValid )\r
     {\r
         XF86VidModeModeInfo** displayModes;\r
         int i, displayModesCount;\r
@@ -430,20 +430,20 @@ static GLboolean fghChangeDisplayMode( GLboolean haveToTest )
          * glutEnterGameMode, then we need to query the current mode, to make\r
          * unspecified settings to default to their current values.\r
          */\r
-        if(!fgDisplay.DisplayModeValid) {\r
-            if(!XF86VidModeGetModeLine(fgDisplay.Display, fgDisplay.Screen,\r
-                    &fgDisplay.DisplayModeClock, &fgDisplay.DisplayMode)) {\r
+        if(!fgDisplay.pDisplay.DisplayModeValid) {\r
+            if(!XF86VidModeGetModeLine(fgDisplay.pDisplay.Display, fgDisplay.pDisplay.Screen,\r
+                    &fgDisplay.pDisplay.DisplayModeClock, &fgDisplay.pDisplay.DisplayMode)) {\r
                 return success;\r
             }\r
         }\r
 \r
         if (fgState.GameModeSize.X == -1)\r
         {\r
-            fgState.GameModeSize.X = fgDisplay.DisplayMode.hdisplay;\r
+            fgState.GameModeSize.X = fgDisplay.pDisplay.DisplayMode.hdisplay;\r
         }\r
         if (fgState.GameModeSize.Y == -1)\r
         {\r
-            fgState.GameModeSize.Y = fgDisplay.DisplayMode.vdisplay;\r
+            fgState.GameModeSize.Y = fgDisplay.pDisplay.DisplayMode.vdisplay;\r
         }\r
         if (fgState.GameModeDepth == -1)\r
         {\r
@@ -454,16 +454,16 @@ static GLboolean fghChangeDisplayMode( GLboolean haveToTest )
         if (fgState.GameModeRefresh == -1)\r
         {\r
             /* Compute the displays refresh rate, dotclock comes in kHz. */\r
-            int refresh = ( fgDisplay.DisplayModeClock * 1000 ) /\r
-                ( fgDisplay.DisplayMode.htotal * fgDisplay.DisplayMode.vtotal );\r
+            int refresh = ( fgDisplay.pDisplay.DisplayModeClock * 1000 ) /\r
+                ( fgDisplay.pDisplay.DisplayMode.htotal * fgDisplay.pDisplay.DisplayMode.vtotal );\r
 \r
             fgState.GameModeRefresh = refresh;\r
         }\r
 \r
         /* query all possible display modes */\r
         if( !XF86VidModeGetAllModeLines(\r
-                 fgDisplay.Display,\r
-                 fgDisplay.Screen,\r
+                 fgDisplay.pDisplay.Display,\r
+                 fgDisplay.pDisplay.Screen,\r
                  &displayModesCount,\r
                  &displayModes ) )\r
         {\r
@@ -484,8 +484,8 @@ static GLboolean fghChangeDisplayMode( GLboolean haveToTest )
 \r
         if( !haveToTest && success ) {\r
             if( !XF86VidModeSwitchToMode(\r
-                     fgDisplay.Display,\r
-                     fgDisplay.Screen,\r
+                     fgDisplay.pDisplay.Display,\r
+                     fgDisplay.pDisplay.Screen,\r
                      displayModes[ i ] ) )\r
                 fgWarning( "XF86VidModeSwitchToMode failed" );\r
         }\r
@@ -532,7 +532,7 @@ void FGAPIENTRY glutGameModeString( const char* string )
 \r
     /* All values not specified are now set to -1, which means those\r
      * aspects of the current display mode are not changed in\r
-     * fghChangeDisplayMode() above.\r
+     * fgPlatformChangeDisplayMode() above.\r
      */\r
     fgState.GameModeSize.X  = width;\r
     fgState.GameModeSize.Y  = height;\r
@@ -552,9 +552,9 @@ int FGAPIENTRY glutEnterGameMode( void )
     if( fgStructure.GameModeWindow )\r
         fgAddToWindowDestroyList( fgStructure.GameModeWindow );\r
     else\r
-        fghRememberState( );\r
+        fgPlatformRememberState( );\r
 \r
-    if( ! fghChangeDisplayMode( GL_FALSE ) )\r
+    if( ! fgPlatformChangeDisplayMode( GL_FALSE ) )\r
     {\r
         fgWarning( "failed to change screen settings" );\r
         return 0;\r
@@ -576,7 +576,7 @@ int FGAPIENTRY glutEnterGameMode( void )
      * Sync needed to avoid a real race, the Xserver must have really created\r
      * the window before we can grab the pointer into it:\r
      */\r
-    XSync( fgDisplay.Display, False );\r
+    XSync( fgDisplay.pDisplay.Display, False );\r
     /*\r
      * Grab the pointer to confine it into the window after the calls to\r
      * XWrapPointer() which ensure that the pointer really enters the window.\r
@@ -587,7 +587,7 @@ int FGAPIENTRY glutEnterGameMode( void )
      * the application which we have to aviod, so wait until it's viewable:\r
      */\r
     while( GrabSuccess != XGrabPointer(\r
-               fgDisplay.Display, fgStructure.GameModeWindow->Window.Handle,\r
+               fgDisplay.pDisplay.Display, fgStructure.GameModeWindow->Window.Handle,\r
                TRUE,\r
                ButtonPressMask | ButtonReleaseMask | ButtonMotionMask\r
                | PointerMotionMask,\r
@@ -599,7 +599,7 @@ int FGAPIENTRY glutEnterGameMode( void )
      * if the new window is not viewable yet, see the XGrabPointer loop above.\r
      */\r
     XSetInputFocus(\r
-        fgDisplay.Display,\r
+        fgDisplay.pDisplay.Display,\r
         fgStructure.GameModeWindow->Window.Handle,\r
         RevertToNone,\r
         CurrentTime\r
@@ -607,22 +607,22 @@ int FGAPIENTRY glutEnterGameMode( void )
 \r
     /* Move the Pointer to the middle of the fullscreen window */\r
     XWarpPointer(\r
-        fgDisplay.Display,\r
+        fgDisplay.pDisplay.Display,\r
         None,\r
-        fgDisplay.RootWindow,\r
+        fgDisplay.pDisplay.RootWindow,\r
         0, 0, 0, 0,\r
         fgState.GameModeSize.X/2, fgState.GameModeSize.Y/2\r
     );\r
 \r
 #   ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H\r
 \r
-    if( fgDisplay.DisplayModeValid )\r
+    if( fgDisplay.pDisplay.DisplayModeValid )\r
     {\r
         int x, y;\r
         Window child;\r
 \r
         /* Change to viewport to the window topleft edge: */\r
-        if( !XF86VidModeSetViewPort( fgDisplay.Display, fgDisplay.Screen, 0, 0 ) )\r
+        if( !XF86VidModeSetViewPort( fgDisplay.pDisplay.Display, fgDisplay.Screen, 0, 0 ) )\r
             fgWarning( "XF86VidModeSetViewPort failed" );\r
 \r
         /*\r
@@ -633,15 +633,15 @@ int FGAPIENTRY glutEnterGameMode( void )
 \r
         /* Get the current postion of the drawable area on screen */\r
         XTranslateCoordinates(\r
-            fgDisplay.Display,\r
+            fgDisplay.pDisplay.Display,\r
             fgStructure.CurrentWindow->Window.Handle,\r
-            fgDisplay.RootWindow,\r
+            fgDisplay.pDisplay.RootWindow,\r
             0, 0, &x, &y,\r
             &child\r
         );\r
 \r
         /* Move the decorataions out of the topleft corner of the display */\r
-        XMoveWindow( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle,\r
+        XMoveWindow( fgDisplay.pDisplay.Display, fgStructure.CurrentWindow->Window.Handle,\r
                      -x, -y);\r
     }\r
 \r
@@ -649,7 +649,7 @@ int FGAPIENTRY glutEnterGameMode( void )
 \r
     /* Grab the keyboard, too */\r
     XGrabKeyboard(\r
-        fgDisplay.Display,\r
+        fgDisplay.pDisplay.Display,\r
         fgStructure.GameModeWindow->Window.Handle,\r
         FALSE,\r
         GrabModeAsync, GrabModeAsync,\r
@@ -675,12 +675,12 @@ void FGAPIENTRY glutLeaveGameMode( void )
 \r
 #if TARGET_HOST_POSIX_X11\r
 \r
-    XUngrabPointer( fgDisplay.Display, CurrentTime );\r
-    XUngrabKeyboard( fgDisplay.Display, CurrentTime );\r
+    XUngrabPointer( fgDisplay.pDisplay.Display, CurrentTime );\r
+    XUngrabKeyboard( fgDisplay.pDisplay.Display, CurrentTime );\r
 \r
 #endif\r
 \r
-    fghRestoreState();\r
+    fgPlatformRestoreState();\r
 }\r
 \r
 /*\r
@@ -696,7 +696,7 @@ int FGAPIENTRY glutGameModeGet( GLenum eWhat )
         return !!fgStructure.GameModeWindow;\r
 \r
     case GLUT_GAME_MODE_POSSIBLE:\r
-        return fghChangeDisplayMode( GL_TRUE );\r
+        return fgPlatformChangeDisplayMode( GL_TRUE );\r
 \r
     case GLUT_GAME_MODE_WIDTH:\r
         return fgState.GameModeSize.X;\r