#pragma once /** ****************************************************************************** * Xenia : Xbox 360 Emulator Research Project * ****************************************************************************** * Copyright 2013 Ben Vanik. All rights reserved. * * Released under the BSD license - see LICENSE in the root for more details. * ****************************************************************************** * * @modified Tom Clay, 2026 - Adapted for ReXGlue runtime */ #include #include #include #include #include #include namespace rex::ui { class Window; } namespace rex::input { class InputSystem : public system::IInputSystem { public: explicit InputSystem(rex::ui::Window* window); ~InputSystem() override; rex::ui::Window* window() const { return window_; } X_STATUS Setup() override; void Shutdown() override; void AddDriver(std::unique_ptr driver); void AttachWindow(rex::ui::Window* window); void SetActiveCallback(std::function callback); void SetMenuChordCallback(std::function callback); X_RESULT GetCapabilities(uint32_t user_index, uint32_t flags, X_INPUT_CAPABILITIES* out_caps); X_RESULT GetState(uint32_t user_index, X_INPUT_STATE* out_state); // Merged raw pad state for host UI overlays: all connected pads across all // drivers and user slots, bypassing the is_active suppression and the // menu-chord edge tracking of the guest-facing GetState. Safe to call from // the UI thread. Returns false when no pad is connected. bool GetUiGamepadState(X_INPUT_GAMEPAD* out_gamepad); X_RESULT SetState(uint32_t user_index, X_INPUT_VIBRATION* vibration); X_RESULT GetKeystroke(uint32_t user_index, uint32_t flags, X_INPUT_KEYSTROKE* out_keystroke); private: rex::ui::Window* window_ = nullptr; std::vector> drivers_; std::function active_callback_ = nullptr; std::function menu_chord_callback_ = nullptr; bool menu_chord_down_ = false; }; /// Create a default InputSystem with SDL + NOP drivers. /// In tool mode, only the NOP driver is added. std::unique_ptr CreateDefaultInputSystem(bool tool_mode); } // namespace rex::input