cleanup of redraw masks
[rocksndiamonds.git] / src / tools.c
index 39a0d68140e3f6e47f374e489a15767d7eb27e10..16985341b6241826baa1074be7d99c6f927b3d43 100644 (file)
@@ -419,18 +419,30 @@ void BlitScreenToBitmap(Bitmap *target_bitmap)
   redraw_mask |= REDRAW_FIELD;
 }
 
+void DrawFramesPerSecond()
+{
+  char text[100];
+  int font_nr = FONT_TEXT_2;
+  int font_width = getFontWidth(font_nr);
+
+  sprintf(text, "%04.1f fps", global.frames_per_second);
+
+  DrawTextExt(backbuffer, WIN_XSIZE - font_width * strlen(text), 0, text,
+             font_nr, BLIT_OPAQUE);
+}
+
 void BackToFront()
 {
   if (redraw_mask == REDRAW_NONE)
     return;
 
-  // redraw playfield if anything inside main playfield area needs redraw
-  if (redraw_mask & REDRAW_MAIN)
-    redraw_mask |= REDRAW_FIELD;
-
   // draw masked border to all viewports, if defined
   DrawMaskedBorder(redraw_mask);
 
+  // draw frames per second (only if debug mode is enabled)
+  if (redraw_mask & REDRAW_FPS)
+    DrawFramesPerSecond();
+
   // redraw complete window if both playfield and (some) doors need redraw
   if (redraw_mask & REDRAW_FIELD && redraw_mask & REDRAW_DOORS)
     redraw_mask = REDRAW_ALL;
@@ -1959,7 +1971,7 @@ void AnimateEnvelope(int envelope_nr, int anim_mode, int action)
                   level.envelope[envelope_nr].autowrap,
                   level.envelope[envelope_nr].centered, FALSE);
 
-    redraw_mask |= REDRAW_FIELD | REDRAW_FROM_BACKBUFFER;
+    redraw_mask |= REDRAW_FIELD;
     BackToFront();
 
     SkipUntilDelayReached(&anim_delay, anim_delay_value, &i, last_frame);
@@ -2205,7 +2217,7 @@ void AnimateEnvelopeRequest(int anim_mode, int action)
       }
     }
 
-    redraw_mask |= REDRAW_FIELD | REDRAW_FROM_BACKBUFFER;
+    redraw_mask |= REDRAW_FIELD;
 
     DoAnimation();
     BackToFront();
@@ -2397,7 +2409,7 @@ static void DrawPreviewLevelPlayfieldExt(int from_x, int from_y)
     }
   }
 
-  redraw_mask |= REDRAW_MICROLEVEL;
+  redraw_mask |= REDRAW_FIELD;
 }
 
 #define MICROLABEL_EMPTY               0
@@ -2466,7 +2478,7 @@ static void DrawPreviewLevelLabelExt(int mode)
   if (strlen(label_text) > 0)
     DrawTextSAligned(pos->x, pos->y, label_text, font_nr, pos->align);
 
-  redraw_mask |= REDRAW_MICROLEVEL;
+  redraw_mask |= REDRAW_FIELD;
 }
 
 static void DrawPreviewLevelExt(boolean restart)