1 /* 2 * Copyright (C) 2005-2018 Team Kodi 3 * This file is part of Kodi - https://kodi.tv 4 * 5 * SPDX-License-Identifier: GPL-2.0-or-later 6 * See LICENSES/README.md for more information. 7 */ 8 9 #pragma once 10 11 /*! 12 \file Key.h 13 \brief 14 */ 15 16 //! @todo Remove dependence on CAction 17 #include "input/actions/Action.h" 18 #include "input/actions/ActionIDs.h" 19 20 #include <stdint.h> 21 #include <string> 22 23 // Reserved 0 - 255 24 // IRRemote.h 25 // XINPUT_IR_REMOTE-* 26 27 /* 28 * EventServer "gamepad" keys based on original Xbox controller 29 */ 30 // Analogue - don't change order 31 #define KEY_BUTTON_A 256 32 #define KEY_BUTTON_B 257 33 #define KEY_BUTTON_X 258 34 #define KEY_BUTTON_Y 259 35 #define KEY_BUTTON_BLACK 260 36 #define KEY_BUTTON_WHITE 261 37 #define KEY_BUTTON_LEFT_TRIGGER 262 38 #define KEY_BUTTON_RIGHT_TRIGGER 263 39 40 #define KEY_BUTTON_LEFT_THUMB_STICK 264 41 #define KEY_BUTTON_RIGHT_THUMB_STICK 265 42 43 #define KEY_BUTTON_RIGHT_THUMB_STICK_UP 266 // right thumb stick directions 44 #define KEY_BUTTON_RIGHT_THUMB_STICK_DOWN 267 // for defining different actions per direction 45 #define KEY_BUTTON_RIGHT_THUMB_STICK_LEFT 268 46 #define KEY_BUTTON_RIGHT_THUMB_STICK_RIGHT 269 47 48 // Digital - don't change order 49 #define KEY_BUTTON_DPAD_UP 270 50 #define KEY_BUTTON_DPAD_DOWN 271 51 #define KEY_BUTTON_DPAD_LEFT 272 52 #define KEY_BUTTON_DPAD_RIGHT 273 53 54 #define KEY_BUTTON_START 274 55 #define KEY_BUTTON_BACK 275 56 57 #define KEY_BUTTON_LEFT_THUMB_BUTTON 276 58 #define KEY_BUTTON_RIGHT_THUMB_BUTTON 277 59 60 #define KEY_BUTTON_LEFT_ANALOG_TRIGGER 278 61 #define KEY_BUTTON_RIGHT_ANALOG_TRIGGER 279 62 63 #define KEY_BUTTON_LEFT_THUMB_STICK_UP 280 // left thumb stick directions 64 #define KEY_BUTTON_LEFT_THUMB_STICK_DOWN 281 // for defining different actions per direction 65 #define KEY_BUTTON_LEFT_THUMB_STICK_LEFT 282 66 #define KEY_BUTTON_LEFT_THUMB_STICK_RIGHT 283 67 68 // 0xF000 -> 0xF200 is reserved for the keyboard; a keyboard press is either 69 #define KEY_VKEY 0xF000 // a virtual key/functional key e.g. cursor left 70 #define KEY_UNICODE \ 71 0xF200 // another printable character whose range is not included in this KEY code 72 73 // 0xE000 -> 0xEFFF is reserved for mouse actions 74 #define KEY_VMOUSE 0xEFFF 75 76 #define KEY_MOUSE_START 0xE000 77 #define KEY_MOUSE_CLICK 0xE000 78 #define KEY_MOUSE_RIGHTCLICK 0xE001 79 #define KEY_MOUSE_MIDDLECLICK 0xE002 80 #define KEY_MOUSE_DOUBLE_CLICK 0xE010 81 #define KEY_MOUSE_LONG_CLICK 0xE020 82 #define KEY_MOUSE_WHEEL_UP 0xE101 83 #define KEY_MOUSE_WHEEL_DOWN 0xE102 84 #define KEY_MOUSE_MOVE 0xE103 85 #define KEY_MOUSE_DRAG 0xE104 86 #define KEY_MOUSE_DRAG_START 0xE105 87 #define KEY_MOUSE_DRAG_END 0xE106 88 #define KEY_MOUSE_RDRAG 0xE107 89 #define KEY_MOUSE_RDRAG_START 0xE108 90 #define KEY_MOUSE_RDRAG_END 0xE109 91 #define KEY_MOUSE_NOOP 0xEFFF 92 #define KEY_MOUSE_END 0xEFFF 93 94 // 0xD000 -> 0xD0FF is reserved for WM_APPCOMMAND messages 95 #define KEY_APPCOMMAND 0xD000 96 97 #define KEY_INVALID 0xFFFF 98 99 #define ICON_TYPE_NONE 101 100 #define ICON_TYPE_PROGRAMS 102 101 #define ICON_TYPE_MUSIC 103 102 #define ICON_TYPE_PICTURES 104 103 #define ICON_TYPE_VIDEOS 105 104 #define ICON_TYPE_FILES 106 105 #define ICON_TYPE_WEATHER 107 106 #define ICON_TYPE_SETTINGS 109 107 108 #ifndef SWIG 109 110 /*! 111 \ingroup actionkeys, mouse 112 \brief Simple class for mouse events 113 */ 114 class CMouseEvent 115 { 116 public: 117 CMouseEvent(int actionID, int state = 0, float offsetX = 0, float offsetY = 0) 118 { 119 m_id = actionID; 120 m_state = state; 121 m_offsetX = offsetX; 122 m_offsetY = offsetY; 123 }; 124 125 int m_id; 126 int m_state; 127 float m_offsetX; 128 float m_offsetY; 129 }; 130 131 /*! 132 \ingroup actionkeys 133 \brief 134 */ 135 class CKey 136 { 137 public: 138 CKey(void); 139 CKey(uint32_t buttonCode, 140 uint8_t leftTrigger = 0, 141 uint8_t rightTrigger = 0, 142 float leftThumbX = 0.0f, 143 float leftThumbY = 0.0f, 144 float rightThumbX = 0.0f, 145 float rightThumbY = 0.0f, 146 float repeat = 0.0f); 147 CKey(uint32_t buttonCode, unsigned int held); 148 CKey(uint32_t keycode, 149 uint8_t vkey, 150 wchar_t unicode, 151 char ascii, 152 uint32_t modifiers, 153 uint32_t lockingModifiers, 154 unsigned int held); 155 CKey(const CKey& key); 156 void Reset(); 157 158 virtual ~CKey(void); 159 CKey& operator=(const CKey& key); 160 uint8_t GetLeftTrigger() const; 161 uint8_t GetRightTrigger() const; 162 float GetLeftThumbX() const; 163 float GetLeftThumbY() const; 164 float GetRightThumbX() const; 165 float GetRightThumbY() const; 166 float GetRepeat() const; 167 bool FromKeyboard() const; 168 bool IsAnalogButton() const; 169 bool IsIRRemote() const; 170 void SetFromService(bool fromService); GetFromService()171 bool GetFromService() const { return m_fromService; } 172 GetButtonCode()173 inline uint32_t GetButtonCode() const { return m_buttonCode; } GetKeycode()174 inline uint32_t GetKeycode() const { return m_keycode; } // XBMCKey enum in XBMC_keysym.h GetVKey()175 inline uint8_t GetVKey() const { return m_vkey; } GetUnicode()176 inline wchar_t GetUnicode() const { return m_unicode; } GetAscii()177 inline char GetAscii() const { return m_ascii; } GetModifiers()178 inline uint32_t GetModifiers() const { return m_modifiers; }; GetLockingModifiers()179 inline uint32_t GetLockingModifiers() const { return m_lockingModifiers; }; GetHeld()180 inline unsigned int GetHeld() const { return m_held; } 181 182 enum Modifier 183 { 184 MODIFIER_CTRL = 0x00010000, 185 MODIFIER_SHIFT = 0x00020000, 186 MODIFIER_ALT = 0x00040000, 187 MODIFIER_RALT = 0x00080000, 188 MODIFIER_SUPER = 0x00100000, 189 MODIFIER_META = 0X00200000, 190 MODIFIER_LONG = 0X01000000, 191 MODIFIER_NUMLOCK = 0X02000000, 192 MODIFIER_CAPSLOCK = 0X04000000, 193 MODIFIER_SCROLLLOCK = 0X08000000, 194 }; 195 196 private: 197 uint32_t m_buttonCode; 198 uint32_t m_keycode; 199 uint8_t m_vkey; 200 wchar_t m_unicode; 201 char m_ascii; 202 uint32_t m_modifiers; 203 uint32_t m_lockingModifiers; 204 unsigned int m_held; 205 206 uint8_t m_leftTrigger; 207 uint8_t m_rightTrigger; 208 float m_leftThumbX; 209 float m_leftThumbY; 210 float m_rightThumbX; 211 float m_rightThumbY; 212 float m_repeat; // time since last keypress 213 bool m_fromService; 214 }; 215 #endif // undef SWIG 216