From 2608b1dc62d4cce830880bc504d995db96db0406 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Mon, 11 May 2020 02:00:46 +0200 Subject: [PATCH] Factorize window resize When the content size changes, either on frame size or client rotation changes, the window must be resized. Factorize for both cases. --- app/src/screen.c | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/app/src/screen.c b/app/src/screen.c index 0af8de83..0ca1343b 100644 --- a/app/src/screen.c +++ b/app/src/screen.c @@ -331,6 +331,21 @@ screen_destroy(struct screen *screen) { } } +static void +set_content_size(struct screen *screen, struct size new_content_size) { + struct size old_content_size = screen->content_size; + struct size windowed_size = get_windowed_window_size(screen); + struct size target_size = { + .width = (uint32_t) windowed_size.width * new_content_size.width + / old_content_size.width, + .height = (uint32_t) windowed_size.height * new_content_size.height + / old_content_size.height, + }; + target_size = get_optimal_size(target_size, new_content_size); + set_window_size(screen, target_size); + screen->content_size = new_content_size; +} + void screen_set_rotation(struct screen *screen, unsigned rotation) { assert(rotation < 4); @@ -338,7 +353,6 @@ screen_set_rotation(struct screen *screen, unsigned rotation) { return; } - struct size old_content_size = screen->content_size; struct size new_content_size = get_rotated_size(screen->frame_size, rotation); @@ -349,17 +363,7 @@ screen_set_rotation(struct screen *screen, unsigned rotation) { return; } - struct size windowed_size = get_windowed_window_size(screen); - struct size target_size = { - .width = (uint32_t) windowed_size.width * new_content_size.width - / old_content_size.width, - .height = (uint32_t) windowed_size.height * new_content_size.height - / old_content_size.height, - }; - target_size = get_optimal_size(target_size, new_content_size); - set_window_size(screen, target_size); - - screen->content_size = new_content_size; + set_content_size(screen, new_content_size); screen->rotation = rotation; LOGI("Display rotation set to %u", rotation); @@ -383,19 +387,8 @@ prepare_for_frame(struct screen *screen, struct size new_frame_size) { // frame dimension changed, destroy texture SDL_DestroyTexture(screen->texture); - struct size content_size = screen->content_size; - struct size windowed_size = get_windowed_window_size(screen); - struct size target_size = { - (uint32_t) windowed_size.width * new_content_size.width - / content_size.width, - (uint32_t) windowed_size.height * new_content_size.height - / content_size.height, - }; - target_size = get_optimal_size(target_size, new_content_size); - set_window_size(screen, target_size); - + set_content_size(screen, new_content_size); screen->frame_size = new_frame_size; - screen->content_size = new_content_size; LOGI("New texture: %" PRIu16 "x%" PRIu16, screen->frame_size.width, screen->frame_size.height);