Changes the interface as well to remove any unique methods that frontends needed to call such as StartJoystickEventHandler by conditionally starting the polling thread only if the frontend hasn't started it already. Additionally, moves all global state into a single SDLState class in order to guarantee that the destructors are called in the proper order
66 lines
1.9 KiB
C++
66 lines
1.9 KiB
C++
// Copyright 2017 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace Common {
|
|
class ParamPackage;
|
|
}
|
|
|
|
namespace InputCommon {
|
|
|
|
/// Initializes and registers all built-in input device factories.
|
|
void Init();
|
|
|
|
/// Deregisters all built-in input device factories and shuts them down.
|
|
void Shutdown();
|
|
|
|
class Keyboard;
|
|
|
|
/// Gets the keyboard button device factory.
|
|
Keyboard* GetKeyboard();
|
|
|
|
class MotionEmu;
|
|
|
|
/// Gets the motion emulation factory.
|
|
MotionEmu* GetMotionEmu();
|
|
|
|
/// Generates a serialized param package for creating a keyboard button device
|
|
std::string GenerateKeyboardParam(int key_code);
|
|
|
|
/// Generates a serialized param package for creating an analog device taking input from keyboard
|
|
std::string GenerateAnalogParamFromKeys(int key_up, int key_down, int key_left, int key_right,
|
|
int key_modifier, float modifier_scale);
|
|
|
|
namespace Polling {
|
|
|
|
enum class DeviceType { Button, Analog };
|
|
|
|
/**
|
|
* A class that can be used to get inputs from an input device like controllers without having to
|
|
* poll the device's status yourself
|
|
*/
|
|
class DevicePoller {
|
|
public:
|
|
virtual ~DevicePoller() = default;
|
|
/// Setup and start polling for inputs, should be called before GetNextInput
|
|
virtual void Start() = 0;
|
|
/// Stop polling
|
|
virtual void Stop() = 0;
|
|
/**
|
|
* Every call to this function returns the next input recorded since calling Start
|
|
* @return A ParamPackage of the recorded input, which can be used to create an InputDevice.
|
|
* If there has been no input, the package is empty
|
|
*/
|
|
virtual Common::ParamPackage GetNextInput() = 0;
|
|
};
|
|
|
|
// Get all DevicePoller from all backends for a specific device type
|
|
std::vector<std::unique_ptr<DevicePoller>> GetPollers(DeviceType type);
|
|
} // namespace Polling
|
|
} // namespace InputCommon
|