Files
2026-04-17 20:09:41 +03:00

56 lines
1.8 KiB
C++

#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 <memory>
#include <vector>
#include <rex/input/input.h>
#include <rex/input/input_driver.h>
#include <rex/system/interfaces/input.h>
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<InputDriver> driver);
void AttachWindow(rex::ui::Window* window);
void SetActiveCallback(std::function<bool()> 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);
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<std::unique_ptr<InputDriver>> drivers_;
};
/// Create a default InputSystem with SDL + NOP drivers.
/// In tool mode, only the NOP driver is added.
std::unique_ptr<InputSystem> CreateDefaultInputSystem(bool tool_mode);
} // namespace rex::input