From f3fba3c4b968f4242fc0f5d092daa63ffa9b8f5e Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Wed, 8 Apr 2020 14:11:23 +0200 Subject: [PATCH] Store rotated content size This avoids to compute it every time from the frame size. --- app/src/screen.c | 22 +++++++++------------- app/src/screen.h | 7 ++++++- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/app/src/screen.c b/app/src/screen.c index ae33cd27..4dacaae2 100644 --- a/app/src/screen.c +++ b/app/src/screen.c @@ -185,8 +185,8 @@ screen_init_rendering(struct screen *screen, const char *window_title, if (rotation) { LOGI("Initial display rotation set to %u", rotation); } - struct size content_size = - get_rotated_size(frame_size, screen->rotation); + struct size content_size = get_rotated_size(frame_size, screen->rotation); + screen->content_size = content_size; struct size window_size = get_initial_optimal_size(content_size, window_width, window_height); @@ -280,8 +280,7 @@ screen_set_rotation(struct screen *screen, unsigned rotation) { return; } - struct size old_content_size = - get_rotated_size(screen->frame_size, screen->rotation); + struct size old_content_size = screen->content_size; struct size new_content_size = get_rotated_size(screen->frame_size, rotation); @@ -302,6 +301,7 @@ screen_set_rotation(struct screen *screen, unsigned rotation) { target_size = get_optimal_size(target_size, new_content_size); set_window_size(screen, target_size); + screen->content_size = new_content_size; screen->rotation = rotation; LOGI("Display rotation set to %u", rotation); @@ -325,8 +325,7 @@ prepare_for_frame(struct screen *screen, struct size new_frame_size) { // frame dimension changed, destroy texture SDL_DestroyTexture(screen->texture); - struct size content_size = - get_rotated_size(screen->frame_size, screen->rotation); + 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 @@ -338,6 +337,7 @@ prepare_for_frame(struct screen *screen, struct size new_frame_size) { set_window_size(screen, target_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); @@ -390,8 +390,7 @@ screen_render(struct screen *screen) { SDL_Rect *dstrect = NULL; SDL_Rect rect; if (screen->rotation & 1) { - struct size size = - get_rotated_size(screen->frame_size, screen->rotation); + struct size size = screen->content_size; rect.x = (size.width - size.height) / 2; rect.y = (size.height - size.width) / 2; rect.w = size.height; @@ -431,10 +430,8 @@ screen_resize_to_fit(struct screen *screen) { screen->maximized = false; } - struct size content_size = - get_rotated_size(screen->frame_size, screen->rotation); struct size optimal_size = - get_optimal_window_size(screen, content_size); + get_optimal_window_size(screen, screen->content_size); SDL_SetWindowSize(screen->window, optimal_size.width, optimal_size.height); LOGD("Resized to optimal size"); } @@ -450,8 +447,7 @@ screen_resize_to_pixel_perfect(struct screen *screen) { screen->maximized = false; } - struct size content_size = - get_rotated_size(screen->frame_size, screen->rotation); + struct size content_size = screen->content_size; SDL_SetWindowSize(screen->window, content_size.width, content_size.height); LOGD("Resized to pixel-perfect"); } diff --git a/app/src/screen.h b/app/src/screen.h index 8afbbf46..39593e04 100644 --- a/app/src/screen.h +++ b/app/src/screen.h @@ -17,6 +17,7 @@ struct screen { SDL_Renderer *renderer; SDL_Texture *texture; struct size frame_size; + struct size content_size; // rotated frame_size // The window size the last time it was not maximized or fullscreen. struct size windowed_window_size; // Since we receive the event SIZE_CHANGED before MAXIMIZED, we must be @@ -35,7 +36,11 @@ struct screen { .renderer = NULL, \ .texture = NULL, \ .frame_size = { \ - .width = 0, \ + .width = 0, \ + .height = 0, \ + }, \ + .content_size = { \ + .width = 0, \ .height = 0, \ }, \ .windowed_window_size = { \ -- GitLab