added optional button to restart game (door, panel and touch variants)
[rocksndiamonds.git] / src / tools.c
index e56516a016ef5cd04e40b08d3a55ae966e9fc968..4083e77ea1ba9733746632ceeb8bc2c1182dea0c 100644 (file)
@@ -1517,6 +1517,11 @@ void SetRandomAnimationValue(int x, int y)
   gfx.anim_random_frame = GfxRandom[x][y];
 }
 
+void SetAnimationFirstLevel(int first_level)
+{
+  gfx.anim_first_level = first_level;
+}
+
 int getGraphicAnimationFrame(int graphic, int sync_frame)
 {
   // animation synchronized with global frame counter, not move position
@@ -3056,6 +3061,8 @@ static void PrepareEnvelopeRequestToScreen(Bitmap *bitmap, int sx, int sy,
   SDLFreeBitmapTextures(request.bitmap);
   SDLCreateBitmapTextures(request.bitmap);
 
+  ResetBitmapAlpha(request.bitmap);
+
   // set envelope request run-time values
   request.sx = sx;
   request.sy = sy;
@@ -3069,7 +3076,11 @@ void DrawEnvelopeRequestToScreen(int drawing_target)
       game.request_active &&
       drawing_target == DRAW_TO_SCREEN)
   {
-    if (graphic_info[IMG_BACKGROUND_REQUEST].draw_masked)
+    struct GraphicInfo *g = &graphic_info[IMG_BACKGROUND_REQUEST];
+
+    SetBitmapAlphaNextBlit(request.bitmap, g->alpha);
+
+    if (g->draw_masked)
       BlitToScreenMasked(request.bitmap, 0, 0, request.xsize, request.ysize,
                         request.sx, request.sy);
     else
@@ -3176,6 +3187,13 @@ static void DrawEnvelopeRequestText(int sx, int sy, char *text)
   {
     char *src_text_ptr, *dst_text_ptr;
 
+    if (maxWordLengthInRequestString(text) > line_length)
+    {
+      font_nr = FONT_REQUEST_NARROW;
+      font_width = getFontWidth(font_nr);
+      line_length = max_text_width  / font_width;
+    }
+
     text_door_style = checked_malloc(2 * strlen(text) + 1);
 
     src_text_ptr = text;
@@ -4595,11 +4613,12 @@ static int RequestHandleEvents(unsigned int req_state, int draw_buffer_game)
                break;
 
              default:
-               // only check clickable animations if no request gadget clicked
-               HandleGlobalAnimClicks(mx, my, button_status, FALSE);
                break;
            }
 
+           // only needed to handle clickable pointer animations here
+           HandleGlobalAnimClicks(mx, my, button_status, FALSE);
+
            break;
          }