X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.c;h=5604ad21d818440f5860122d1ac65ced0d307b75;hb=41e8d55b767c898f20c29a1b0b8d2ef8840be2f5;hp=22e9f2f1bda51bbe253367997c80a1d10bd2c069;hpb=4337ea074a6962a576fc0e44d61d48ebc76fa6ae;p=rocksndiamonds.git diff --git a/src/libgame/system.c b/src/libgame/system.c index 22e9f2f1..5604ad21 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -1,7 +1,7 @@ /*********************************************************** * Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1994-2000 Artsoft Entertainment * +* (c) 1994-2001 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -22,6 +22,7 @@ #include "system.h" #include "sound.h" +#include "setup.h" #include "misc.h" @@ -34,26 +35,29 @@ struct OptionInfo options; struct VideoSystemInfo video; struct AudioSystemInfo audio; struct GfxInfo gfx; +struct JoystickInfo joystick; +struct SetupInfo setup; struct LevelDirInfo *leveldir_first = NULL; struct LevelDirInfo *leveldir_current = NULL; +int level_nr; -Display *display = NULL; -Visual *visual = NULL; -int screen = 0; -Colormap cmap = None; +Display *display = NULL; +Visual *visual = NULL; +int screen = 0; +Colormap cmap = None; -DrawWindow *window = NULL; -DrawBuffer *backbuffer = NULL; -DrawBuffer *drawto = NULL; +DrawWindow *window = NULL; +DrawBuffer *backbuffer = NULL; +DrawBuffer *drawto = NULL; -int button_status = MB_NOT_PRESSED; -boolean motion_status = FALSE; +int button_status = MB_NOT_PRESSED; +boolean motion_status = FALSE; -int redraw_mask = REDRAW_NONE; -int redraw_tiles = 0; +int redraw_mask = REDRAW_NONE; +int redraw_tiles = 0; -int FrameCounter = 0; +int FrameCounter = 0; /* ========================================================================= */ @@ -109,12 +113,12 @@ void InitProgramInfo(char *unix_userdata_directory, char *program_title, char *x11_icon_basename, char *x11_iconmask_basename, char *msdos_pointer_basename) { - char *gfx_dir = getPath2(options.ro_base_directory, GRAPHICS_DIRECTORY); - char *x11_icon_filename = getPath2(gfx_dir, x11_icon_basename); - char *x11_iconmask_filename = getPath2(gfx_dir, x11_iconmask_basename); - char *msdos_pointer_filename = getPath2(gfx_dir, msdos_pointer_basename); - - free(gfx_dir); + char *x11_icon_filename = + getPath2(options.graphics_directory, x11_icon_basename); + char *x11_iconmask_filename = + getPath2(options.graphics_directory, x11_iconmask_basename); + char *msdos_pointer_filename = + getPath2(options.graphics_directory, msdos_pointer_basename); #if defined(PLATFORM_UNIX) program.userdata_directory = unix_userdata_directory; @@ -179,7 +183,7 @@ inline static int GetRealDepth(int depth) inline void InitVideoDisplay(void) { -#ifdef TARGET_SDL +#if defined(TARGET_SDL) SDLInitVideoDisplay(); #else X11InitVideoDisplay(); @@ -188,7 +192,11 @@ inline void InitVideoDisplay(void) inline void CloseVideoDisplay(void) { -#if defined(TARGET_X11) + KeyboardAutoRepeatOn(); + +#if defined(TARGET_SDL) + SDL_QuitSubSystem(SDL_INIT_VIDEO); +#else if (display) XCloseDisplay(display); #endif @@ -371,7 +379,7 @@ inline void DrawSimpleWhiteLine(Bitmap *bitmap, int from_x, int from_y, int to_x, int to_y) { #ifdef TARGET_SDL - SDLDrawSimpleLine(bitmap->surface, from_x, from_y, to_x, to_y, 0xffffff); + SDLDrawSimpleLine(bitmap, from_x, from_y, to_x, to_y, 0xffffff); #else XSetForeground(display, bitmap->gc, WhitePixel(display, screen)); XDrawLine(display, bitmap->drawable, bitmap->gc, from_x, from_y, to_x, to_y); @@ -399,8 +407,8 @@ inline void DrawLine(Bitmap *bitmap, int from_x, int from_y, continue; #if defined(TARGET_SDL) - sge_Line(bitmap->surface, - from_x + dx, from_y + dy, to_x + dx, to_y + dy, pixel); + SDLDrawLine(bitmap, + from_x + dx, from_y + dy, to_x + dx, to_y + dy, pixel); #elif defined(TARGET_ALLEGRO) AllegroDrawLine(bitmap->drawable, from_x + dx, from_y + dy, to_x + dx, to_y + dy, pixel); @@ -434,6 +442,26 @@ inline void DrawLines(Bitmap *bitmap, struct XY *points, int num_points, #endif } +inline Pixel GetPixel(Bitmap *bitmap, int x, int y) +{ +#if defined(TARGET_SDL) + return SDLGetPixel(bitmap, x, y); +#elif defined(TARGET_ALLEGRO) + return AllegroGetPixel(bitmap->drawable, x, y); +#else + unsigned long pixel_value; + XImage *pixel_image; + + pixel_image = XGetImage(display, bitmap->drawable, x, y, 1, 1, + AllPlanes, ZPixmap); + pixel_value = XGetPixel(pixel_image, 0, 0); + + XDestroyImage(pixel_image); + + return pixel_value; +#endif +} + inline Pixel GetPixelFromRGB(Bitmap *bitmap, unsigned int color_r, unsigned int color_g, unsigned int color_b) { @@ -557,8 +585,7 @@ inline boolean ChangeVideoModeIfNeeded(boolean fullscreen) Bitmap *LoadImage(char *basename) { Bitmap *new_bitmap; - char *filename = getPath3(options.ro_base_directory, GRAPHICS_DIRECTORY, - basename); + char *filename = getPath2(options.graphics_directory, basename); #if defined(TARGET_SDL) new_bitmap = SDLLoadImage(filename); @@ -649,7 +676,7 @@ inline boolean PendingEvent(void) inline void NextEvent(Event *event) { #ifdef TARGET_SDL - SDL_WaitEvent(event); + SDLNextEvent(event); #else XNextEvent(display, event); #endif