Mercurial > sdl-ios-xcode
diff src/SDL_compat.c @ 1731:875c3cf1a12c SDL-1.3
SDL_PushEvent() calls the event filter code, and has a return value to tell
whether or not the event was actually pushed.
SDL_GetEventFilter() now returns an SDL_bool instead of the filter function.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 08 Jul 2006 20:07:08 +0000 |
parents | 6c63fc2bd986 |
children | 0b1070f2f94d |
line wrap: on
line diff
--- a/src/SDL_compat.c Sat Jul 08 18:06:02 2006 +0000 +++ b/src/SDL_compat.c Sat Jul 08 20:07:08 2006 +0000 @@ -153,9 +153,6 @@ return modes; } -static SDL_EventFilter orig_eventfilter; -static void *orig_eventfilterparam; - static int SDL_CompatEventFilter(void *userdata, SDL_Event * event) { @@ -269,11 +266,7 @@ } } - if (orig_eventfilter) { - return orig_eventfilter(orig_eventfilterparam, event); - } else { - return 1; - } + return 1; } static int @@ -291,6 +284,26 @@ return 0; } +static void +GetEnvironmentWindowPosition(int w, int h, int *x, int *y) +{ + const char *window = SDL_getenv("SDL_VIDEO_WINDOW_POS"); + const char *center = SDL_getenv("SDL_VIDEO_CENTERED"); + if (window) { + if (SDL_sscanf(window, "%d,%d", x, y) == 2) { + return; + } + if (SDL_strcmp(window, "center") == 0) { + center = window; + } + } + if (center) { + const SDL_DisplayMode *current = SDL_GetDesktopDisplayMode(); + *x = (current->w - w) / 2; + *y = (current->h - h) / 2; + } +} + SDL_Surface * SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags) { @@ -298,6 +311,8 @@ void *filterparam; const SDL_DisplayMode *desktop_mode; SDL_DisplayMode mode; + int window_x = SDL_WINDOWPOS_UNDEFINED; + int window_y = SDL_WINDOWPOS_UNDEFINED; Uint32 window_flags; Uint32 desktop_format; Uint32 desired_format; @@ -321,15 +336,15 @@ SDL_FreeSurface(SDL_VideoSurface); SDL_VideoSurface = NULL; } + if (SDL_VideoWindow) { + SDL_GetWindowPosition(SDL_VideoWindow, &window_x, &window_y); + } SDL_DestroyWindow(SDL_VideoWindow); /* Set up the event filter */ - filter = SDL_GetEventFilter(&filterparam); - if (filter != SDL_CompatEventFilter) { - orig_eventfilter = filter; - orig_eventfilterparam = filterparam; + if (!SDL_GetEventFilter(NULL, NULL)) { + SDL_SetEventFilter(SDL_CompatEventFilter, NULL); } - SDL_SetEventFilter(SDL_CompatEventFilter, NULL); /* Create a new window */ window_flags = SDL_WINDOW_SHOWN; @@ -345,9 +360,11 @@ if (flags & SDL_NOFRAME) { window_flags |= SDL_WINDOW_BORDERLESS; } + if (SDL_getenv("SDL_WINDOW_POS")) { + } + GetEnvironmentWindowPosition(width, height, &window_x, &window_y); SDL_VideoWindow = - SDL_CreateWindow(wm_title, SDL_WINDOWPOS_UNDEFINED, - SDL_WINDOWPOS_UNDEFINED, width, height, + SDL_CreateWindow(wm_title, window_x, window_y, width, height, window_flags); if (!SDL_VideoWindow) { return NULL;