added generically setting redraw mask when blitting to backbuffer
authorHolger Schemel <info@artsoft.org>
Thu, 21 May 2015 09:53:46 +0000 (11:53 +0200)
committerHolger Schemel <info@artsoft.org>
Thu, 21 May 2015 09:53:46 +0000 (11:53 +0200)
src/libgame/system.c
src/libgame/system.h

index f0d73e7311e9e102686a56319b8c4ce59e4f7df9..3bd825fd6fd36c6077ef1bc2de5b8db933b72948 100644 (file)
@@ -319,9 +319,12 @@ inline static int GetRealDepth(int depth)
 }
 
 inline static void sysFillRectangle(Bitmap *bitmap, int x, int y,
-                              int width, int height, Pixel color)
+                                   int width, int height, Pixel color)
 {
   SDLFillRectangle(bitmap, x, y, width, height, color);
+
+  if (bitmap == backbuffer)
+    SetRedrawMaskFromArea(x, y, width, height);
 }
 
 inline static void sysCopyArea(Bitmap *src_bitmap, Bitmap *dst_bitmap,
@@ -330,6 +333,9 @@ inline static void sysCopyArea(Bitmap *src_bitmap, Bitmap *dst_bitmap,
 {
   SDLCopyArea(src_bitmap, dst_bitmap, src_x, src_y, width, height,
              dst_x, dst_y, mask_mode);
+
+  if (dst_bitmap == backbuffer)
+    SetRedrawMaskFromArea(dst_x, dst_y, width, height);
 }
 
 void LimitScreenUpdates(boolean enable)
@@ -438,6 +444,28 @@ void CloseWindow(DrawWindow *window)
 {
 }
 
+void SetRedrawMaskFromArea(int x, int y, int width, int height)
+{
+  int x1 = x;
+  int y1 = y;
+  int x2 = x + width - 1;
+  int y2 = y + height - 1;
+
+  if (width == 0 || height == 0)
+    return;
+
+  if (IN_GFX_FIELD_FULL(x1, y1) && IN_GFX_FIELD_FULL(x2, y2))
+    redraw_mask |= REDRAW_FIELD;
+  else if (IN_GFX_DOOR_1(x1, y1) && IN_GFX_DOOR_1(x2, y2))
+    redraw_mask |= REDRAW_DOOR_1;
+  else if (IN_GFX_DOOR_2(x1, y1) && IN_GFX_DOOR_2(x2, y2))
+    redraw_mask |= REDRAW_DOOR_2;
+  else if (IN_GFX_DOOR_3(x1, y1) && IN_GFX_DOOR_3(x2, y2))
+    redraw_mask |= REDRAW_DOOR_3;
+  else
+    redraw_mask = REDRAW_ALL;
+}
+
 inline static boolean CheckDrawingArea(int x, int y, int width, int height,
                                       int draw_mask)
 {
index 85ab383f89342e3c37d9297645e89c36362af49b..9a42c147f194c9345c2356cb52d9f519396e8a65 100644 (file)
@@ -1313,6 +1313,7 @@ void SetDrawBackgroundMask(int);
 void SetWindowBackgroundBitmap(Bitmap *);
 void SetMainBackgroundBitmap(Bitmap *);
 void SetDoorBackgroundBitmap(Bitmap *);
+void SetRedrawMaskFromArea(int, int, int, int);
 
 void LimitScreenUpdates(boolean);