X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=f18b97b47afee8a1db1fc0e380b7b178a2f4397f;hp=45cfcd7d81a6a498cad884038ecdf0d6c42b5f65;hb=ed7934511c4ad252316e32e00af2ce89a40c5609;hpb=0f1e162b9ce8b032e3e50d1cfe9dcc157b4814de diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index 45cfcd7d..f18b97b4 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -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