summaryrefslogtreecommitdiffstats
path: root/xbmc/input/actions/Action.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/input/actions/Action.cpp')
-rw-r--r--xbmc/input/actions/Action.cpp154
1 files changed, 154 insertions, 0 deletions
diff --git a/xbmc/input/actions/Action.cpp b/xbmc/input/actions/Action.cpp
new file mode 100644
index 0000000..8449e42
--- /dev/null
+++ b/xbmc/input/actions/Action.cpp
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2005-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 "Action.h"
+
+#include "ActionIDs.h"
+#include "ActionTranslator.h"
+#include "input/Key.h"
+
+CAction::CAction() : m_id(ACTION_NONE)
+{
+}
+
+CAction::CAction(int actionID,
+ float amount1 /* = 1.0f */,
+ float amount2 /* = 0.0f */,
+ const std::string& name /* = "" */,
+ unsigned int holdTime /*= 0*/)
+ : m_name(name)
+{
+ m_id = actionID;
+ m_amount[0] = amount1;
+ m_amount[1] = amount2;
+ m_repeat = 0;
+ m_buttonCode = 0;
+ m_unicode = 0;
+ m_holdTime = holdTime;
+}
+
+CAction::CAction(int actionID,
+ unsigned int state,
+ float posX,
+ float posY,
+ float offsetX,
+ float offsetY,
+ float velocityX,
+ float velocityY,
+ const std::string& name)
+ : m_name(name)
+{
+ m_id = actionID;
+ m_amount[0] = posX;
+ m_amount[1] = posY;
+ m_amount[2] = offsetX;
+ m_amount[3] = offsetY;
+ m_amount[4] = velocityX;
+ m_amount[5] = velocityY;
+ m_repeat = 0;
+ m_buttonCode = 0;
+ m_unicode = 0;
+ m_holdTime = state;
+}
+
+CAction::CAction(int actionID, wchar_t unicode)
+{
+ m_id = actionID;
+ m_repeat = 0;
+ m_buttonCode = 0;
+ m_unicode = unicode;
+ m_holdTime = 0;
+}
+
+CAction::CAction(int actionID, const std::string& name, const CKey& key) : m_name(name)
+{
+ m_id = actionID;
+ m_amount[0] = 1; // digital button (could change this for repeat acceleration)
+ m_repeat = key.GetRepeat();
+ m_buttonCode = key.GetButtonCode();
+ m_unicode = key.GetUnicode();
+ m_holdTime = key.GetHeld();
+ // get the action amounts of the analog buttons
+ if (key.GetButtonCode() == KEY_BUTTON_LEFT_ANALOG_TRIGGER)
+ m_amount[0] = (float)key.GetLeftTrigger() / 255.0f;
+ else if (key.GetButtonCode() == KEY_BUTTON_RIGHT_ANALOG_TRIGGER)
+ m_amount[0] = (float)key.GetRightTrigger() / 255.0f;
+ else if (key.GetButtonCode() == KEY_BUTTON_LEFT_THUMB_STICK)
+ {
+ m_amount[0] = key.GetLeftThumbX();
+ m_amount[1] = key.GetLeftThumbY();
+ }
+ else if (key.GetButtonCode() == KEY_BUTTON_RIGHT_THUMB_STICK)
+ {
+ m_amount[0] = key.GetRightThumbX();
+ m_amount[1] = key.GetRightThumbY();
+ }
+ else if (key.GetButtonCode() == KEY_BUTTON_LEFT_THUMB_STICK_UP)
+ m_amount[0] = key.GetLeftThumbY();
+ else if (key.GetButtonCode() == KEY_BUTTON_LEFT_THUMB_STICK_DOWN)
+ m_amount[0] = -key.GetLeftThumbY();
+ else if (key.GetButtonCode() == KEY_BUTTON_LEFT_THUMB_STICK_LEFT)
+ m_amount[0] = -key.GetLeftThumbX();
+ else if (key.GetButtonCode() == KEY_BUTTON_LEFT_THUMB_STICK_RIGHT)
+ m_amount[0] = key.GetLeftThumbX();
+ else if (key.GetButtonCode() == KEY_BUTTON_RIGHT_THUMB_STICK_UP)
+ m_amount[0] = key.GetRightThumbY();
+ else if (key.GetButtonCode() == KEY_BUTTON_RIGHT_THUMB_STICK_DOWN)
+ m_amount[0] = -key.GetRightThumbY();
+ else if (key.GetButtonCode() == KEY_BUTTON_RIGHT_THUMB_STICK_LEFT)
+ m_amount[0] = -key.GetRightThumbX();
+ else if (key.GetButtonCode() == KEY_BUTTON_RIGHT_THUMB_STICK_RIGHT)
+ m_amount[0] = key.GetRightThumbX();
+}
+
+CAction::CAction(int actionID, const std::string& name) : m_name(name)
+{
+ m_id = actionID;
+ m_repeat = 0;
+ m_buttonCode = 0;
+ m_unicode = 0;
+ m_holdTime = 0;
+}
+
+CAction& CAction::operator=(const CAction& rhs)
+{
+ if (this != &rhs)
+ {
+ m_id = rhs.m_id;
+ for (unsigned int i = 0; i < max_amounts; i++)
+ m_amount[i] = rhs.m_amount[i];
+ m_name = rhs.m_name;
+ m_repeat = rhs.m_repeat;
+ m_buttonCode = rhs.m_buttonCode;
+ m_unicode = rhs.m_unicode;
+ m_holdTime = rhs.m_holdTime;
+ m_text = rhs.m_text;
+ }
+ return *this;
+}
+
+void CAction::ClearAmount()
+{
+ for (float& amount : m_amount)
+ amount = 0;
+}
+
+bool CAction::IsMouse() const
+{
+ return (m_id >= ACTION_MOUSE_START && m_id <= ACTION_MOUSE_END);
+}
+
+bool CAction::IsGesture() const
+{
+ return (m_id >= ACTION_GESTURE_NOTIFY && m_id <= ACTION_GESTURE_END);
+}
+
+bool CAction::IsAnalog() const
+{
+ return CActionTranslator::IsAnalog(m_id);
+}