示例#1
0
void menu_poll_bind_state(struct menu_bind_state *state)
{
   if (!state)
      return;

   unsigned i, b, a, h;
   memset(state->state, 0, sizeof(state->state));
   state->skip = input_input_state_func(NULL, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_RETURN);

   const rarch_joypad_driver_t *joypad = NULL;
   if (driver.input && driver.input_data && driver.input->get_joypad_driver)
      joypad = driver.input->get_joypad_driver(driver.input_data);

   if (!joypad)
   {
      RARCH_ERR("Cannot poll raw joypad state.");
      return;
   }

   input_joypad_poll(joypad);
   for (i = 0; i < MAX_PLAYERS; i++)
   {
      for (b = 0; b < MENU_MAX_BUTTONS; b++)
         state->state[i].buttons[b] = input_joypad_button_raw(joypad, i, b);
      for (a = 0; a < MENU_MAX_AXES; a++)
         state->state[i].axes[a] = input_joypad_axis_raw(joypad, i, a);
      for (h = 0; h < MENU_MAX_HATS; h++)
      {
         state->state[i].hats[h] |= input_joypad_hat_raw(joypad, i, HAT_UP_MASK, h) ? HAT_UP_MASK : 0;
         state->state[i].hats[h] |= input_joypad_hat_raw(joypad, i, HAT_DOWN_MASK, h) ? HAT_DOWN_MASK : 0;
         state->state[i].hats[h] |= input_joypad_hat_raw(joypad, i, HAT_LEFT_MASK, h) ? HAT_LEFT_MASK : 0;
         state->state[i].hats[h] |= input_joypad_hat_raw(joypad, i, HAT_RIGHT_MASK, h) ? HAT_RIGHT_MASK : 0;
      }
   }
}
示例#2
0
static void sdl_input_poll(void *data)
{
   SDL_PumpEvents();
   sdl_input_t *sdl = (sdl_input_t*)data;

   input_joypad_poll(sdl->joypad);
   sdl_poll_mouse(sdl);
}
示例#3
0
static void x_input_poll(void *data)
{
   x11_input_t *x11 = (x11_input_t*)data;

   if (video_focus_func())
      XQueryKeymap(x11->display, x11->state);
   else
      memset(x11->state, 0, sizeof(x11->state));

   x_input_poll_mouse(x11);
   input_joypad_poll(x11->joypad);
}
示例#4
0
static void apple_input_poll(void *data)
{
   int i;
   (void)data;

#ifdef IOS
   apple_gamecontroller_poll_all();
#endif

   for (i = 0; i < g_current_input_data.touch_count; i ++)
   {
      input_translate_coord_viewport(g_current_input_data.touches[i].screen_x, g_current_input_data.touches[i].screen_y,
         &g_current_input_data.touches[i].fixed_x, &g_current_input_data.touches[i].fixed_y,
         &g_current_input_data.touches[i].full_x, &g_current_input_data.touches[i].full_y);
   }

   input_joypad_poll(joypad);
   g_current_input_data.pad_buttons[0] |= apple_input_get_icade_buttons();

   g_current_input_data.mouse_delta[0] = 0;
   g_current_input_data.mouse_delta[1] = 0;
}
示例#5
0
static void linuxraw_input_poll(void *data)
{
   linuxraw_input_t *linuxraw = (linuxraw_input_t*)data;
   uint8_t c;
   uint16_t t;

   while (read(STDIN_FILENO, &c, 1) > 0)
   {
      if (c == KEY_C && (linuxraw->state[KEY_LEFTCTRL] || linuxraw->state[KEY_RIGHTCTRL]))
         kill(getpid(), SIGINT);

      bool pressed = !(c & 0x80);
      c &= ~0x80;

      // ignore extended scancodes
      if (!c)
         read(STDIN_FILENO, &t, 2);
      else
         linuxraw->state[c] = pressed;
   }

   input_joypad_poll(linuxraw->joypad);
}
static void poll_joypad(const rarch_joypad_driver_t *driver,
      unsigned pad,
      struct poll_data *data)
{
   input_joypad_poll(driver);

   for (unsigned i = 0; i < MAX_BUTTONS; i++)
      data->buttons[i] = input_joypad_button_raw(driver, pad, i);

   for (unsigned i = 0; i < MAX_AXES; i++)
      data->axes[i] = input_joypad_axis_raw(driver, pad, i);

   for (unsigned i = 0; i < MAX_HATS; i++)
   {
      uint16_t hat = 0;
      hat |= input_joypad_hat_raw(driver, pad, HAT_UP_MASK, i)    << HAT_UP_SHIFT;
      hat |= input_joypad_hat_raw(driver, pad, HAT_DOWN_MASK, i)  << HAT_DOWN_SHIFT;
      hat |= input_joypad_hat_raw(driver, pad, HAT_LEFT_MASK, i)  << HAT_LEFT_SHIFT;
      hat |= input_joypad_hat_raw(driver, pad, HAT_RIGHT_MASK, i) << HAT_RIGHT_SHIFT;

      data->hats[i] = hat;
   }
}
示例#7
0
文件: dinput.c 项目: neagix/RetroArch
static void dinput_poll(void *data)
{
   struct dinput_input *di = (struct dinput_input*)data;

   memset(di->state, 0, sizeof(di->state));
   if (FAILED(IDirectInputDevice8_GetDeviceState(di->keyboard, sizeof(di->state), di->state)))
   {
      IDirectInputDevice8_Acquire(di->keyboard);
      if (FAILED(IDirectInputDevice8_GetDeviceState(di->keyboard, sizeof(di->state), di->state)))
         memset(di->state, 0, sizeof(di->state));
   }

   DIMOUSESTATE2 mouse_state;
   memset(&mouse_state, 0, sizeof(mouse_state));
   if (FAILED(IDirectInputDevice8_GetDeviceState(di->mouse, sizeof(mouse_state), &mouse_state)))
   {
      IDirectInputDevice8_Acquire(di->mouse);
      if (FAILED(IDirectInputDevice8_GetDeviceState(di->mouse, sizeof(mouse_state), &mouse_state)))
         memset(&mouse_state, 0, sizeof(mouse_state));
   }

   di->mouse_rel_x = mouse_state.lX;
   di->mouse_rel_y = mouse_state.lY;
   di->mouse_l = mouse_state.rgbButtons[0];
   di->mouse_r = mouse_state.rgbButtons[1];
   di->mouse_m = mouse_state.rgbButtons[2];

   // No simple way to get absolute coordinates for RETRO_DEVICE_POINTER. Just use Win32 APIs.
   POINT point = {0};
   GetCursorPos(&point);
   ScreenToClient((HWND)driver.video_window, &point);
   di->mouse_x = point.x;
   di->mouse_y = point.y;

   input_joypad_poll(di->joypad);
}