X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.c;h=5ccb5eb71257414f36e6dba3ae7d1a6682fcbdde;hb=c71f734c9f306daaca1a262d9f07ddae5bc71073;hp=4f8ef0fb89a4726d8b64215b98fbb362c0bc0353;hpb=e8b94b38c4be1bf3ada57ade9eb3a96adb080775;p=rocksndiamonds.git diff --git a/src/libgame/system.c b/src/libgame/system.c index 4f8ef0fb..5ccb5eb7 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -1,7 +1,7 @@ /*********************************************************** * Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1994-2002 Artsoft Entertainment * +* (c) 1994-2006 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -69,22 +69,27 @@ int FrameCounter = 0; /* ========================================================================= */ void InitProgramInfo(char *argv0, - char *userdata_directory, char *program_title, - char *window_title, char *icon_title, + char *userdata_subdir, char *userdata_subdir_unix, + char *program_title, char *window_title, char *icon_title, char *x11_icon_filename, char *x11_iconmask_filename, - char *msdos_cursor_filename, + char *sdl_icon_filename, char *msdos_cursor_filename, char *cookie_prefix, char *filename_prefix, int program_version) { program.command_basepath = getBasePath(argv0); program.command_basename = getBaseName(argv0); - program.userdata_directory = userdata_directory; + program.userdata_subdir = userdata_subdir; + program.userdata_subdir_unix = userdata_subdir_unix; + program.userdata_path = getUserGameDataDir(); + program.program_title = program_title; program.window_title = window_title; program.icon_title = icon_title; + program.x11_icon_filename = x11_icon_filename; program.x11_iconmask_filename = x11_iconmask_filename; + program.sdl_icon_filename = sdl_icon_filename; program.msdos_cursor_filename = msdos_cursor_filename; program.cookie_prefix = cookie_prefix; @@ -118,7 +123,11 @@ void InitPlatformDependentStuff(void) _fmode = O_BINARY; #endif -#if defined(PLATFORM_WIN32) || defined(PLATFORM_MSDOS) +#if defined(PLATFORM_MACOSX) + updateUserGameDataDir(); +#endif + +#if !defined(PLATFORM_UNIX) || defined(PLATFORM_MACOSX) openErrorFile(); #endif @@ -312,20 +321,24 @@ void CloseVideoDisplay(void) #endif } -void InitVideoBuffer(DrawBuffer **backbuffer, DrawWindow **window, - int width, int height, int depth, boolean fullscreen) +void InitVideoBuffer(int width, int height, int depth, boolean fullscreen) { video.width = width; video.height = height; video.depth = GetRealDepth(depth); + video.fullscreen_available = FULLSCREEN_STATUS; video.fullscreen_enabled = FALSE; + video.fullscreen_modes = NULL; + video.fullscreen_mode_current = NULL; #if defined(TARGET_SDL) - SDLInitVideoBuffer(backbuffer, window, fullscreen); + SDLInitVideoBuffer(&backbuffer, &window, fullscreen); #else - X11InitVideoBuffer(backbuffer, window); + X11InitVideoBuffer(&backbuffer, &window); #endif + + drawto = backbuffer; } Bitmap *CreateBitmapStruct(void) @@ -412,13 +425,16 @@ inline static boolean CheckDrawingArea(int x, int y, int width, int height, if (draw_mask & REDRAW_ALL) return TRUE; - if ((draw_mask & REDRAW_FIELD) && x < gfx.real_sx + gfx.full_sxsize) + if ((draw_mask & REDRAW_FIELD) && + x >= gfx.real_sx && x < gfx.real_sx + gfx.full_sxsize) return TRUE; - if ((draw_mask & REDRAW_DOOR_1) && x >= gfx.dx && y < gfx.dy + gfx.dysize) + if ((draw_mask & REDRAW_DOOR_1) && + x >= gfx.dx && y < gfx.dy + gfx.dysize) return TRUE; - if ((draw_mask & REDRAW_DOOR_2) && x >= gfx.dx && y >= gfx.vy) + if ((draw_mask & REDRAW_DOOR_2) && + x >= gfx.dx && y >= gfx.vy) return TRUE; return FALSE; @@ -446,13 +462,16 @@ void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap, dst_x, dst_y, BLIT_OPAQUE); } -void FadeScreen(Bitmap *bitmap_cross, int fade_mode, int fade_delay, - int post_delay) +void FadeRectangle(Bitmap *bitmap_cross, int x, int y, int width, int height, + int fade_mode, int fade_delay, int post_delay, + void (*draw_border_function)(void)) { #if defined(TARGET_SDL) - SDLFadeScreen(bitmap_cross, fade_mode, fade_delay, post_delay); + SDLFadeRectangle(bitmap_cross, x, y, width, height, + fade_mode, fade_delay, post_delay, draw_border_function); #else - X11FadeScreen(bitmap_cross, fade_mode, fade_delay, post_delay); + X11FadeRectangle(bitmap_cross, x, y, width, height, + fade_mode, fade_delay, post_delay, draw_border_function); #endif } @@ -1219,7 +1238,6 @@ KeyMod HandleKeyModState(Key key, int key_status) { static KeyMod current_modifiers = KMOD_None; -#if !defined(TARGET_SDL) if (key != KSYM_UNDEFINED) /* new key => check for modifier key change */ { KeyMod new_modifier = KMOD_None; @@ -1259,7 +1277,6 @@ KeyMod HandleKeyModState(Key key, int key_status) else current_modifiers &= ~new_modifier; } -#endif return current_modifiers; } @@ -1273,6 +1290,17 @@ KeyMod GetKeyModState() #endif } +KeyMod GetKeyModStateFromEvents() +{ + /* always use key modifier state as tracked from key events (this is needed + if the modifier key event was injected into the event queue, but the key + was not really pressed on keyboard -- SDL_GetModState() seems to directly + query the keys as held pressed on the keyboard) -- this case is currently + only used to filter out clipboard insert events from "True X-Mouse" tool */ + + return HandleKeyModState(KSYM_UNDEFINED, 0); +} + boolean CheckCloseWindowEvent(ClientMessageEvent *event) { if (event->type != EVENT_CLIENTMESSAGE)