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; } } }
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); }
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); }
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; }
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; } }
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); }