Example #1
0
int menu_input_bind_iterate(void)
{
   int64_t current;
   char msg[PATH_MAX_LENGTH];
   struct menu_bind_state binds;
   int timeout = 0;
   menu_handle_t *menu = menu_driver_get_ptr();
   driver_t *driver = driver_get_ptr();
   global_t *global = global_get_ptr();
   bool bind_mode_kb = global ? global->menu.bind_mode_keyboard : false;

   if (!menu)
      return 1;

   menu_driver_render();

   current = rarch_get_time_usec();
   timeout = (menu->binds.timeout_end - current) / 1000000;

   snprintf(msg, sizeof(msg),
         bind_mode_kb ? "[%s]\npress keyboard\n(timeout %d seconds)" :
         "[%s]\npress joypad\n(RETURN to skip)",
         input_config_bind_map[
         menu->binds.begin - MENU_SETTINGS_BIND_BEGIN].desc,
         timeout);

   menu_driver_render_messagebox(msg);
   
   if (bind_mode_kb)
      return menu_input_bind_iterate_keyboard(current, timeout);

   binds = menu->binds;

   driver->block_input = true;
   menu_input_poll_bind_state(&binds);

   if ((binds.skip && !menu->binds.skip) ||
         menu_input_poll_find_trigger(&menu->binds, &binds))
   {
      driver->block_input = false;

      /* Avoid new binds triggering things right away. */
      driver->flushing_input = true;

      binds.begin++;

      if (binds.begin > binds.last)
         return 1;

      binds.target++;
   }
   menu->binds = binds;

   return 0;
}
Example #2
0
int menu_input_bind_iterate(char *s, size_t len)
{
   struct menu_bind_state binds;
   menu_input_t *menu_input     = menu_input_get_ptr();
   driver_t *driver             = driver_get_ptr();
   global_t *global             = global_get_ptr();
   bool bind_mode_kb            = global ? global->menu.bind_mode_keyboard : false;
   int64_t current              = rarch_get_time_usec();
   int timeout                  = (menu_input->binds.timeout_end - current) / 1000000;

   if (bind_mode_kb)
   {
      snprintf(s, len,
            "[%s]\npress keyboard\n(timeout %d %s)",
            input_config_bind_map[
            menu_input->binds.begin - MENU_SETTINGS_BIND_BEGIN].desc,
            timeout,
            menu_hash_to_str(MENU_VALUE_SECONDS));
      return menu_input_bind_iterate_keyboard(current, timeout);
   }
   else
      snprintf(s, len,
            "[%s]\npress joypad\n(RETURN to skip)",
            input_config_bind_map[
            menu_input->binds.begin - MENU_SETTINGS_BIND_BEGIN].desc);

   binds = menu_input->binds;

   input_driver_keyboard_mapping_set_block(true);
   menu_input_poll_bind_state(&binds, bind_port);

   if ((binds.skip && !menu_input->binds.skip) ||
         menu_input_poll_find_trigger(&menu_input->binds, &binds))
   {
      input_driver_keyboard_mapping_set_block(false);

      /* Avoid new binds triggering things right away. */
      driver->flushing_input = true;

      binds.begin++;

      if (binds.begin > binds.last)
         return 1;

      binds.target++;
   }
   menu_input->binds = binds;

   return 0;
}
Example #3
0
int menu_input_bind_iterate(void)
{
   char msg[PATH_MAX_LENGTH];
   struct menu_bind_state binds;
   menu_handle_t *menu = menu_driver_resolve();

   if (!menu)
      return 1;
   
   binds = menu->binds;
    
   if (driver.video_data && driver.menu_ctx &&
         driver.menu_ctx->render)
      driver.menu_ctx->render();

   snprintf(msg, sizeof(msg), "[%s]\npress joypad\n(RETURN to skip)",
         input_config_bind_map[
         menu->binds.begin - MENU_SETTINGS_BIND_BEGIN].desc);

   if (driver.video_data && driver.menu_ctx 
         && driver.menu_ctx->render_messagebox)
      driver.menu_ctx->render_messagebox( msg);

   driver.block_input = true;
   menu_input_poll_bind_state(&binds);

   if ((binds.skip && !menu->binds.skip) ||
         menu_input_poll_find_trigger(&menu->binds, &binds))
   {
      driver.block_input = false;

      /* Avoid new binds triggering things right away. */
      driver.flushing_input = true;

      binds.begin++;

      if (binds.begin > binds.last)
         return 1;

      binds.target++;
   }
   menu->binds = binds;

   return 0;
}