Moving an X11-specific function call to destroy a context to the X11-specific file
[freeglut] / src / mswin / freeglut_init_mswin.c
index ff476fd..c7457de 100644 (file)
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
  */\r
 \r
+#define FREEGLUT_BUILDING_LIB\r
 #include <GL/freeglut.h>\r
-#include "freeglut_internal_mswin.h"\r
+#include "../Common/freeglut_internal.h"\r
+\r
+\r
+\r
+extern LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg,\r
+                               WPARAM wParam, LPARAM lParam );\r
 \r
 \r
 /*\r
  * A call to this function should initialize all the display stuff...\r
  */\r
-void fghInitialize( const char* displayName )\r
+void fgPlatformInitialize( const char* displayName )\r
 {\r
     WNDCLASS wc;\r
     ATOM atom;\r
 \r
     /* What we need to do is to initialize the fgDisplay global structure here. */\r
-    fgDisplay.Instance = GetModuleHandle( NULL );\r
-    fgDisplay.DisplayName= displayName ? strdup(displayName) : 0 ;\r
-    atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );\r
+    fgDisplay.pDisplay.Instance = GetModuleHandle( NULL );\r
+    fgDisplay.pDisplay.DisplayName= displayName ? strdup(displayName) : 0 ;\r
+    atom = GetClassInfo( fgDisplay.pDisplay.Instance, _T("FREEGLUT"), &wc );\r
 \r
     if( atom == 0 )\r
     {\r
@@ -54,11 +60,11 @@ void fghInitialize( const char* displayName )
          * XXX Old code had "| CS_DBCLCKS" commented out.  Plans for the\r
          * XXX future?  Dead-end idea?\r
          */\r
-        wc.lpfnWndProc    = fgWindowProc;\r
+        wc.lpfnWndProc    = fgPlatformWindowProc;\r
         wc.cbClsExtra     = 0;\r
         wc.cbWndExtra     = 0;\r
-        wc.hInstance      = fgDisplay.Instance;\r
-        wc.hIcon          = LoadIcon( fgDisplay.Instance, _T("GLUT_ICON") );\r
+        wc.hInstance      = fgDisplay.pDisplay.Instance;\r
+        wc.hIcon          = LoadIcon( fgDisplay.pDisplay.Instance, _T("GLUT_ICON") );\r
 \r
 #if defined(_WIN32_WCE)\r
         wc.style          = CS_HREDRAW | CS_VREDRAW;\r
@@ -75,7 +81,7 @@ void fghInitialize( const char* displayName )
 \r
         /* Register the window class */\r
         atom = RegisterClass( &wc );\r
-        FREEGLUT_INTERNAL_ERROR_EXIT ( atom, "Window Class Not Registered", "fghInitialize" );\r
+        FREEGLUT_INTERNAL_ERROR_EXIT ( atom, "Window Class Not Registered", "fgPlatformInitialize" );\r
     }\r
 \r
     /* The screen dimensions can be obtained via GetSystemMetrics() calls */\r
@@ -92,9 +98,9 @@ void fghInitialize( const char* displayName )
         ReleaseDC( desktop, context );\r
     }\r
     /* If we have a DisplayName try to use it for metrics */\r
-    if( fgDisplay.DisplayName )\r
+    if( fgDisplay.pDisplay.DisplayName )\r
     {\r
-        HDC context = CreateDC(fgDisplay.DisplayName,0,0,0);\r
+        HDC context = CreateDC(fgDisplay.pDisplay.DisplayName,0,0,0);\r
         if( context )\r
         {\r
            fgDisplay.ScreenWidth  = GetDeviceCaps( context, HORZRES );\r
@@ -104,7 +110,7 @@ void fghInitialize( const char* displayName )
            DeleteDC(context);\r
         }\r
         else\r
-           fgWarning("fghInitialize: "\r
+           fgWarning("fgPlatformInitialize: "\r
                      "CreateDC failed, Screen size info may be incorrect\n"\r
           "This is quite likely caused by a bad '-display' parameter");\r
       \r
@@ -131,7 +137,7 @@ void fghInitialize( const char* displayName )
 /* Platform-Specific Deinitialization Functions: */\r
 extern void fghCloseInputDevices ( void );\r
 \r
-void fghDeinitialiseInputDevices ( void )\r
+void fgPlatformDeinitialiseInputDevices ( void )\r
 {\r
 #if !defined(_WIN32_WCE)\r
        fghCloseInputDevices ();\r
@@ -140,19 +146,22 @@ void fghDeinitialiseInputDevices ( void )
     fgState.InputDevsInitialised = GL_FALSE;\r
 }\r
 \r
-void fghCloseDisplay ( void )\r
+void fgPlatformCloseDisplay ( void )\r
 {\r
-    if( fgDisplay.DisplayName )\r
+    if( fgDisplay.pDisplay.DisplayName )\r
     {\r
-        free( fgDisplay.DisplayName );\r
-        fgDisplay.DisplayName = NULL;\r
+        free( fgDisplay.pDisplay.DisplayName );\r
+        fgDisplay.pDisplay.DisplayName = NULL;\r
     }\r
 \r
     /* Reset the timer granularity */\r
     timeEndPeriod ( 1 );\r
 }\r
 \r
-\r
+void fgPlatformDestroyContext ( SFG_PlatformDisplay pDisplay, SFG_WindowContextType MContext )\r
+{\r
+       /* Do nothing -- this is required for X11 */\r
+}\r
 \r
 /*\r
  * Everything down to the end of the next two functions is copied from the X sources.\r
@@ -324,3 +333,13 @@ int XParseGeometry (
 \r
 \r
 \r
+/* -- PLATFORM-SPECIFIC INTERFACE FUNCTION -------------------------------------------------- */\r
+\r
+void (__cdecl *__glutExitFunc)( int return_value ) = NULL;\r
+\r
+void FGAPIENTRY __glutInitWithExit( int *pargc, char **argv, void (__cdecl *exit_function)(int) )\r
+{\r
+  __glutExitFunc = exit_function;\r
+  glutInit(pargc, argv);\r
+}\r
+\r