From 9d331d766c9093c4c003d6b3629a9f1c69b08174 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Thu, 27 Jan 2022 05:08:23 -0500 Subject: menu: Render at 30 fps, not just on input events This is necessary to blink the text cursor. --- (limited to 'src/menu.c') diff --git a/src/menu.c b/src/menu.c index b03ab8b..b171d2b 100644 --- a/src/menu.c +++ b/src/menu.c @@ -226,7 +226,11 @@ mf_menu(SDL_Renderer *renderer) TTF_Font *title_font = NULL; TTF_Font *text_font = NULL; struct mftk_window *win = NULL; + int fr; + Uint32 beg; SDL_Event event; + Uint32 end; + Uint32 delay; /* Create maze */ maze = mf_maze_new(time(NULL), @@ -285,27 +289,31 @@ mf_menu(SDL_Renderer *renderer) SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); - while (SDL_WaitEvent(&event)) { - switch (event.type) { - case SDL_QUIT: - goto quit; - case SDL_KEYDOWN: - switch (event.key.keysym.sym) { - case SDLK_ESCAPE: - goto quit; + fr = 10; + while(1) { + beg = SDL_GetTicks(); + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_QUIT: + goto quit; + case SDL_KEYDOWN: + switch (event.key.keysym.sym) { + case SDLK_ESCAPE: + goto quit; + default: + break; + } default: break; - } - default: - break; - } - switch (mftk_window_event(win, &event)) { - case 0: - break; - case 1: - goto quit; - default: - goto err; + } + switch (mftk_window_event(win, &event)) { + case 0: + break; + case 1: + goto quit; + default: + goto err; + } } SDL_SetRenderDrawColor(renderer, MF_COLOR_BACK_R, MF_COLOR_BACK_G, @@ -315,6 +323,18 @@ mf_menu(SDL_Renderer *renderer) MF_MENU_MAZE_CELL_W); mftk_window_render(win, renderer); SDL_RenderPresent(renderer); + end = SDL_GetTicks(); + if ((Uint32) (1000 / fr) > (end - beg)) { + delay = 1000 / fr - (end - beg); + } else { + SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, + "Frame took longer than frame period"); + delay = 0; + } + SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, + "Frame took %u ms, delaying %u ms", + end - beg, delay); + SDL_Delay(delay); } quit: -- cgit v0.9.1