diff options
author | Juan Linietsky <reduzio@gmail.com> | 2014-02-09 22:10:30 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2014-02-09 22:10:30 -0300 |
commit | 0b806ee0fc9097fa7bda7ac0109191c9c5e0a1ac (patch) | |
tree | 276c4d099e178eb67fbd14f61d77b05e3808e9e3 /core/os/keyboard.cpp | |
parent | 0e49da1687bc8192ed210947da52c9e5c5f301bb (diff) | |
download | redot-engine-0b806ee0fc9097fa7bda7ac0109191c9c5e0a1ac.tar.gz |
GODOT IS OPEN SOURCE
Diffstat (limited to 'core/os/keyboard.cpp')
-rw-r--r-- | core/os/keyboard.cpp | 355 |
1 files changed, 355 insertions, 0 deletions
diff --git a/core/os/keyboard.cpp b/core/os/keyboard.cpp new file mode 100644 index 0000000000..a4201c34ea --- /dev/null +++ b/core/os/keyboard.cpp @@ -0,0 +1,355 @@ +/*************************************************************************/ +/* keyboard.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +#include "keyboard.h" + + +struct _KeyCodeText { + int code; + const char *text; +}; + +static const _KeyCodeText _keycodes[]={ + + {KEY_ESCAPE ,"Escape"}, + {KEY_TAB ,"Tab"}, + {KEY_BACKTAB ,"BackTab"}, + {KEY_BACKSPACE ,"BackSpace"}, + {KEY_RETURN ,"Return"}, + {KEY_ENTER ,"Enter"}, + {KEY_INSERT ,"Insert"}, + {KEY_DELETE ,"Delete"}, + {KEY_PAUSE ,"Pause"}, + {KEY_PRINT ,"Print"}, + {KEY_SYSREQ ,"SysReq"}, + {KEY_CLEAR ,"Clear"}, + {KEY_HOME ,"Home"}, + {KEY_END ,"End"}, + {KEY_LEFT ,"Left"}, + {KEY_UP ,"Up"}, + {KEY_RIGHT ,"Right"}, + {KEY_DOWN ,"Down"}, + {KEY_PAGEUP ,"PageUp"}, + {KEY_PAGEDOWN ,"PageDown"}, + {KEY_SHIFT ,"Shift"}, + {KEY_CONTROL ,"Control"}, + {KEY_META ,"Meta"}, + {KEY_ALT ,"Alt"}, + {KEY_CAPSLOCK ,"CapsLock"}, + {KEY_NUMLOCK ,"NumLock"}, + {KEY_SCROLLLOCK ,"ScrollLock"}, + {KEY_F1 ,"F1"}, + {KEY_F2 ,"F2"}, + {KEY_F3 ,"F3"}, + {KEY_F4 ,"F4"}, + {KEY_F5 ,"F5"}, + {KEY_F6 ,"F6"}, + {KEY_F7 ,"F7"}, + {KEY_F8 ,"F8"}, + {KEY_F9 ,"F9"}, + {KEY_F10 ,"F10"}, + {KEY_F11 ,"F11"}, + {KEY_F12 ,"F12"}, + {KEY_F13 ,"F13"}, + {KEY_F14 ,"F14"}, + {KEY_F15 ,"F15"}, + {KEY_F16 ,"F16"}, + {KEY_KP_ENTER ,"Kp Enter"}, + {KEY_KP_MULTIPLY ,"Kp Multiply"}, + {KEY_KP_DIVIDE ,"Kp Divide"}, + {KEY_KP_SUBSTRACT ,"Kp Substract"}, + {KEY_KP_PERIOD ,"Kp Period"}, + {KEY_KP_ADD ,"Kp Add"}, + {KEY_KP_0 ,"Kp 0"}, + {KEY_KP_1 ,"Kp 1"}, + {KEY_KP_2 ,"Kp 2"}, + {KEY_KP_3 ,"Kp 3"}, + {KEY_KP_4 ,"Kp 4"}, + {KEY_KP_5 ,"Kp 5"}, + {KEY_KP_6 ,"Kp 6"}, + {KEY_KP_7 ,"Kp 7"}, + {KEY_KP_8 ,"Kp 8"}, + {KEY_KP_9 ,"Kp 9"}, + {KEY_SUPER_L ,"Super L"}, + {KEY_SUPER_R ,"Super R"}, + {KEY_MENU ,"Menu"}, + {KEY_HYPER_L ,"Hyper L"}, + {KEY_HYPER_R ,"Hyper R"}, + {KEY_HELP ,"Help"}, + {KEY_DIRECTION_L ,"Direction L"}, + {KEY_DIRECTION_R ,"Direction R"}, + {KEY_BACK ,"Back"}, + {KEY_FORWARD ,"Forward"}, + {KEY_STOP ,"Stop"}, + {KEY_REFRESH ,"Refresh"}, + {KEY_VOLUMEDOWN ,"VolumeDown"}, + {KEY_VOLUMEMUTE ,"VolumeMute"}, + {KEY_VOLUMEUP ,"VolumeUp"}, + {KEY_BASSBOOST ,"BassBoost"}, + {KEY_BASSUP ,"BassUp"}, + {KEY_BASSDOWN ,"BassDown"}, + {KEY_TREBLEUP ,"TrebleUp"}, + {KEY_TREBLEDOWN ,"TrebleDown"}, + {KEY_MEDIAPLAY ,"MediaPlay"}, + {KEY_MEDIASTOP ,"MediaStop"}, + {KEY_MEDIAPREVIOUS ,"MediaPrevious"}, + {KEY_MEDIANEXT ,"MediaNext"}, + {KEY_MEDIARECORD ,"MediaRecord"}, + {KEY_HOMEPAGE ,"HomePage"}, + {KEY_FAVORITES ,"Favorites"}, + {KEY_SEARCH ,"Search"}, + {KEY_STANDBY ,"StandBy"}, + {KEY_LAUNCHMAIL ,"LaunchMail"}, + {KEY_LAUNCHMEDIA ,"LaunchMedia"}, + {KEY_LAUNCH0 ,"Launch0"}, + {KEY_LAUNCH1 ,"Launch1"}, + {KEY_LAUNCH2 ,"Launch2"}, + {KEY_LAUNCH3 ,"Launch3"}, + {KEY_LAUNCH4 ,"Launch4"}, + {KEY_LAUNCH5 ,"Launch5"}, + {KEY_LAUNCH6 ,"Launch6"}, + {KEY_LAUNCH7 ,"Launch7"}, + {KEY_LAUNCH8 ,"Launch8"}, + {KEY_LAUNCH9 ,"Launch9"}, + {KEY_LAUNCHA ,"LaunchA"}, + {KEY_LAUNCHB ,"LaunchB"}, + {KEY_LAUNCHC ,"LaunchC"}, + {KEY_LAUNCHD ,"LaunchD"}, + {KEY_LAUNCHE ,"LaunchE"}, + {KEY_LAUNCHF ,"LaunchF"}, + + {KEY_UNKNOWN ,"Unknown"}, + + {KEY_SPACE ,"Space"}, + {KEY_EXCLAM ,"Exclam"}, + {KEY_QUOTEDBL ,"QuoteDbl"}, + {KEY_NUMBERSIGN ,"NumberSign"}, + {KEY_DOLLAR ,"Dollar"}, + {KEY_PERCENT ,"Percent"}, + {KEY_AMPERSAND ,"Ampersand"}, + {KEY_APOSTROPHE ,"Apostrophe"}, + {KEY_PARENLEFT ,"ParenLeft"}, + {KEY_PARENRIGHT ,"ParenRight"}, + {KEY_ASTERISK ,"Asterisk"}, + {KEY_PLUS ,"Plus"}, + {KEY_COMMA ,"Comma"}, + {KEY_MINUS ,"Minus"}, + {KEY_PERIOD ,"Period"}, + {KEY_SLASH ,"Slash"}, + {KEY_0 ,"0"}, + {KEY_1 ,"1"}, + {KEY_2 ,"2"}, + {KEY_3 ,"3"}, + {KEY_4 ,"4"}, + {KEY_5 ,"5"}, + {KEY_6 ,"6"}, + {KEY_7 ,"7"}, + {KEY_8 ,"8"}, + {KEY_9 ,"9"}, + {KEY_COLON ,"Colon"}, + {KEY_SEMICOLON ,"Semicolon"}, + {KEY_LESS ,"Less"}, + {KEY_EQUAL ,"Equal"}, + {KEY_GREATER ,"Greater"}, + {KEY_QUESTION ,"Question"}, + {KEY_AT ,"At"}, + {KEY_A ,"A"}, + {KEY_B ,"B"}, + {KEY_C ,"C"}, + {KEY_D ,"D"}, + {KEY_E ,"E"}, + {KEY_F ,"F"}, + {KEY_G ,"G"}, + {KEY_H ,"H"}, + {KEY_I ,"I"}, + {KEY_J ,"J"}, + {KEY_K ,"K"}, + {KEY_L ,"L"}, + {KEY_M ,"M"}, + {KEY_N ,"N"}, + {KEY_O ,"O"}, + {KEY_P ,"P"}, + {KEY_Q ,"Q"}, + {KEY_R ,"R"}, + {KEY_S ,"S"}, + {KEY_T ,"T"}, + {KEY_U ,"U"}, + {KEY_V ,"V"}, + {KEY_W ,"W"}, + {KEY_X ,"X"}, + {KEY_Y ,"Y"}, + {KEY_Z ,"Z"}, + {KEY_BRACKETLEFT ,"BracketLeft"}, + {KEY_BACKSLASH ,"BackSlash"}, + {KEY_BRACKETRIGHT ,"BracketRight"}, + {KEY_ASCIICIRCUM ,"AsciiCircum"}, + {KEY_UNDERSCORE ,"UnderScore"}, + {KEY_QUOTELEFT ,"QuoteLeft"}, + {KEY_BRACELEFT ,"BraceLeft"}, + {KEY_BAR ,"Bar"}, + {KEY_BRACERIGHT ,"BraceRight"}, + {KEY_ASCIITILDE ,"AsciiTilde"}, + {KEY_NOBREAKSPACE ,"NoBreakSpace"}, + {KEY_EXCLAMDOWN ,"ExclamDown"}, + {KEY_CENT ,"Cent"}, + {KEY_STERLING ,"Sterling"}, + {KEY_CURRENCY ,"Currency"}, + {KEY_YEN ,"Yen"}, + {KEY_BROKENBAR ,"BrokenBar"}, + {KEY_SECTION ,"Section"}, + {KEY_DIAERESIS ,"Diaeresis"}, + {KEY_COPYRIGHT ,"Copyright"}, + {KEY_ORDFEMININE ,"Ordfeminine"}, + {KEY_GUILLEMOTLEFT ,"GuillemotLeft"}, + {KEY_NOTSIGN ,"NotSign"}, + {KEY_HYPHEN ,"Hyphen"}, + {KEY_REGISTERED ,"Registered"}, + {KEY_MACRON ,"Macron"}, + {KEY_DEGREE ,"Degree"}, + {KEY_PLUSMINUS ,"PlusMinus"}, + {KEY_TWOSUPERIOR ,"TwoSuperior"}, + {KEY_THREESUPERIOR ,"ThreeSuperior"}, + {KEY_ACUTE ,"Acute"}, + {KEY_MU ,"Mu"}, + {KEY_PARAGRAPH ,"Paragraph"}, + {KEY_PERIODCENTERED ,"PeriodCentered"}, + {KEY_CEDILLA ,"Cedilla"}, + {KEY_ONESUPERIOR ,"OneSuperior"}, + {KEY_MASCULINE ,"Masculine"}, + {KEY_GUILLEMOTRIGHT ,"GuillemotRight"}, + {KEY_ONEQUARTER ,"OneQuarter"}, + {KEY_ONEHALF ,"OneHalf"}, + {KEY_THREEQUARTERS ,"ThreeQuarters"}, + {KEY_QUESTIONDOWN ,"QuestionDown"}, + {KEY_AGRAVE ,"Agrave"}, + {KEY_AACUTE ,"Aacute"}, + {KEY_ACIRCUMFLEX ,"AcircumFlex"}, + {KEY_ATILDE ,"Atilde"}, + {KEY_ADIAERESIS ,"Adiaeresis"}, + {KEY_ARING ,"Aring"}, + {KEY_AE ,"Ae"}, + {KEY_CCEDILLA ,"Ccedilla"}, + {KEY_EGRAVE ,"Egrave"}, + {KEY_EACUTE ,"Eacute"}, + {KEY_ECIRCUMFLEX ,"Ecircumflex"}, + {KEY_EDIAERESIS ,"Ediaeresis"}, + {KEY_IGRAVE ,"Igrave"}, + {KEY_IACUTE ,"Iacute"}, + {KEY_ICIRCUMFLEX ,"Icircumflex"}, + {KEY_IDIAERESIS ,"Idiaeresis"}, + {KEY_ETH ,"Eth"}, + {KEY_NTILDE ,"Ntilde"}, + {KEY_OGRAVE ,"Ograve"}, + {KEY_OACUTE ,"Oacute"}, + {KEY_OCIRCUMFLEX ,"Ocircumflex"}, + {KEY_OTILDE ,"Otilde"}, + {KEY_ODIAERESIS ,"Odiaeresis"}, + {KEY_MULTIPLY ,"Multiply"}, + {KEY_OOBLIQUE ,"Ooblique"}, + {KEY_UGRAVE ,"Ugrave"}, + {KEY_UACUTE ,"Uacute"}, + {KEY_UCIRCUMFLEX ,"Ucircumflex"}, + {KEY_UDIAERESIS ,"Udiaeresis"}, + {KEY_YACUTE ,"Yacute"}, + {KEY_THORN ,"Thorn"}, + {KEY_SSHARP ,"Ssharp"}, + + {KEY_DIVISION ,"Division"}, + {KEY_YDIAERESIS ,"Ydiaeresis"}, + {0 ,0} +}; + +bool keycode_has_unicode(uint32_t p_keycode) { + + + switch(p_keycode) { + + case KEY_ESCAPE: case KEY_TAB: case KEY_BACKTAB: case KEY_BACKSPACE: case KEY_RETURN: case KEY_ENTER: case KEY_INSERT: case KEY_DELETE: case KEY_PAUSE: + case KEY_PRINT: case KEY_SYSREQ: case KEY_CLEAR: case KEY_HOME: case KEY_END: case KEY_LEFT: case KEY_UP: case KEY_RIGHT: case KEY_DOWN: case KEY_PAGEUP: + case KEY_PAGEDOWN: case KEY_SHIFT: case KEY_CONTROL: case KEY_META: case KEY_ALT: case KEY_CAPSLOCK: case KEY_NUMLOCK: case KEY_SCROLLLOCK: case KEY_F1: + case KEY_F2: case KEY_F3: case KEY_F4: case KEY_F5: case KEY_F6: case KEY_F7: case KEY_F8: case KEY_F9: case KEY_F10: case KEY_F11: case KEY_F12: case KEY_F13: case KEY_F14: + case KEY_F15: case KEY_F16: case KEY_KP_ENTER: case KEY_SUPER_L: case KEY_SUPER_R: case KEY_MENU: case KEY_HYPER_L: case KEY_HYPER_R: case KEY_HELP: + case KEY_DIRECTION_L: case KEY_DIRECTION_R: case KEY_BACK: case KEY_FORWARD: case KEY_STOP: case KEY_REFRESH: case KEY_VOLUMEDOWN: case KEY_VOLUMEMUTE: + case KEY_VOLUMEUP: case KEY_BASSBOOST: case KEY_BASSUP: case KEY_BASSDOWN: case KEY_TREBLEUP: case KEY_TREBLEDOWN: case KEY_MEDIAPLAY: case KEY_MEDIASTOP: + case KEY_MEDIAPREVIOUS: case KEY_MEDIANEXT: case KEY_MEDIARECORD: case KEY_HOMEPAGE: case KEY_FAVORITES: case KEY_SEARCH: case KEY_STANDBY: + case KEY_OPENURL: case KEY_LAUNCHMAIL: case KEY_LAUNCHMEDIA: case KEY_LAUNCH0: case KEY_LAUNCH1: case KEY_LAUNCH2: case KEY_LAUNCH3: case KEY_LAUNCH4: + case KEY_LAUNCH5: case KEY_LAUNCH6: case KEY_LAUNCH7: case KEY_LAUNCH8: case KEY_LAUNCH9: case KEY_LAUNCHA: case KEY_LAUNCHB: case KEY_LAUNCHC: case KEY_LAUNCHD: + case KEY_LAUNCHE: case KEY_LAUNCHF: return false; + } + + return true; +} + +String keycode_get_string(uint32_t p_code) { + + String codestr; + if (p_code&KEY_MASK_SHIFT) + codestr+="Shift+"; + if (p_code&KEY_MASK_ALT) + codestr+="Alt+"; + if (p_code&KEY_MASK_CTRL) + codestr+="Ctrl+"; + if (p_code&KEY_MASK_META) + codestr+="Meta+"; + + p_code&=KEY_CODE_MASK; + + const _KeyCodeText *kct =&_keycodes[0]; + + while(kct->text) { + + if (kct->code==(int)p_code) { + + codestr+=kct->text; + return codestr; + } + kct++; + } + + codestr+=String::chr(p_code); + + return codestr; + +} + +int find_keycode(const String& p_code) { + + const _KeyCodeText *kct =&_keycodes[0]; + + while(kct->text) { + + if (p_code.nocasecmp_to(kct->text)==0) { + return kct->code; + + } + kct++; + } + + return 0; + +} |