fixed removing potential multiple screen redraw in the same video frame
[rocksndiamonds.git] / src / tools.c
index 6dc9129afa775e788a8f9bbefc36dafef01f8fd5..30e9cd5660b5de185b254e3600845d92d49b29e3 100644 (file)
@@ -550,6 +550,10 @@ void BackToFront()
   if (redraw_mask & REDRAW_FPS)
     DrawFramesPerSecond();
 
+  // remove playfield redraw before potentially merging with doors redraw
+  if (DrawingDeactivated(REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE))
+    redraw_mask &= ~REDRAW_FIELD;
+
   // redraw complete window if both playfield and (some) doors need redraw
   if (redraw_mask & REDRAW_FIELD && redraw_mask & REDRAW_DOORS)
     redraw_mask = REDRAW_ALL;
@@ -583,14 +587,16 @@ void BackToFront()
       x2 = MAX(x2, DX + DXSIZE);
       y2 = MAX(y2, DY + DYSIZE);
     }
-    else if (redraw_mask & REDRAW_DOOR_2)
+
+    if (redraw_mask & REDRAW_DOOR_2)
     {
       x1 = MIN(x1, VX);
       y1 = MIN(y1, VY);
       x2 = MAX(x2, VX + VXSIZE);
       y2 = MAX(y2, VY + VYSIZE);
     }
-    else if (redraw_mask & REDRAW_DOOR_3)
+
+    if (redraw_mask & REDRAW_DOOR_3)
     {
       x1 = MIN(x1, EX);
       y1 = MIN(y1, EY);