X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fx11.c;h=fe022c5bf3f8ddb1f50d9d8c7b776c4f7694894b;hb=9991027ba0e61f105a15d517461614fce184ba48;hp=88deb3f586d64092c772dc186e1a1cec4e0a2b38;hpb=342de2ef2eff4f6936541b70d1eabf01f315fa47;p=rocksndiamonds.git diff --git a/src/libgame/x11.c b/src/libgame/x11.c index 88deb3f5..fe022c5b 100644 --- a/src/libgame/x11.c +++ b/src/libgame/x11.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 * @@ -22,6 +22,13 @@ static void X11InitDisplay(); static DrawWindow *X11InitWindow(); +static int X11DebugErrorHandler(Display *display, XErrorEvent *event) +{ + int x = 0; + + return 1 / x; /* !!! crash program to give backtrace in gdb !!! */ +} + void X11InitVideoDisplay(void) { /* initialize X11 video */ @@ -55,6 +62,14 @@ static void X11InitDisplay() Error(ERR_EXIT, "cannot connect to X server %s", XDisplayName(options.display_name)); + if (options.debug_x11_sync) + { + Error(ERR_WARN, "running in X11 synchronous mode (debug only)"); + + XSynchronize(display, True); + XSetErrorHandler(X11DebugErrorHandler); + } + screen = DefaultScreen(display); visual = DefaultVisual(display, screen); depth = DefaultDepth(display, screen); @@ -363,14 +378,18 @@ void X11FillRectangle(Bitmap *bitmap, int x, int y, } void X11FadeRectangle(Bitmap *bitmap_cross, int x, int y, int width, int height, - int fade_mode, int fade_delay, int post_delay) + int fade_mode, int fade_delay, int post_delay, + void (*draw_border_function)(void)) { /* fading currently not supported -- simply copy backbuffer to screen */ if (fade_mode == FADE_MODE_FADE_OUT) - X11FillRectangle(window, x, y, width, height, BLACK_PIXEL); - else - X11CopyArea(backbuffer, window, x, y, width, height, 0, 0, BLIT_OPAQUE); + X11FillRectangle(backbuffer, x, y, width, height, BLACK_PIXEL); + + if (draw_border_function != NULL) + draw_border_function(); + + X11CopyArea(backbuffer, window, x, y, width, height, x, y, BLIT_OPAQUE); /* as we currently cannot use the fade delay, also do not use post delay */ }