diff --git a/app/src/scrcpy.c b/app/src/scrcpy.c index 5bf4289d..ec4bc468 100644 --- a/app/src/scrcpy.c +++ b/app/src/scrcpy.c @@ -83,18 +83,10 @@ static SDL_bool event_loop(void) { switch (event.window.event) { case SDL_WINDOWEVENT_EXPOSED: case SDL_WINDOWEVENT_SIZE_CHANGED: - screen_render(&screen); - int scale_x, scale_y; - get_window_scale(SDL_GetWindowFromID(event.button.windowID), &scale_x, &scale_y); - if (scale_x != screen.scale_x || scale_y != screen.scale_y) { - int logical_width, logical_height; - SDL_RenderGetLogicalSize(screen.renderer, &logical_width, &logical_height); - logical_width *= (float)scale_x / screen.scale_x; - logical_height *= (float)scale_y / screen.scale_y; - screen.scale_x = scale_x; - screen.scale_y = scale_y; - SDL_RenderSetLogicalSize(screen.renderer, logical_width, logical_height); + if (!screen_update_logical_size_if_needed(&screen)) { + return SDL_FALSE; } + screen_render(&screen); break; } break; diff --git a/app/src/screen.c b/app/src/screen.c index edd5aecf..af9cc58c 100644 --- a/app/src/screen.c +++ b/app/src/screen.c @@ -74,6 +74,24 @@ void get_window_scale(SDL_Window *window, int *scale_x, int *scale_y) { *scale_y = output_h / win_h; } +SDL_bool screen_update_logical_size_if_needed(struct screen *screen) { + int scale_x, scale_y; + get_window_scale(screen->window, &scale_x, &scale_y); + if (scale_x != screen->scale_x || scale_y != screen->scale_y) { + int logical_width, logical_height; + SDL_RenderGetLogicalSize(screen->renderer, &logical_width, &logical_height); + logical_width *= (float)scale_x / screen->scale_x; + logical_height *= (float)scale_y / screen->scale_y; + screen->scale_x = scale_x; + screen->scale_y = scale_y; + if (SDL_RenderSetLogicalSize(screen->renderer, logical_width, logical_height)) { + LOGE("Could not set renderer logical size: %s", SDL_GetError()); + return SDL_FALSE; + } + } + return SDL_TRUE; +} + // get the preferred display bounds (i.e. the screen bounds with some margins) static SDL_bool get_preferred_display_bounds(struct size *bounds) { SDL_Rect rect; diff --git a/app/src/screen.h b/app/src/screen.h index ab2ebbd4..32a854b8 100644 --- a/app/src/screen.h +++ b/app/src/screen.h @@ -70,4 +70,6 @@ void screen_resize_to_pixel_perfect(struct screen *screen); void get_window_scale(SDL_Window *window, int *scale_x, int *scale_y); +SDL_bool screen_update_logical_size_if_needed(struct screen *screen); + #endif