mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
50 lines
1.3 KiB
C++
50 lines
1.3 KiB
C++
#pragma once
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
#include <thread>
|
|
#include "Utilities/AutoResetEvent.h"
|
|
#include "Shared/Interfaces/IKeyManager.h"
|
|
#include "Shared/KeyDefinitions.h"
|
|
|
|
class LinuxGameController;
|
|
class Emulator;
|
|
|
|
class LinuxKeyManager : public IKeyManager
|
|
{
|
|
private:
|
|
Emulator* _emu;
|
|
std::vector<shared_ptr<LinuxGameController>> _controllers;
|
|
|
|
vector<KeyDefinition> _keyDefinitions;
|
|
bool _keyState[0x205];
|
|
std::unordered_map<uint16_t, string> _keyNames;
|
|
std::unordered_map<string, uint16_t> _keyCodes;
|
|
|
|
std::thread _updateDeviceThread;
|
|
atomic<bool> _stopUpdateDeviceThread;
|
|
AutoResetEvent _stopSignal;
|
|
bool _disableAllKeys;
|
|
|
|
void StartUpdateDeviceThread();
|
|
void CheckForGamepads(bool logInformation);
|
|
|
|
public:
|
|
LinuxKeyManager(Emulator* emu);
|
|
virtual ~LinuxKeyManager();
|
|
|
|
void RefreshState() override;
|
|
bool IsKeyPressed(uint16_t key) override;
|
|
optional<int16_t> GetAxisPosition(uint16_t key) override;
|
|
bool IsMouseButtonPressed(MouseButton button) override;
|
|
std::vector<uint16_t> GetPressedKeys() override;
|
|
string GetKeyName(uint16_t key) override;
|
|
uint16_t GetKeyCode(string keyName) override;
|
|
|
|
void UpdateDevices() override;
|
|
bool SetKeyState(uint16_t scanCode, bool state) override;
|
|
void ResetKeyState() override;
|
|
|
|
void SetDisabled(bool disabled) override;
|
|
|
|
void SetForceFeedback(uint16_t magnitude) override;
|
|
};
|