added pumping events when waiting for screen redraw
[rocksndiamonds.git] / src / libgame / sdl.c
index 45cfcd7d81a6a498cad884038ecdf0d6c42b5f65..f18b97b47afee8a1db1fc0e380b7b178a2f4397f 100644 (file)
@@ -224,6 +224,8 @@ static void UpdateScreenExt(SDL_Rect *rect, boolean with_frame_delay)
 
 static void UpdateScreen_WithFrameDelay(SDL_Rect *rect)
 {
+  PumpEvents();                // execute event filter actions while waiting
+
   UpdateScreenExt(rect, TRUE);
 }
 
@@ -2362,6 +2364,27 @@ void SDLWaitEvent(Event *event)
   SDL_WaitEvent(event);
 }
 
+void SDLCorrectRawMousePosition(int *x, int *y)
+{
+  if (sdl_renderer == NULL)
+    return;
+
+  // this corrects the raw mouse position for logical screen size within event
+  // filters (correction done later by SDL library when handling mouse events)
+
+  SDL_Rect viewport;
+  float scale_x, scale_y;
+
+  SDL_RenderGetViewport(sdl_renderer, &viewport);
+  SDL_RenderGetScale(sdl_renderer, &scale_x, &scale_y);
+
+  *x = (int)(*x / scale_x);
+  *y = (int)(*y / scale_y);
+
+  *x -= viewport.x;
+  *y -= viewport.y;
+}
+
 
 // ============================================================================
 // joystick functions
@@ -2885,12 +2908,8 @@ static void DrawTouchInputOverlay_ShowGridButtons(int alpha)
 
 static void DrawTouchInputOverlay(void)
 {
-  static SDL_Texture *texture = NULL;
-  static boolean initialized = FALSE;
   static boolean deactivated = TRUE;
   static boolean show_grid = FALSE;
-  static int width = 0, height = 0;
-  static int alpha_last = -1;
   static int alpha = 0;
   int alpha_max = ALPHA_FROM_TRANSPARENCY(setup.touch.transparency);
   int alpha_step = ALPHA_FADING_STEPSIZE(alpha_max);
@@ -2923,72 +2942,5 @@ static void DrawTouchInputOverlay(void)
     DrawTouchInputOverlay_ShowGrid(alpha);
 
   DrawTouchInputOverlay_ShowGridButtons(alpha);
-
-  return;
-
-
-  // !!! VIRTUAL BUTTONS FROM IMAGE FILE NOT USED ANYMORE !!!
-
-  if (!initialized)
-  {
-    char *basename = "overlay/VirtualButtons.png";
-    char *filename = getCustomImageFilename(basename);
-
-    if (filename == NULL)
-      Error(ERR_EXIT, "LoadCustomImage(): cannot find file '%s'", basename);
-
-    SDL_Surface *surface;
-
-    if ((surface = IMG_Load(filename)) == NULL)
-      Error(ERR_EXIT, "IMG_Load() failed: %s", SDL_GetError());
-
-    width  = surface->w;
-    height = surface->h;
-
-    // set black pixel to transparent if no alpha channel / transparent color
-    if (!SDLHasAlpha(surface) &&
-       !SDLHasColorKey(surface))
-      SDL_SetColorKey(surface, SET_TRANSPARENT_PIXEL,
-                     SDL_MapRGB(surface->format, 0x00, 0x00, 0x00));
-
-    if ((texture = SDLCreateTextureFromSurface(surface)) == NULL)
-      Error(ERR_EXIT, "SDLCreateTextureFromSurface() failed");
-
-    SDL_FreeSurface(surface);
-
-    SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
-
-    initialized = TRUE;
-  }
-
-  if (alpha != alpha_last)
-    SDL_SetTextureAlphaMod(texture, alpha);
-
-  alpha_last = alpha;
-
-  float ratio_overlay = (float) width / height;
-  float ratio_screen = (float) video.screen_width / video.screen_height;
-  int width_scaled, height_scaled;
-  int xpos, ypos;
-
-  if (ratio_overlay > ratio_screen)
-  {
-    width_scaled = video.screen_width;
-    height_scaled = video.screen_height * ratio_screen / ratio_overlay;
-    xpos = 0;
-    ypos = video.screen_height - height_scaled;
-  }
-  else
-  {
-    width_scaled = video.screen_width * ratio_overlay / ratio_screen;
-    height_scaled = video.screen_height;
-    xpos = (video.screen_width - width_scaled) / 2;
-    ypos = 0;
-  }
-
-  SDL_Rect src_rect = { 0, 0, width, height };
-  SDL_Rect dst_rect = { xpos, ypos, width_scaled, height_scaled };
-
-  SDL_RenderCopy(sdl_renderer, texture, &src_rect, &dst_rect);
 }
 #endif