X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.c;h=8e65d97056a32dd2baebed276d6016ab46dedc30;hb=ea6e4698905d7440a265e323d03cf13fc323c44b;hp=cd24b1340b005722068bd252a58e64c381c46b22;hpb=63f41483ea7866802a7f6382c1d1b7135a1cd86a;p=rocksndiamonds.git diff --git a/src/libgame/system.c b/src/libgame/system.c index cd24b134..8e65d970 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -213,6 +213,29 @@ static void DrawBitmapFromTile(Bitmap *bitmap, Bitmap *tile, void SetBackgroundBitmap(Bitmap *background_bitmap_tile, int mask) { + /* !!! THIS DOES NOT WORK !!! REPLACED BITMAPS MAY HAVE SAME ADDRESS !!! */ +#if 0 + static Bitmap *main_bitmap_tile = NULL; + static Bitmap *door_bitmap_tile = NULL; + + if (mask == REDRAW_FIELD) + { + if (background_bitmap_tile == main_bitmap_tile) + return; /* main background tile has not changed */ + + main_bitmap_tile = background_bitmap_tile; + } + else if (mask == REDRAW_DOOR_1) + { + if (background_bitmap_tile == door_bitmap_tile) + return; /* main background tile has not changed */ + + door_bitmap_tile = background_bitmap_tile; + } + else /* should not happen */ + return; +#endif + if (background_bitmap_tile != NULL) gfx.background_bitmap_mask |= mask; else @@ -421,8 +444,13 @@ inline boolean DrawingDeactivated(int x, int y, int width, int height) inline boolean DrawingOnBackground(int x, int y) { +#if 1 return (CheckDrawingArea(x, y, 1, 1, gfx.background_bitmap_mask) && CheckDrawingArea(x, y, 1, 1, gfx.draw_background_mask)); +#else + return ((gfx.draw_background_mask & gfx.background_bitmap_mask) && + CheckDrawingArea(x, y, 1, 1, gfx.draw_background_mask)); +#endif } inline void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap, @@ -459,6 +487,12 @@ inline void ClearRectangleOnBackground(Bitmap *bitmap, int x, int y, ClearRectangle(bitmap, x, y, width, height); } +#if 0 +#ifndef TARGET_SDL +static GC last_clip_gc = 0; /* needed for XCopyArea() through clip mask */ +#endif +#endif + inline void SetClipMask(Bitmap *bitmap, GC clip_gc, Pixmap clip_pixmap) { #if defined(TARGET_X11) @@ -467,6 +501,9 @@ inline void SetClipMask(Bitmap *bitmap, GC clip_gc, Pixmap clip_pixmap) bitmap->clip_gc = clip_gc; XSetClipMask(display, bitmap->clip_gc, clip_pixmap); } +#if 0 + last_clip_gc = clip_gc; +#endif #endif } @@ -478,6 +515,9 @@ inline void SetClipOrigin(Bitmap *bitmap, GC clip_gc, int clip_x, int clip_y) bitmap->clip_gc = clip_gc; XSetClipOrigin(display, bitmap->clip_gc, clip_x, clip_y); } +#if 0 + last_clip_gc = clip_gc; +#endif #endif } @@ -515,16 +555,6 @@ inline void BlitBitmapOnBackground(Bitmap *src_bitmap, Bitmap *dst_bitmap, dst_x, dst_y); } -inline void DrawSimpleBlackLine(Bitmap *bitmap, int from_x, int from_y, - int to_x, int to_y) -{ -#if defined(TARGET_SDL) - SDLDrawSimpleLine(bitmap, from_x, from_y, to_x, to_y, BLACK_PIXEL); -#else - X11DrawSimpleLine(bitmap, from_x, from_y, to_x, to_y, BLACK_PIXEL); -#endif -} - inline void DrawSimpleWhiteLine(Bitmap *bitmap, int from_x, int from_y, int to_x, int to_y) { @@ -870,6 +900,20 @@ void CreateBitmapWithSmallBitmaps(Bitmap *old_bitmap, int zoom_factor) if (zoom_factor != 8) FreeBitmap(tmp_bitmap_8); +#if 0 + +#if defined(TARGET_SDL) + /* !!! what about the old old_bitmap->surface ??? FIX ME !!! */ + old_bitmap->surface = new_bitmap->surface; + new_bitmap->surface = NULL; +#else + /* !!! see above !!! */ + old_bitmap->drawable = new_bitmap->drawable; + new_bitmap->drawable = None; +#endif + +#else + /* replace image with extended image (containing normal, 1/2 and 1/8 size) */ #if defined(TARGET_SDL) swap_bitmap.surface = old_bitmap->surface; @@ -879,6 +923,8 @@ void CreateBitmapWithSmallBitmaps(Bitmap *old_bitmap, int zoom_factor) swap_bitmap.drawable = old_bitmap->drawable; old_bitmap->drawable = new_bitmap->drawable; new_bitmap->drawable = swap_bitmap.drawable; +#endif + #endif old_bitmap->width = new_bitmap->width; @@ -928,9 +974,7 @@ static const char *cursor_image_playfield[] = /* hot spot */ "0,0" - #else - /* pixels */ " X ", "X.X ", @@ -1121,7 +1165,6 @@ inline void PeekEvent(Event *event) inline Key GetEventKey(KeyEvent *event, boolean with_modifiers) { #if defined(TARGET_SDL) - #if 0 printf("unicode == '%d', sym == '%d', mod == '0x%04x'\n", (int)event->keysym.unicode, @@ -1135,9 +1178,7 @@ inline Key GetEventKey(KeyEvent *event, boolean with_modifiers) return event->keysym.unicode; else return event->keysym.sym; - #else - #if 0 printf("with modifiers == '0x%04x', without modifiers == '0x%04x'\n", (int)XLookupKeysym(event, event->state),