X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsystem.c;h=7d25d4cd26962497585b0f605433fc2c609fc5ef;hp=cb27850b8cc34adc5732f8d13203949765d6fc64;hb=6ed4958820f8f97174ca47594dcc6f00ee31b2cb;hpb=601cca5b35649856ff49e1bcb3806592b736662c diff --git a/src/libgame/system.c b/src/libgame/system.c index cb27850b..7d25d4cd 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -36,8 +36,6 @@ struct OptionInfo options; struct VideoSystemInfo video; struct AudioSystemInfo audio; struct GfxInfo gfx; -struct FontInfo font; -struct AnimInfo anim; struct ArtworkInfo artwork; struct JoystickInfo joystick; struct SetupInfo setup; @@ -68,10 +66,31 @@ int FrameCounter = 0; /* init/close functions */ /* ========================================================================= */ -void InitCommandName(char *argv0) +void InitProgramInfo(char *argv0, + char *userdata_directory, char *program_title, + char *window_title, char *icon_title, + char *x11_icon_filename, char *x11_iconmask_filename, + char *msdos_pointer_filename, + char *cookie_prefix, char *filename_prefix, + int program_version) { program.command_basename = (strrchr(argv0, '/') ? strrchr(argv0, '/') + 1 : argv0); + + program.userdata_directory = userdata_directory; + 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.msdos_pointer_filename = msdos_pointer_filename; + + program.cookie_prefix = cookie_prefix; + program.filename_prefix = filename_prefix; + + program.version_major = VERSION_MAJOR(program_version); + program.version_minor = VERSION_MINOR(program_version); + program.version_patch = VERSION_PATCH(program_version); } void InitExitFunction(void (*exit_function)(int)) @@ -92,13 +111,6 @@ void InitPlatformDependantStuff(void) { #if defined(PLATFORM_MSDOS) _fmode = O_BINARY; -#endif - -#if !defined(PLATFORM_UNIX) - program.userdata_directory = "userdata"; -#endif - -#if defined(PLATFORM_MSDOS) initErrorFile(); #endif @@ -115,37 +127,10 @@ void ClosePlatformDependantStuff(void) #endif } -void InitProgramInfo(char *unix_userdata_directory, char *program_title, - char *window_title, char *icon_title, - char *x11_icon_filename, char *x11_iconmask_filename, - char *msdos_pointer_filename, - char *cookie_prefix, char *filename_prefix, - int program_version) -{ -#if defined(PLATFORM_UNIX) - program.userdata_directory = unix_userdata_directory; -#else - program.userdata_directory = "userdata"; -#endif - - 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.msdos_pointer_filename = msdos_pointer_filename; - - program.cookie_prefix = cookie_prefix; - program.filename_prefix = filename_prefix; - - program.version_major = VERSION_MAJOR(program_version); - program.version_minor = VERSION_MINOR(program_version); - program.version_patch = VERSION_PATCH(program_version); -} - void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize, int real_sx, int real_sy, - int full_sxsize, int full_sysize) + int full_sxsize, int full_sysize, + Bitmap *field_save_buffer) { gfx.sx = sx; gfx.sy = sy; @@ -156,6 +141,8 @@ void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize, gfx.full_sxsize = full_sxsize; gfx.full_sysize = full_sysize; + gfx.field_save_buffer = field_save_buffer; + gfx.background_bitmap = NULL; gfx.background_bitmap_mask = REDRAW_NONE; @@ -495,6 +482,31 @@ inline void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap, #endif } +inline void DrawRectangle(Bitmap *bitmap, int x, int y, int width, int height, + Pixel color) +{ + if (DrawingDeactivated(x, y, width, height)) + return; + +#ifdef TARGET_SDL + SDLFillRectangle(bitmap, x, y, width, height, color); +#else + XSetForeground(display, bitmap->gc, color); + XFillRectangle(display, bitmap->drawable, bitmap->gc, x, y, width, height); + XSetForeground(display, bitmap->gc, BlackPixel(display, screen)); +#endif +} + +#if 1 +inline void ClearRectangle(Bitmap *bitmap, int x, int y, int width, int height) +{ +#ifdef TARGET_SDL + DrawRectangle(bitmap, x, y, width, height, 0x000000); +#else + DrawRectangle(bitmap, x, y, width, height, 0x000000); +#endif +} +#else inline void ClearRectangle(Bitmap *bitmap, int x, int y, int width, int height) { if (DrawingDeactivated(x, y, width, height)) @@ -506,6 +518,7 @@ inline void ClearRectangle(Bitmap *bitmap, int x, int y, int width, int height) XFillRectangle(display, bitmap->drawable, bitmap->gc, x, y, width, height); #endif } +#endif inline void ClearRectangleOnBackground(Bitmap *bitmap, int x, int y, int width, int height) @@ -572,7 +585,7 @@ inline void BlitBitmapOnBackground(Bitmap *src_bitmap, Bitmap *dst_bitmap, int width, int height, int dst_x, int dst_y) { - if (DrawingOnBackground(src_x, src_y)) + if (DrawingOnBackground(dst_x, dst_y)) { /* draw background */ BlitBitmap(gfx.background_bitmap, dst_bitmap, dst_x, dst_y, width, height,