summaryrefslogtreecommitdiffstats
path: root/xbmc/input/Key.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--xbmc/input/Key.cpp178
1 files changed, 178 insertions, 0 deletions
diff --git a/xbmc/input/Key.cpp b/xbmc/input/Key.cpp
new file mode 100644
index 0000000..24f6a0c
--- /dev/null
+++ b/xbmc/input/Key.cpp
@@ -0,0 +1,178 @@
+/*
+ * 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 "input/Key.h"
+
+CKey::CKey(void)
+{
+ Reset();
+}
+
+CKey::~CKey(void) = default;
+
+CKey::CKey(uint32_t buttonCode,
+ uint8_t leftTrigger,
+ uint8_t rightTrigger,
+ float leftThumbX,
+ float leftThumbY,
+ float rightThumbX,
+ float rightThumbY,
+ float repeat)
+{
+ Reset();
+ m_buttonCode = buttonCode;
+ m_leftTrigger = leftTrigger;
+ m_rightTrigger = rightTrigger;
+ m_leftThumbX = leftThumbX;
+ m_leftThumbY = leftThumbY;
+ m_rightThumbX = rightThumbX;
+ m_rightThumbY = rightThumbY;
+ m_repeat = repeat;
+}
+
+CKey::CKey(uint32_t buttonCode, unsigned int held)
+{
+ Reset();
+ m_buttonCode = buttonCode;
+ m_held = held;
+}
+
+CKey::CKey(uint32_t keycode,
+ uint8_t vkey,
+ wchar_t unicode,
+ char ascii,
+ uint32_t modifiers,
+ uint32_t lockingModifiers,
+ unsigned int held)
+{
+ Reset();
+ if (vkey) // FIXME: This needs cleaning up - should we always use the unicode key where available?
+ m_buttonCode = vkey | KEY_VKEY;
+ else
+ m_buttonCode = KEY_UNICODE;
+ m_buttonCode |= modifiers;
+ m_keycode = keycode;
+ m_vkey = vkey;
+ m_unicode = unicode;
+ m_ascii = ascii;
+ m_modifiers = modifiers;
+ m_lockingModifiers = lockingModifiers;
+ m_held = held;
+}
+
+CKey::CKey(const CKey& key)
+{
+ *this = key;
+}
+
+void CKey::Reset()
+{
+ m_leftTrigger = 0;
+ m_rightTrigger = 0;
+ m_leftThumbX = 0.0f;
+ m_leftThumbY = 0.0f;
+ m_rightThumbX = 0.0f;
+ m_rightThumbY = 0.0f;
+ m_repeat = 0.0f;
+ m_fromService = false;
+ m_buttonCode = KEY_INVALID;
+ m_keycode = 0;
+ m_vkey = 0;
+ m_unicode = 0;
+ m_ascii = 0;
+ m_modifiers = 0;
+ m_lockingModifiers = 0;
+ m_held = 0;
+}
+
+CKey& CKey::operator=(const CKey& key)
+{
+ if (&key == this)
+ return *this;
+ m_leftTrigger = key.m_leftTrigger;
+ m_rightTrigger = key.m_rightTrigger;
+ m_leftThumbX = key.m_leftThumbX;
+ m_leftThumbY = key.m_leftThumbY;
+ m_rightThumbX = key.m_rightThumbX;
+ m_rightThumbY = key.m_rightThumbY;
+ m_repeat = key.m_repeat;
+ m_fromService = key.m_fromService;
+ m_buttonCode = key.m_buttonCode;
+ m_keycode = key.m_keycode;
+ m_vkey = key.m_vkey;
+ m_unicode = key.m_unicode;
+ m_ascii = key.m_ascii;
+ m_modifiers = key.m_modifiers;
+ m_lockingModifiers = key.m_lockingModifiers;
+ m_held = key.m_held;
+ return *this;
+}
+
+uint8_t CKey::GetLeftTrigger() const
+{
+ return m_leftTrigger;
+}
+
+uint8_t CKey::GetRightTrigger() const
+{
+ return m_rightTrigger;
+}
+
+float CKey::GetLeftThumbX() const
+{
+ return m_leftThumbX;
+}
+
+float CKey::GetLeftThumbY() const
+{
+ return m_leftThumbY;
+}
+
+float CKey::GetRightThumbX() const
+{
+ return m_rightThumbX;
+}
+
+float CKey::GetRightThumbY() const
+{
+ return m_rightThumbY;
+}
+
+bool CKey::FromKeyboard() const
+{
+ return (m_buttonCode >= KEY_VKEY && m_buttonCode != KEY_INVALID);
+}
+
+bool CKey::IsAnalogButton() const
+{
+ if ((GetButtonCode() > 261 && GetButtonCode() < 270) ||
+ (GetButtonCode() > 279 && GetButtonCode() < 284))
+ return true;
+
+ return false;
+}
+
+bool CKey::IsIRRemote() const
+{
+ if (GetButtonCode() < 256)
+ return true;
+ return false;
+}
+
+float CKey::GetRepeat() const
+{
+ return m_repeat;
+}
+
+void CKey::SetFromService(bool fromService)
+{
+ if (fromService && (m_buttonCode & KEY_VKEY))
+ m_unicode = m_buttonCode - KEY_VKEY;
+
+ m_fromService = fromService;
+}