Skip to content

Commit

Permalink
Joysticks: Re-add basic support for holding buttons
Browse files Browse the repository at this point in the history
  • Loading branch information
garbear committed Jun 21, 2017
1 parent f59e298 commit c9de678
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 9 deletions.
2 changes: 2 additions & 0 deletions system/keymaps/joystick.xml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@
</FullscreenVideo>
<FullscreenGame>
<joystick profile="game.controller.default">
<start holdtime="1000">OSD</start>
<back holdtime="1000">OSD</back>
<guide>OSD</guide>
</joystick>
</FullscreenGame>
Expand Down
31 changes: 22 additions & 9 deletions xbmc/input/joysticks/keymaps/KeyHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ bool CKeyHandler::OnDigitalMotion(bool bPressed, unsigned int holdTimeMs)

const unsigned int actionId = keymapAction.actionId;
const std::string &actionString = keymapAction.actionString;
const unsigned int requriedHoldTimeMs = keymapAction.holdTimeMs;

if (CActionTranslator::IsAnalog(actionId))
{
Expand All @@ -70,9 +71,15 @@ bool CKeyHandler::OnDigitalMotion(bool bPressed, unsigned int holdTimeMs)
{
if (bPressed)
{
CAction action(actionId, actionString);
action.SetHoldTime(holdTimeMs);
SendDigitalAction(action);
if (holdTimeMs >= requriedHoldTimeMs)
{
if (!m_bPressed)
holdTimeMs = requriedHoldTimeMs;

CAction action(actionId, actionString);
action.SetHoldTime(holdTimeMs - requriedHoldTimeMs);
SendDigitalAction(action);
}
}
else
{
Expand All @@ -95,6 +102,7 @@ bool CKeyHandler::OnAnalogMotion(float magnitude, unsigned int motionTimeMs)

const unsigned int actionId = keymapAction.actionId;
const std::string &actionString = keymapAction.actionString;
const unsigned int requriedHoldTimeMs = keymapAction.holdTimeMs;

if (CActionTranslator::IsAnalog(actionId))
{
Expand All @@ -106,8 +114,6 @@ bool CKeyHandler::OnAnalogMotion(float magnitude, unsigned int motionTimeMs)
}
else
{
unsigned int holdTimeMs = 0;

const bool bIsPressed = (magnitude >= DIGITAL_ANALOG_THRESHOLD);
if (bIsPressed)
{
Expand All @@ -116,18 +122,25 @@ bool CKeyHandler::OnAnalogMotion(float magnitude, unsigned int motionTimeMs)
m_holdStartTime = motionTimeMs;
m_bHeld = true;
}
else

unsigned int holdTimeMs = motionTimeMs - m_holdStartTime;

if (holdTimeMs >= requriedHoldTimeMs)
{
holdTimeMs = motionTimeMs - m_holdStartTime;
if (!m_bPressed)
holdTimeMs = requriedHoldTimeMs;

CAction action(actionId, actionString);
action.SetHoldTime(holdTimeMs - requriedHoldTimeMs);
SendDigitalAction(action);
}
}
else
{
m_holdStartTime = 0;
m_bPressed = false;
m_bHeld = false;
}

OnDigitalMotion(bIsPressed, holdTimeMs);
}

return true;
Expand Down

0 comments on commit c9de678

Please sign in to comment.