John Fay: A bug fix re: behavior of the code when the user clicks the "x" to close...
[freeglut] / src / freeglut_state.c
index 0ea47a4..3b6c718 100644 (file)
@@ -72,51 +72,55 @@ static int fghGetConfig( int attribute )
  */
 void FGAPIENTRY glutSetOption( GLenum eWhat, int value )
 {
-  freeglut_assert_ready;
-
-  /*
-   * XXX In chronological code add order.  (WHY in that order?)
-   */
-  switch( eWhat )
-  {
-  case GLUT_INIT_WINDOW_X:
-      fgState.Position.X = (GLint)value;
-      break;
-
-  case GLUT_INIT_WINDOW_Y:
-      fgState.Position.Y = (GLint)value;
-      break;
-
-  case GLUT_INIT_WINDOW_WIDTH:
-      fgState.Size.X = (GLint)value;
-      break;
-
-  case GLUT_INIT_WINDOW_HEIGHT:
-      fgState.Size.Y = (GLint)value;
-      break;
-
-  case GLUT_INIT_DISPLAY_MODE:
-      fgState.DisplayMode = (unsigned int)value;
-      break;
-
-  case GLUT_ACTION_ON_WINDOW_CLOSE:
-      fgState.ActionOnWindowClose = value;
-      break;
-
-  case GLUT_RENDERING_CONTEXT:
-      fgState.UseCurrentContext =
-          ( value == GLUT_USE_CURRENT_CONTEXT ) ? GL_TRUE : GL_FALSE;
-      break;
-
-  case GLUT_WINDOW_CURSOR:
-      if( fgStructure.Window != NULL )
-          fgStructure.Window->State.Cursor = value;
-      break;
-
-  default:
-      fgWarning( "glutSetOption(): missing enum handle %i\n", eWhat );
-      break;
-  }
+    freeglut_assert_ready;
+
+    /*
+     * XXX In chronological code add order.  (WHY in that order?)
+     */
+    switch( eWhat )
+    {
+    case GLUT_INIT_WINDOW_X:
+        fgState.Position.X = (GLint)value;
+        break;
+
+    case GLUT_INIT_WINDOW_Y:
+        fgState.Position.Y = (GLint)value;
+        break;
+
+    case GLUT_INIT_WINDOW_WIDTH:
+        fgState.Size.X = (GLint)value;
+        break;
+
+    case GLUT_INIT_WINDOW_HEIGHT:
+        fgState.Size.Y = (GLint)value;
+        break;
+
+    case GLUT_INIT_DISPLAY_MODE:
+        fgState.DisplayMode = (unsigned int)value;
+        break;
+
+    case GLUT_ACTION_ON_WINDOW_CLOSE:
+        fgState.ActionOnWindowClose = value;
+        break;
+
+    case GLUT_RENDERING_CONTEXT:
+        fgState.UseCurrentContext =
+            ( value == GLUT_USE_CURRENT_CONTEXT ) ? GL_TRUE : GL_FALSE;
+        break;
+
+    case GLUT_DIRECT_RENDERING:
+        fgState.DirectContext = value;
+        break;
+
+    case GLUT_WINDOW_CURSOR:
+        if( fgStructure.Window != NULL )
+            fgStructure.Window->State.Cursor = value;
+        break;
+
+    default:
+        fgWarning( "glutSetOption(): missing enum handle %i\n", eWhat );
+        break;
+    }
 }
 
 /*
@@ -124,7 +128,7 @@ void FGAPIENTRY glutSetOption( GLenum eWhat, int value )
  */
 int FGAPIENTRY glutGet( GLenum eWhat )
 {
-#if TARGET_HOST_WIN32
+#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
     int returnValue ;
     GLboolean boolValue ;
 #endif
@@ -281,7 +285,7 @@ int FGAPIENTRY glutGet( GLenum eWhat )
 
         return fgStructure.Window->Window.VisualInfo->visualid;
 
-#elif TARGET_HOST_WIN32
+#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
 
     /*
      * Handle the OpenGL inquiries
@@ -376,6 +380,8 @@ int FGAPIENTRY glutGet( GLenum eWhat )
         /*
          * ...then we've got to correct the results we've just received...
          */
+
+#if !TARGET_HOST_WINCE
         if ( ( fgStructure.GameMode != fgStructure.Window ) && ( fgStructure.Window->Parent == NULL ) &&
              ( ! fgStructure.Window->IsMenu ) )
         {
@@ -384,6 +390,7 @@ int FGAPIENTRY glutGet( GLenum eWhat )
           winRect.top    += GetSystemMetrics( SM_CYSIZEFRAME ) + GetSystemMetrics( SM_CYCAPTION );
           winRect.bottom -= GetSystemMetrics( SM_CYSIZEFRAME );
         }
+#endif /* !TARGET_HOST_WINCE */
 
         switch( eWhat )
         {
@@ -396,18 +403,33 @@ int FGAPIENTRY glutGet( GLenum eWhat )
     break;
 
     case GLUT_WINDOW_BORDER_WIDTH :
+#if TARGET_HOST_WINCE
+        return 0;
+#else
         return GetSystemMetrics( SM_CXSIZEFRAME );
+#endif /* !TARGET_HOST_WINCE */
 
     case GLUT_WINDOW_HEADER_HEIGHT :
+#if TARGET_HOST_WINCE
+        return 0;
+#else
         return GetSystemMetrics( SM_CYCAPTION );
+#endif /* TARGET_HOST_WINCE */
 
     case GLUT_DISPLAY_MODE_POSSIBLE:
+#if TARGET_HOST_WINCE
+        return GL_FALSE;
+#else
         return fgSetupPixelFormat( fgStructure.Window, GL_TRUE,
                                     PFD_MAIN_PLANE );
+#endif /* TARGET_HOST_WINCE */
+
 
     case GLUT_WINDOW_FORMAT_ID:
+#if !TARGET_HOST_WINCE
         if( fgStructure.Window != NULL )
             return GetPixelFormat( fgStructure.Window->Window.Device );
+#endif /* TARGET_HOST_WINCE */
         return 0;
 
 #endif
@@ -445,6 +467,10 @@ int FGAPIENTRY glutGet( GLenum eWhat )
         return fgState.UseCurrentContext ? GLUT_USE_CURRENT_CONTEXT
                                          : GLUT_CREATE_NEW_CONTEXT;
 
+    case GLUT_DIRECT_RENDERING:
+        return fgState.DirectContext;
+        break;
+
     default:
         fgWarning( "glutGet(): missing enum handle %i\n", eWhat );
         break;
@@ -503,7 +529,7 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
          */
         return 3 ;
 
-#elif TARGET_HOST_WIN32
+#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
 
     case GLUT_HAS_MOUSE:
         /*
@@ -516,7 +542,11 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
         /*
          * We are much more fortunate under Win32 about this...
          */
+#if TARGET_HOST_WINCE
+        return 1;
+#else
         return GetSystemMetrics( SM_CMOUSEBUTTONS );
+#endif /* TARGET_HOST_WINCE */
 
 #endif
 
@@ -619,7 +649,7 @@ int FGAPIENTRY glutLayerGet( GLenum eWhat )
     case GLUT_OVERLAY_DAMAGED:
         return -1;
 
-#elif TARGET_HOST_WIN32
+#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
 
     case GLUT_OVERLAY_POSSIBLE:
 /*      return fgSetupPixelFormat( fgStructure.Window, GL_TRUE,