X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.c;h=0131c133e7543bb252a2fd76963ce794582b4984;hb=07bd1f7e496e8914d56ec4422b33492b8f66b1d0;hp=ff7d8e545dd9f6c0c422eea8036cbe5247c1e453;hpb=994cb017022c658f115e3c9fc927d8a0cc83832c;p=rocksndiamonds.git diff --git a/src/libgame/system.c b/src/libgame/system.c index ff7d8e54..0131c133 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -36,7 +36,6 @@ struct OptionInfo options; struct VideoSystemInfo video; struct AudioSystemInfo audio; struct GfxInfo gfx; -struct FontInfo font; struct ArtworkInfo artwork; struct JoystickInfo joystick; struct SetupInfo setup; @@ -390,7 +389,7 @@ inline static void FreeBitmapPointers(Bitmap *bitmap) bitmap->surface_masked = NULL; #else /* The X11 version seems to have a memory leak here -- although - "XFreePixmap()" is called, the correspondig memory seems not + "XFreePixmap()" is called, the corresponding memory seems not to be freed (according to "ps"). The SDL version apparently does not have this problem. */ @@ -510,8 +509,7 @@ inline void ClearRectangleOnBackground(Bitmap *bitmap, int x, int y, int width, int height) { if (DrawingOnBackground(x, y)) - BlitBitmap(gfx.background_bitmap, bitmap, - x - gfx.real_sx, y - gfx.real_sy, width, height, x, y); + BlitBitmap(gfx.background_bitmap, bitmap, x, y, width, height, x, y); else ClearRectangle(bitmap, x, y, width, height); } @@ -572,7 +570,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, @@ -865,6 +863,58 @@ void ReloadCustomImage(Bitmap *bitmap, char *basename) free(new_bitmap); } +Bitmap *ZoomBitmap(Bitmap *src_bitmap, int zoom_width, int zoom_height) +{ + Bitmap *dst_bitmap = CreateBitmap(zoom_width, zoom_height, DEFAULT_DEPTH); + +#if defined(TARGET_SDL) + SDLZoomBitmap(src_bitmap, dst_bitmap); +#else + X11ZoomBitmap(src_bitmap, dst_bitmap); +#endif + + return dst_bitmap; +} + +void CreateBitmapWithSmallBitmaps(Bitmap *src_bitmap) +{ + Bitmap *tmp_bitmap, *tmp_bitmap_2, *tmp_bitmap_8; + int src_width, src_height; + int tmp_width, tmp_height; + + src_width = src_bitmap->width; + src_height = src_bitmap->height; + + tmp_width = src_width; + tmp_height = src_height + src_height / 2; + + tmp_bitmap = CreateBitmap(tmp_width, tmp_height, DEFAULT_DEPTH); + + tmp_bitmap_2 = ZoomBitmap(src_bitmap, src_width / 2, src_height / 2); + tmp_bitmap_8 = ZoomBitmap(src_bitmap, src_width / 8, src_height / 8); + + BlitBitmap(src_bitmap, tmp_bitmap, 0, 0, src_width, src_height, 0, 0); + BlitBitmap(tmp_bitmap_2, tmp_bitmap, 0, 0, src_width / 2, src_height / 2, + 0, src_height); + BlitBitmap(tmp_bitmap_8, tmp_bitmap, 0, 0, src_width / 8, src_height / 8, + 3 * src_width / 4, src_height); + + FreeBitmap(tmp_bitmap_2); + FreeBitmap(tmp_bitmap_8); + +#ifdef TARGET_SDL + src_bitmap->surface = tmp_bitmap->surface; + tmp_bitmap->surface = NULL; +#else + src_bitmap->drawable = tmp_bitmap->drawable; + tmp_bitmap->drawable = None; +#endif + + src_bitmap->height = tmp_bitmap->height; + + FreeBitmap(tmp_bitmap); +} + /* ========================================================================= */ /* audio functions */ @@ -881,7 +931,7 @@ inline void OpenAudio(void) audio.sound_deactivated = FALSE; audio.mixer_pipe[0] = audio.mixer_pipe[1] = 0; - audio.mixer_pid = -1; + audio.mixer_pid = 0; audio.device_name = NULL; audio.device_fd = -1;