X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fx11.c;h=f95c3da99e479ff9ce400a5b9fad1725d18c3dc7;hb=59ee473b86e7cbc1d9b09a3c22b0bbd3a410f16f;hp=fe022c5bf3f8ddb1f50d9d8c7b776c4f7694894b;hpb=0448c027347ae76facf5475a21884ca2476f035f;p=rocksndiamonds.git diff --git a/src/libgame/x11.c b/src/libgame/x11.c index fe022c5b..f95c3da9 100644 --- a/src/libgame/x11.c +++ b/src/libgame/x11.c @@ -40,13 +40,21 @@ void X11InitVideoDisplay(void) void X11InitVideoBuffer(DrawBuffer **backbuffer, DrawWindow **window) { + if (*window != NULL) + X11CloseWindow(*window); + *window = X11InitWindow(); XMapWindow(display, (*window)->drawable); + FlushDisplay(); /* create additional (off-screen) buffer for double-buffering */ +#if 1 + ReCreateBitmap(backbuffer, video.width, video.height, video.depth); +#else *backbuffer = CreateBitmap(video.width, video.height, video.depth); +#endif } static void X11InitDisplay() @@ -129,6 +137,9 @@ static DrawWindow *X11InitWindow() win_xpos = (screen_width - width) / 2; win_ypos = (screen_height - height) / 2; + new_window->width = width; + new_window->height = height; + new_window->drawable = XCreateSimpleWindow(display, RootWindow(display, screen), win_xpos, win_ypos, @@ -227,6 +238,20 @@ static DrawWindow *X11InitWindow() return new_window; } +void X11CloseWindow(DrawWindow *window) +{ + if (window->drawable) + { + XUnmapWindow(display, window->drawable); + XDestroyWindow(display, window->drawable); + } + + if (window->gc) + XFreeGC(display, window->gc); + + free(window); +} + void X11ZoomBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap) { #if defined(TARGET_ALLEGRO)