X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2FCommon%2Ffreeglut_init.c;h=07f7528952980b249abff3a06a8fdffe9a2661f8;hb=eadfac5750a4b83b7054b528006d9abb2fa5696f;hp=d5a8ae9c7198011a9717fb89419a52115fc1866e;hpb=9d7761dc618fa6988726a0067ff77e86d5099ad0;p=freeglut diff --git a/src/Common/freeglut_init.c b/src/Common/freeglut_init.c index d5a8ae9..07f7528 100644 --- a/src/Common/freeglut_init.c +++ b/src/Common/freeglut_init.c @@ -100,16 +100,16 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ -extern void fghInitialize( const char* displayName ); -extern void fghDeinitialiseInputDevices ( void ); -extern void fghCloseDisplay ( void ); +extern void fgPlatformInitialize( const char* displayName ); +extern void fgPlatformDeinitialiseInputDevices ( void ); +extern void fgPlatformCloseDisplay ( void ); #if TARGET_HOST_POSIX_X11 /* Return the atom associated with "name". */ static Atom fghGetAtom(const char * name) { - return XInternAtom(fgDisplay.Display, name, False); + return XInternAtom(fgDisplay.pDisplay.Display, name, False); } /* @@ -137,7 +137,7 @@ static int fghGetWindowProperty(Window window, unsigned long temp_bytes_after; /* Not used. */ - status = XGetWindowProperty(fgDisplay.Display, + status = XGetWindowProperty(fgDisplay.pDisplay.Display, window, property, 0, @@ -181,7 +181,7 @@ static int fghNetWMSupported(void) * Check that the window manager has set this property on the root window. * The property must be the ID of a child window. */ - number_of_windows = fghGetWindowProperty(fgDisplay.RootWindow, + number_of_windows = fghGetWindowProperty(fgDisplay.pDisplay.RootWindow, wm_check, XA_WINDOW, (unsigned char **) window_ptr_1); @@ -246,49 +246,49 @@ int fgHintPresent(Window window, Atom property, Atom hint) /* * A call to this function should initialize all the display stuff... */ -static void fghInitialize( const char* displayName ) +void fgPlatformInitialize( const char* displayName ) { - fgDisplay.Display = XOpenDisplay( displayName ); + fgDisplay.pDisplay.Display = XOpenDisplay( displayName ); - if( fgDisplay.Display == NULL ) + if( fgDisplay.pDisplay.Display == NULL ) fgError( "failed to open display '%s'", XDisplayName( displayName ) ); - if( !glXQueryExtension( fgDisplay.Display, NULL, NULL ) ) + if( !glXQueryExtension( fgDisplay.pDisplay.Display, NULL, NULL ) ) fgError( "OpenGL GLX extension not supported by display '%s'", XDisplayName( displayName ) ); - fgDisplay.Screen = DefaultScreen( fgDisplay.Display ); - fgDisplay.RootWindow = RootWindow( - fgDisplay.Display, - fgDisplay.Screen + fgDisplay.pDisplay.Screen = DefaultScreen( fgDisplay.pDisplay.Display ); + fgDisplay.pDisplay.RootWindow = RootWindow( + fgDisplay.pDisplay.Display, + fgDisplay.pDisplay.Screen ); fgDisplay.ScreenWidth = DisplayWidth( - fgDisplay.Display, - fgDisplay.Screen + fgDisplay.pDisplay.Display, + fgDisplay.pDisplay.Screen ); fgDisplay.ScreenHeight = DisplayHeight( - fgDisplay.Display, - fgDisplay.Screen + fgDisplay.pDisplay.Display, + fgDisplay.pDisplay.Screen ); fgDisplay.ScreenWidthMM = DisplayWidthMM( - fgDisplay.Display, - fgDisplay.Screen + fgDisplay.pDisplay.Display, + fgDisplay.pDisplay.Screen ); fgDisplay.ScreenHeightMM = DisplayHeightMM( - fgDisplay.Display, - fgDisplay.Screen + fgDisplay.pDisplay.Display, + fgDisplay.pDisplay.Screen ); - fgDisplay.Connection = ConnectionNumber( fgDisplay.Display ); + fgDisplay.pDisplay.Connection = ConnectionNumber( fgDisplay.pDisplay.Display ); /* Create the window deletion atom */ - fgDisplay.DeleteWindow = fghGetAtom("WM_DELETE_WINDOW"); + fgDisplay.pDisplay.DeleteWindow = fghGetAtom("WM_DELETE_WINDOW"); /* Create the state and full screen atoms */ - fgDisplay.State = None; - fgDisplay.StateFullScreen = None; + fgDisplay.pDisplay.State = None; + fgDisplay.pDisplay.StateFullScreen = None; if (fghNetWMSupported()) { @@ -296,17 +296,17 @@ static void fghInitialize( const char* displayName ) const Atom state = fghGetAtom("_NET_WM_STATE"); /* Check if the state hint is supported. */ - if (fgHintPresent(fgDisplay.RootWindow, supported, state)) + if (fgHintPresent(fgDisplay.pDisplay.RootWindow, supported, state)) { const Atom full_screen = fghGetAtom("_NET_WM_STATE_FULLSCREEN"); - fgDisplay.State = state; + fgDisplay.pDisplay.State = state; /* Check if the window manager supports full screen. */ /** Check "_NET_WM_ALLOWED_ACTIONS" on our window instead? **/ - if (fgHintPresent(fgDisplay.RootWindow, supported, full_screen)) + if (fgHintPresent(fgDisplay.pDisplay.RootWindow, supported, full_screen)) { - fgDisplay.StateFullScreen = full_screen; + fgDisplay.pDisplay.StateFullScreen = full_screen; } } } @@ -437,7 +437,7 @@ void fghCloseInputDevices ( void ) #if TARGET_HOST_POSIX_X11 -static void fghDeinitialiseInputDevices ( void ) +void fgPlatformDeinitialiseInputDevices ( void ) { fghCloseInputDevices (); @@ -446,19 +446,19 @@ static void fghDeinitialiseInputDevices ( void ) } -static void fghCloseDisplay ( void ) +void fgPlatformCloseDisplay ( void ) { /* * Make sure all X-client data we have created will be destroyed on * display closing */ - XSetCloseDownMode( fgDisplay.Display, DestroyAll ); + XSetCloseDownMode( fgDisplay.pDisplay.Display, DestroyAll ); /* * Close the display connection, destroying all windows we have * created so far */ - XCloseDisplay( fgDisplay.Display ); + XCloseDisplay( fgDisplay.pDisplay.Display ); } #endif @@ -486,7 +486,7 @@ void fgDeinitialize( void ) { #if TARGET_HOST_POSIX_X11 /* Note that the MVisualInfo is not owned by the MenuContext! */ - glXDestroyContext( fgDisplay.Display, fgStructure.MenuContext->MContext ); + glXDestroyContext( fgDisplay.pDisplay.Display, fgStructure.MenuContext->MContext ); #endif free( fgStructure.MenuContext ); fgStructure.MenuContext = NULL; @@ -506,7 +506,7 @@ void fgDeinitialize( void ) free( timer ); } - fghDeinitialiseInputDevices (); + fgPlatformDeinitialiseInputDevices (); fgState.MouseWheelTicks = 0; @@ -560,45 +560,13 @@ void fgDeinitialize( void ) fgState.ProgramName = NULL; } - fghCloseDisplay (); + fgPlatformCloseDisplay (); fgState.Initialised = GL_FALSE; } -/* - * Everything inside the following #ifndef is copied from the X sources. - */ #if TARGET_HOST_MS_WINDOWS - -/* - -Copyright 1985, 1986, 1987,1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall -not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization -from The Open Group. - -*/ - #define NoValue 0x0000 #define XValue 0x0001 #define YValue 0x0002 @@ -608,132 +576,12 @@ from The Open Group. #define XNegative 0x0010 #define YNegative 0x0020 -/* - * XParseGeometry parses strings of the form - * "=x{+-}{+-}", where - * width, height, xoffset, and yoffset are unsigned integers. - * Example: "=80x24+300-49" - * The equal sign is optional. - * It returns a bitmask that indicates which of the four values - * were actually found in the string. For each value found, - * the corresponding argument is updated; for each value - * not found, the corresponding argument is left unchanged. - */ - -static int -ReadInteger(char *string, char **NextString) -{ - register int Result = 0; - int Sign = 1; - - if (*string == '+') - string++; - else if (*string == '-') - { - string++; - Sign = -1; - } - for (; (*string >= '0') && (*string <= '9'); string++) - { - Result = (Result * 10) + (*string - '0'); - } - *NextString = string; - if (Sign >= 0) - return Result; - else - return -Result; -} - -static int XParseGeometry ( +extern int XParseGeometry ( const char *string, int *x, int *y, unsigned int *width, /* RETURN */ - unsigned int *height) /* RETURN */ -{ - int mask = NoValue; - register char *strind; - unsigned int tempWidth = 0, tempHeight = 0; - int tempX = 0, tempY = 0; - char *nextCharacter; - - if ( (string == NULL) || (*string == '\0')) - return mask; - if (*string == '=') - string++; /* ignore possible '=' at beg of geometry spec */ - - strind = (char *)string; - if (*strind != '+' && *strind != '-' && *strind != 'x') { - tempWidth = ReadInteger(strind, &nextCharacter); - if (strind == nextCharacter) - return 0; - strind = nextCharacter; - mask |= WidthValue; - } - - if (*strind == 'x' || *strind == 'X') { - strind++; - tempHeight = ReadInteger(strind, &nextCharacter); - if (strind == nextCharacter) - return 0; - strind = nextCharacter; - mask |= HeightValue; - } - - if ((*strind == '+') || (*strind == '-')) { - if (*strind == '-') { - strind++; - tempX = -ReadInteger(strind, &nextCharacter); - if (strind == nextCharacter) - return 0; - strind = nextCharacter; - mask |= XNegative; - } - else - { - strind++; - tempX = ReadInteger(strind, &nextCharacter); - if (strind == nextCharacter) - return 0; - strind = nextCharacter; - } - mask |= XValue; - if ((*strind == '+') || (*strind == '-')) { - if (*strind == '-') { - strind++; - tempY = -ReadInteger(strind, &nextCharacter); - if (strind == nextCharacter) - return 0; - strind = nextCharacter; - mask |= YNegative; - } - else - { - strind++; - tempY = ReadInteger(strind, &nextCharacter); - if (strind == nextCharacter) - return 0; - strind = nextCharacter; - } - mask |= YValue; - } - } - - /* If strind isn't at the end of the string the it's an invalid - geometry specification. */ - - if (*strind != '\0') return 0; - - if (mask & XValue) - *x = tempX; - if (mask & YValue) - *y = tempY; - if (mask & WidthValue) - *width = tempWidth; - if (mask & HeightValue) - *height = tempHeight; - return mask; -} + unsigned int *height); /* RETURN */ #endif /* -- INTERFACE FUNCTIONS -------------------------------------------------- */ @@ -769,7 +617,7 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) * in the program arguments, we will use the DISPLAY environment * variable for opening the X display (see code above): */ - fghInitialize( displayName ); + fgPlatformInitialize( displayName ); /* * Geometry parsing deffered until here because we may need the screen @@ -800,16 +648,6 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) } } -#if TARGET_HOST_MS_WINDOWS -void (__cdecl *__glutExitFunc)( int return_value ) = NULL; - -void FGAPIENTRY __glutInitWithExit( int *pargc, char **argv, void (__cdecl *exit_function)(int) ) -{ - __glutExitFunc = exit_function; - glutInit(pargc, argv); -} -#endif - /* * Undoes all the "glutInit" stuff */