1
0
mirror of https://github.com/libretro/RetroArch synced 2024-07-05 17:58:41 +00:00

(menu_input_bind_dialog.c) Use timer code

This commit is contained in:
twinaphex 2016-12-23 19:17:38 +01:00
parent ab2ee3c690
commit 74e224abf0
3 changed files with 32 additions and 16 deletions

View File

@ -26,6 +26,7 @@
#include "../../input/input_config.h"
#include "../../configuration.h"
#include "../../performance_counters.h"
#define MENU_MAX_BUTTONS 219
#define MENU_MAX_AXES 32
@ -51,7 +52,8 @@ struct menu_bind_state
{
struct retro_keybind *target;
/* For keyboard binding. */
int64_t timeout_end;
rarch_timer_t timer;
unsigned begin;
unsigned last;
unsigned user;
@ -61,7 +63,7 @@ struct menu_bind_state
};
static unsigned menu_bind_port = 0;
static struct menu_bind_state menu_input_binds;
static struct menu_bind_state menu_input_binds = {0};
static bool menu_input_key_bind_custom_bind_keyboard_cb(
void *data, unsigned code)
@ -71,8 +73,8 @@ static bool menu_input_key_bind_custom_bind_keyboard_cb(
menu_input_binds.target->key = (enum retro_key)code;
menu_input_binds.begin++;
menu_input_binds.target++;
menu_input_binds.timeout_end = cpu_features_get_time_usec() +
settings->input.bind_timeout * 1000000;
rarch_timer_begin_new_time(&menu_input_binds.timer, settings->input.bind_timeout);
return (menu_input_binds.begin <= menu_input_binds.last);
}
@ -251,8 +253,7 @@ bool menu_input_key_bind_set_mode(
menu_input_key_bind_poll_bind_state(
&menu_input_binds, menu_bind_port, false);
menu_input_binds.timeout_end = cpu_features_get_time_usec() +
settings->input.bind_timeout * 1000000;
rarch_timer_begin_new_time(&menu_input_binds.timer, settings->input.bind_timeout);
keys.userdata = menu;
keys.cb = menu_input_key_bind_custom_bind_keyboard_cb;
@ -376,21 +377,19 @@ bool menu_input_key_bind_iterate(menu_input_ctx_bind_t *bind)
struct menu_bind_state binds;
bool timed_out = false;
settings_t *settings = config_get_ptr();
int64_t current = cpu_features_get_time_usec();
int timeout =
(menu_input_binds.timeout_end - current) / 1000000;
rarch_timer_tick(&menu_input_binds.timer);
if (!bind)
return false;
if (timeout <= 0)
if (rarch_timer_has_expired(&menu_input_binds.timer))
{
input_driver_keyboard_mapping_set_block(false);
menu_input_binds.begin++;
menu_input_binds.target++;
menu_input_binds.timeout_end = cpu_features_get_time_usec() +
settings->input.bind_timeout * 1000000;
rarch_timer_begin_new_time(&menu_input_binds.timer, settings->input.bind_timeout);
timed_out = true;
}
@ -398,7 +397,7 @@ bool menu_input_key_bind_iterate(menu_input_ctx_bind_t *bind)
"[%s]\npress keyboard or joypad\n(timeout %d %s)",
input_config_bind_map_get_desc(
menu_input_binds.begin - MENU_SETTINGS_BIND_BEGIN),
timeout,
rarch_timer_get_timeout(&menu_input_binds.timer),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SECONDS));
/* binds.begin is updated in keyboard_press callback. */
@ -436,8 +435,7 @@ bool menu_input_key_bind_iterate(menu_input_ctx_bind_t *bind)
}
binds.target++;
binds.timeout_end = cpu_features_get_time_usec() +
settings->input.bind_timeout * 1000000;
rarch_timer_begin_new_time(&binds.timer, settings->input.bind_timeout);
}
menu_input_binds = binds;

View File

@ -156,6 +156,13 @@ void rarch_timer_tick(rarch_timer_t *timer)
timer->timeout = (timer->timeout_end - timer->current) / 1000000;
}
int rarch_timer_get_timeout(rarch_timer_t *timer)
{
if (!timer)
return 0;
return timer->timeout;
}
bool rarch_timer_is_running(rarch_timer_t *timer)
{
if (!timer)
@ -179,11 +186,18 @@ void rarch_timer_end(rarch_timer_t *timer)
timer->timeout_end = 0;
}
void rarch_timer_begin(rarch_timer_t *timer, uint64_t sec)
void rarch_timer_begin_new_time(rarch_timer_t *timer, uint64_t sec)
{
if (!timer)
return;
timer->timeout_end = cpu_features_get_time_usec() + sec * 1000000;
}
void rarch_timer_begin(rarch_timer_t *timer, uint64_t sec)
{
if (!timer)
return;
rarch_timer_begin_new_time(timer, sec);
timer->timer_begin = true;
timer->timer_end = false;
}

View File

@ -80,8 +80,12 @@ bool rarch_timer_has_expired(rarch_timer_t *timer);
void rarch_timer_begin(rarch_timer_t *timer, uint64_t ms);
void rarch_timer_begin_new_time(rarch_timer_t *timer, uint64_t sec);
void rarch_timer_end(rarch_timer_t *timer);
int rarch_timer_get_timeout(rarch_timer_t *timer);
RETRO_END_DECLS
#endif