summaryrefslogtreecommitdiffstats
path: root/xbmc/peripherals/addons/AddonInputHandling.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/peripherals/addons/AddonInputHandling.cpp')
-rw-r--r--xbmc/peripherals/addons/AddonInputHandling.cpp167
1 files changed, 83 insertions, 84 deletions
diff --git a/xbmc/peripherals/addons/AddonInputHandling.cpp b/xbmc/peripherals/addons/AddonInputHandling.cpp
index 7490b96..644c33e 100644
--- a/xbmc/peripherals/addons/AddonInputHandling.cpp
+++ b/xbmc/peripherals/addons/AddonInputHandling.cpp
@@ -16,8 +16,8 @@
#include "input/keyboard/interfaces/IKeyboardInputHandler.h"
#include "input/mouse/generic/MouseInputHandling.h"
#include "input/mouse/interfaces/IMouseInputHandler.h"
+#include "peripherals/Peripherals.h"
#include "peripherals/addons/AddonButtonMap.h"
-#include "peripherals/devices/Peripheral.h"
#include "utils/log.h"
using namespace KODI;
@@ -26,106 +26,105 @@ using namespace PERIPHERALS;
CAddonInputHandling::CAddonInputHandling(CPeripherals& manager,
CPeripheral* peripheral,
- std::shared_ptr<CPeripheralAddon> addon,
IInputHandler* handler,
IDriverReceiver* receiver)
- : m_manager(manager),
- m_peripheral(peripheral),
- m_addon(std::move(addon)),
- m_joystickInputHandler(handler),
- m_joystickDriverReceiver(receiver)
{
+ PeripheralAddonPtr addon = manager.GetAddonWithButtonMap(peripheral);
+
+ if (!addon)
+ {
+ CLog::Log(LOGDEBUG, "Failed to locate add-on for \"{}\"", peripheral->DeviceName());
+ }
+ else
+ {
+ m_buttonMap.reset(new CAddonButtonMap(peripheral, addon, handler->ControllerID()));
+ if (m_buttonMap->Load())
+ {
+ m_driverHandler.reset(new CInputHandling(handler, m_buttonMap.get()));
+
+ if (receiver)
+ {
+ m_inputReceiver.reset(new CDriverReceiving(receiver, m_buttonMap.get()));
+
+ // Interfaces are connected here because they share button map as a common resource
+ handler->SetInputReceiver(m_inputReceiver.get());
+ }
+ }
+ else
+ {
+ m_buttonMap.reset();
+ }
+ }
}
CAddonInputHandling::CAddonInputHandling(CPeripherals& manager,
CPeripheral* peripheral,
- std::shared_ptr<CPeripheralAddon> addon,
KEYBOARD::IKeyboardInputHandler* handler)
- : m_manager(manager),
- m_peripheral(peripheral),
- m_addon(std::move(addon)),
- m_keyboardInputHandler(handler)
{
+ PeripheralAddonPtr addon = manager.GetAddonWithButtonMap(peripheral);
+
+ if (!addon)
+ {
+ CLog::Log(LOGDEBUG, "Failed to locate add-on for \"{}\"", peripheral->DeviceName());
+ }
+ else
+ {
+ m_buttonMap.reset(new CAddonButtonMap(peripheral, addon, handler->ControllerID()));
+ if (m_buttonMap->Load())
+ {
+ m_keyboardHandler.reset(new KEYBOARD::CKeyboardInputHandling(handler, m_buttonMap.get()));
+ }
+ else
+ {
+ m_buttonMap.reset();
+ }
+ }
}
CAddonInputHandling::CAddonInputHandling(CPeripherals& manager,
CPeripheral* peripheral,
- std::shared_ptr<CPeripheralAddon> addon,
MOUSE::IMouseInputHandler* handler)
- : m_manager(manager),
- m_peripheral(peripheral),
- m_addon(std::move(addon)),
- m_mouseInputHandler(handler)
{
-}
+ PeripheralAddonPtr addon = manager.GetAddonWithButtonMap(peripheral);
-CAddonInputHandling::~CAddonInputHandling(void)
-{
- m_joystickDriverHandler.reset();
- m_joystickInputReceiver.reset();
- m_keyboardDriverHandler.reset();
- m_mouseDriverHandler.reset();
- m_buttonMap.reset();
-}
-
-bool CAddonInputHandling::Load()
-{
- std::string controllerId;
- if (m_joystickInputHandler != nullptr)
- controllerId = m_joystickInputHandler->ControllerID();
- else if (m_keyboardInputHandler != nullptr)
- controllerId = m_keyboardInputHandler->ControllerID();
- else if (m_mouseInputHandler != nullptr)
- controllerId = m_mouseInputHandler->ControllerID();
-
- if (!controllerId.empty())
- m_buttonMap = std::make_unique<CAddonButtonMap>(m_peripheral, m_addon, controllerId, m_manager);
-
- if (m_buttonMap && m_buttonMap->Load())
+ if (!addon)
{
- if (m_joystickInputHandler != nullptr)
- {
- m_joystickDriverHandler =
- std::make_unique<CInputHandling>(m_joystickInputHandler, m_buttonMap.get());
- if (m_joystickDriverReceiver != nullptr)
- {
- m_joystickInputReceiver =
- std::make_unique<CDriverReceiving>(m_joystickDriverReceiver, m_buttonMap.get());
-
- // Interfaces are connected here because they share button map as a common resource
- m_joystickInputHandler->SetInputReceiver(m_joystickInputReceiver.get());
- }
- return true;
- }
- else if (m_keyboardInputHandler != nullptr)
+ CLog::Log(LOGDEBUG, "Failed to locate add-on for \"{}\"", peripheral->DeviceName());
+ }
+ else
+ {
+ m_buttonMap.reset(new CAddonButtonMap(peripheral, addon, handler->ControllerID()));
+ if (m_buttonMap->Load())
{
- m_keyboardDriverHandler = std::make_unique<KEYBOARD::CKeyboardInputHandling>(
- m_keyboardInputHandler, m_buttonMap.get());
- return true;
+ m_mouseHandler.reset(new MOUSE::CMouseInputHandling(handler, m_buttonMap.get()));
}
- else if (m_mouseInputHandler != nullptr)
+ else
{
- m_mouseDriverHandler =
- std::make_unique<MOUSE::CMouseInputHandling>(m_mouseInputHandler, m_buttonMap.get());
- return true;
+ m_buttonMap.reset();
}
}
+}
- return false;
+CAddonInputHandling::~CAddonInputHandling(void)
+{
+ m_driverHandler.reset();
+ m_inputReceiver.reset();
+ m_keyboardHandler.reset();
+ m_buttonMap.reset();
}
bool CAddonInputHandling::OnButtonMotion(unsigned int buttonIndex, bool bPressed)
{
- if (m_joystickDriverHandler)
- return m_joystickDriverHandler->OnButtonMotion(buttonIndex, bPressed);
+ if (m_driverHandler)
+ return m_driverHandler->OnButtonMotion(buttonIndex, bPressed);
return false;
}
bool CAddonInputHandling::OnHatMotion(unsigned int hatIndex, HAT_STATE state)
{
- if (m_joystickDriverHandler)
- return m_joystickDriverHandler->OnHatMotion(hatIndex, state);
+ if (m_driverHandler)
+ return m_driverHandler->OnHatMotion(hatIndex, state);
return false;
}
@@ -135,58 +134,58 @@ bool CAddonInputHandling::OnAxisMotion(unsigned int axisIndex,
int center,
unsigned int range)
{
- if (m_joystickDriverHandler)
- return m_joystickDriverHandler->OnAxisMotion(axisIndex, position, center, range);
+ if (m_driverHandler)
+ return m_driverHandler->OnAxisMotion(axisIndex, position, center, range);
return false;
}
void CAddonInputHandling::OnInputFrame(void)
{
- if (m_joystickDriverHandler)
- m_joystickDriverHandler->OnInputFrame();
+ if (m_driverHandler)
+ m_driverHandler->OnInputFrame();
}
bool CAddonInputHandling::OnKeyPress(const CKey& key)
{
- if (m_keyboardDriverHandler)
- return m_keyboardDriverHandler->OnKeyPress(key);
+ if (m_keyboardHandler)
+ return m_keyboardHandler->OnKeyPress(key);
return false;
}
void CAddonInputHandling::OnKeyRelease(const CKey& key)
{
- if (m_keyboardDriverHandler)
- m_keyboardDriverHandler->OnKeyRelease(key);
+ if (m_keyboardHandler)
+ m_keyboardHandler->OnKeyRelease(key);
}
bool CAddonInputHandling::OnPosition(int x, int y)
{
- if (m_mouseDriverHandler)
- return m_mouseDriverHandler->OnPosition(x, y);
+ if (m_mouseHandler)
+ return m_mouseHandler->OnPosition(x, y);
return false;
}
bool CAddonInputHandling::OnButtonPress(MOUSE::BUTTON_ID button)
{
- if (m_mouseDriverHandler)
- return m_mouseDriverHandler->OnButtonPress(button);
+ if (m_mouseHandler)
+ return m_mouseHandler->OnButtonPress(button);
return false;
}
void CAddonInputHandling::OnButtonRelease(MOUSE::BUTTON_ID button)
{
- if (m_mouseDriverHandler)
- m_mouseDriverHandler->OnButtonRelease(button);
+ if (m_mouseHandler)
+ m_mouseHandler->OnButtonRelease(button);
}
bool CAddonInputHandling::SetRumbleState(const JOYSTICK::FeatureName& feature, float magnitude)
{
- if (m_joystickInputReceiver)
- return m_joystickInputReceiver->SetRumbleState(feature, magnitude);
+ if (m_inputReceiver)
+ return m_inputReceiver->SetRumbleState(feature, magnitude);
return false;
}