diff options
Diffstat (limited to 'xbmc/input/joysticks/JoystickMonitor.cpp')
-rw-r--r-- | xbmc/input/joysticks/JoystickMonitor.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/xbmc/input/joysticks/JoystickMonitor.cpp b/xbmc/input/joysticks/JoystickMonitor.cpp new file mode 100644 index 0000000..6375a41 --- /dev/null +++ b/xbmc/input/joysticks/JoystickMonitor.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2015-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "JoystickMonitor.h" + +#include "ServiceBroker.h" +#include "application/ApplicationComponents.h" +#include "application/ApplicationPowerHandling.h" +#include "games/controllers/ControllerIDs.h" +#include "input/InputManager.h" + +#include <cmath> + +using namespace KODI; +using namespace JOYSTICK; + +#define AXIS_DEADZONE 0.05f + +std::string CJoystickMonitor::ControllerID() const +{ + return DEFAULT_CONTROLLER_ID; +} + +bool CJoystickMonitor::AcceptsInput(const FeatureName& feature) const +{ + // Only accept input when screen saver is active + auto& components = CServiceBroker::GetAppComponents(); + const auto appPower = components.GetComponent<CApplicationPowerHandling>(); + return appPower->IsInScreenSaver(); +} + +bool CJoystickMonitor::OnButtonPress(const FeatureName& feature, bool bPressed) +{ + if (bPressed) + { + CServiceBroker::GetInputManager().SetMouseActive(false); + return ResetTimers(); + } + + return false; +} + +bool CJoystickMonitor::OnButtonMotion(const FeatureName& feature, + float magnitude, + unsigned int motionTimeMs) +{ + if (std::fabs(magnitude) > AXIS_DEADZONE) + { + CServiceBroker::GetInputManager().SetMouseActive(false); + return ResetTimers(); + } + + return false; +} + +bool CJoystickMonitor::OnAnalogStickMotion(const FeatureName& feature, + float x, + float y, + unsigned int motionTimeMs) +{ + // Analog stick deadzone already processed + if (x != 0.0f || y != 0.0f) + { + CServiceBroker::GetInputManager().SetMouseActive(false); + return ResetTimers(); + } + + return false; +} + +bool CJoystickMonitor::OnWheelMotion(const FeatureName& feature, + float position, + unsigned int motionTimeMs) +{ + if (std::fabs(position) > AXIS_DEADZONE) + { + CServiceBroker::GetInputManager().SetMouseActive(false); + return ResetTimers(); + } + + return false; +} + +bool CJoystickMonitor::OnThrottleMotion(const FeatureName& feature, + float position, + unsigned int motionTimeMs) +{ + if (std::fabs(position) > AXIS_DEADZONE) + { + CServiceBroker::GetInputManager().SetMouseActive(false); + return ResetTimers(); + } + + return false; +} + +bool CJoystickMonitor::ResetTimers(void) +{ + auto& components = CServiceBroker::GetAppComponents(); + const auto appPower = components.GetComponent<CApplicationPowerHandling>(); + appPower->ResetSystemIdleTimer(); + appPower->ResetScreenSaver(); + return appPower->WakeUpScreenSaverAndDPMS(); + + return true; +} |