diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index c92260ec1f..0210484c68 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -1136,7 +1136,7 @@ static void xmb_frame(void) if (!gl) return; - menu_animation_update(menu->animation, 0.002); + menu_animation_update(menu->animation, menu->dt / 7500000.0); glViewport(0, 0, gl->win_width, gl->win_height); diff --git a/menu/menu.c b/menu/menu.c index a95c7506fe..5c7d13b12a 100644 --- a/menu/menu.c +++ b/menu/menu.c @@ -21,6 +21,7 @@ #include "../dynamic.h" #include "../frontend/frontend.h" #include "../../retroarch.h" +#include "../../performance.h" #include /** @@ -371,6 +372,12 @@ int menu_iterate(retro_input_t input, int32_t ret = 0; unsigned action = menu_input_frame(input, trigger_input); + menu_handle_t *menu = menu_driver_resolve(); + + menu->cur_time = rarch_get_time_usec(); + menu->dt = menu->cur_time - menu->old_time; + menu->old_time = menu->cur_time; + if (driver.menu_ctx) { if (driver.menu_ctx->set_texture) diff --git a/menu/menu_driver.h b/menu/menu_driver.h index d7431057d6..2fcbff317e 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -97,11 +97,16 @@ typedef struct { void *userdata; + /* Delta timing */ + float dt; + float cur_time; + float old_time; + /* Used for key repeat */ struct { - unsigned timer; - unsigned count; + float timer; + float count; } delay; size_t begin; diff --git a/menu/menu_input.c b/menu/menu_input.c index 0318c15e9d..7de8bf1396 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -497,7 +497,7 @@ unsigned menu_input_frame(retro_input_t input, retro_input_t trigger_input) menu->mouse.enable = g_settings.menu.mouse_enable; - menu->delay.count++; + menu->delay.count += menu->dt / 10000.0; if (driver.block_input) trigger_input = 0;