Esempio n. 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;
}
Esempio n. 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;
}
Esempio n. 3
0
int menu_input_set_input_device_bind_mode(void *data,
      enum menu_input_bind_mode type)
{
   struct retro_keybind *keybind = NULL;
   rarch_setting_t  *setting = (rarch_setting_t*)data;
   settings_t *settings      = config_get_ptr();
   menu_handle_t       *menu = menu_driver_get_ptr();

   if (!menu || !setting)
      return -1;

   switch (type)
   {
      case MENU_INPUT_BIND_NONE:
         return -1;
      case MENU_INPUT_BIND_SINGLE:
         keybind = (struct retro_keybind*)setting->value.keybind;

         if (!keybind)
            return -1;
         menu->binds.begin  = setting->bind_type;
         menu->binds.last   = setting->bind_type;
         menu->binds.target = keybind;
         menu->binds.user   = setting->index_offset;
         menu_list_push_stack( menu->menu_list,
               "",
               "custom_bind",
               MENU_SETTINGS_CUSTOM_BIND,
               menu->navigation.selection_ptr);
         break;
      case MENU_INPUT_BIND_ALL:
         menu->binds.target = &settings->input.binds
            [setting->index_offset][0];
         menu->binds.begin  = MENU_SETTINGS_BIND_BEGIN;
         menu->binds.last   = MENU_SETTINGS_BIND_LAST;
         menu_list_push_stack( menu->menu_list,
               "",
               "custom_bind_all",
               MENU_SETTINGS_CUSTOM_BIND,
               menu->navigation.selection_ptr);
         break;
   }

   menu_input_poll_bind_get_rested_axes(&menu->binds);
   menu_input_poll_bind_state(&menu->binds);

   return 0;
}
Esempio n. 4
0
int menu_input_set_input_device_bind_mode(void *data,
      enum menu_input_bind_mode type)
{
   menu_handle_t       *menu = menu_driver_get_ptr();
   rarch_setting_t  *setting = (rarch_setting_t*)data;

   if (!setting)
      return -1;
   if (menu_input_set_bind_mode_common(setting, type) == -1)
      return -1;

   menu_input_poll_bind_get_rested_axes(&menu->binds);
   menu_input_poll_bind_state(&menu->binds);

   return 0;
}
Esempio n. 5
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;
}
Esempio n. 6
0
int menu_input_set_input_device_bind_mode(void *data,
      enum menu_input_bind_mode type)
{
   menu_input_t *menu_input  = menu_input_get_ptr();
   rarch_setting_t  *setting = (rarch_setting_t*)data;
   settings_t *settings      = config_get_ptr();

   bind_port = settings->input.joypad_map[setting->index_offset];

   if (!setting)
      return -1;
   if (menu_input_set_bind_mode_common(setting, type) == -1)
      return -1;

   menu_input_poll_bind_get_rested_axes(&menu_input->binds, bind_port);
   menu_input_poll_bind_state(&menu_input->binds, bind_port);

   return 0;
}