added pumping events when waiting for screen redraw
[rocksndiamonds.git] / src / libgame / sdl.c
index 4bd1987331b2a0d342f85c35ed666c2b5468fa33..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