X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=e13b6736e32999aec9e2574c7d3da7780dffe59c;hp=4bd1987331b2a0d342f85c35ed666c2b5468fa33;hb=e617cc94b68c43105fc3c06d26d31c9bc99161a4;hpb=75cfa2cbbb354fdd2bb3118c9cc9d130c7485ddb diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index 4bd19873..e13b6736 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -218,12 +218,16 @@ static void UpdateScreenExt(SDL_Rect *rect, boolean with_frame_delay) if (with_frame_delay) WaitUntilDelayReached(&video.frame_delay, video.frame_delay_value); + video.frame_counter++; + // show render target buffer on screen SDL_RenderPresent(sdl_renderer); } static void UpdateScreen_WithFrameDelay(SDL_Rect *rect) { + PumpEvents(); // execute event filter actions while waiting + UpdateScreenExt(rect, TRUE); } @@ -2362,6 +2366,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