Factorize input hooks into reusable monitor classes

Those monitors will need some context so this will be useful
in the nearby future.
This commit is contained in:
Silent
2020-11-14 00:32:35 +01:00
parent 3f9ba4acb6
commit 99ec667b20
7 changed files with 118 additions and 93 deletions

View File

@@ -0,0 +1,45 @@
#pragma once
#include "frontend-common/controller_interface.h"
#include <QtCore/QObject>
// NOTE: Those Monitor classes must be copyable to meet the requirements of std::function, but at the same time we want
// copies to be opaque to the caling code and share context. Therefore, all mutable context of the monitor (if required)
// must be enclosed in a std::shared_ptr. m_parent/m_axis_type don't mutate so they don't need to be stored as such.
class InputButtonBindingMonitor
{
public:
explicit InputButtonBindingMonitor(QObject* parent) : m_parent(parent) {}
ControllerInterface::Hook::CallbackResult operator()(const ControllerInterface::Hook& ei) const;
private:
QObject* m_parent;
};
class InputAxisBindingMonitor
{
public:
explicit InputAxisBindingMonitor(QObject* parent, Controller::AxisType axis_type)
: m_parent(parent), m_axis_type(axis_type)
{
}
ControllerInterface::Hook::CallbackResult operator()(const ControllerInterface::Hook& ei) const;
private:
QObject* m_parent;
Controller::AxisType m_axis_type;
};
class InputRumbleBindingMonitor
{
public:
explicit InputRumbleBindingMonitor(QObject* parent) : m_parent(parent) {}
ControllerInterface::Hook::CallbackResult operator()(const ControllerInterface::Hook& ei) const;
private:
QObject* m_parent;
};