NTrace
GPU ray tracing framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Keys.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2009-2011, NVIDIA Corporation
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of NVIDIA Corporation nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #include "gui/Keys.hpp"
29 #include "base/String.hpp"
30 #include "base/DLLImports.hpp"
31 
32 using namespace FW;
33 
34 //------------------------------------------------------------------------
35 
37 {
38  FW_ASSERT(cp >= 0 && cp <= 0x10FFFF);
39  return sprintf("U+%04X", cp);
40 }
41 
42 //------------------------------------------------------------------------
43 
45 {
46  const char* ptr = key.getPtr();
47  S32 cp = 0;
48 
49  if (*ptr != 'U' || *++ptr != '+')
50  return 0;
51 
52  while (*++ptr)
53  {
54  cp <<= 4;
55 
56  if (*ptr >= '0' && *ptr <= '9')
57  cp += *ptr - '0';
58  else if (*ptr >= 'A' && *ptr <= 'F')
59  cp += *ptr - ('A' - 10);
60  else
61  return 0;
62 
63  if (cp > 0x10FFFF)
64  return 0;
65  }
66 
67  return cp;
68 }
69 
70 //------------------------------------------------------------------------
71 
73 {
74  // Translate special keys.
75 
76  switch (vkey)
77  {
78  case VK_CANCEL: return FW_KEY_CANCEL;
79  case VK_BACK: return FW_KEY_BACKSPACE;
80  case VK_TAB: return FW_KEY_TAB;
81  case VK_CLEAR: return FW_KEY_CLEAR;
82  case VK_RETURN: return FW_KEY_ENTER;
83  case VK_SHIFT: return FW_KEY_SHIFT;
84  case VK_CONTROL: return FW_KEY_CONTROL;
85  case VK_MENU: return FW_KEY_ALT;
86  case VK_PAUSE: return FW_KEY_PAUSE;
87  case VK_CAPITAL: return FW_KEY_CAPS_LOCK;
88  case VK_KANA: return FW_KEY_KANA_MODE;
89  case VK_JUNJA: return FW_KEY_JUNJA_MODE;
90  case VK_FINAL: return FW_KEY_FINAL_MODE;
91  case VK_HANJA: return FW_KEY_HANJA_MODE;
92  case VK_ESCAPE: return FW_KEY_ESCAPE;
93  case VK_CONVERT: return FW_KEY_CONVERT;
94  case VK_NONCONVERT: return FW_KEY_NONCONVERT;
95  case VK_ACCEPT: return FW_KEY_ACCEPT;
96  case VK_MODECHANGE: return FW_KEY_MODE_CHANGE;
97  case VK_SPACE: return FW_KEY_SPACE;
98  case VK_PRIOR: return FW_KEY_PAGE_UP;
99  case VK_NEXT: return FW_KEY_PAGE_DOWN;
100  case VK_END: return FW_KEY_END;
101  case VK_HOME: return FW_KEY_HOME;
102  case VK_LEFT: return FW_KEY_LEFT;
103  case VK_UP: return FW_KEY_UP;
104  case VK_RIGHT: return FW_KEY_RIGHT;
105  case VK_DOWN: return FW_KEY_DOWN;
106  case VK_SELECT: return FW_KEY_SELECT;
107  case VK_PRINT: return FW_KEY_PRINT_SCREEN;
108  case VK_EXECUTE: return FW_KEY_EXECUTE;
109  case VK_SNAPSHOT: return FW_KEY_PRINT_SCREEN;
110  case VK_INSERT: return FW_KEY_INSERT;
111  case VK_DELETE: return FW_KEY_DELETE;
112  case VK_HELP: return FW_KEY_HELP;
113  case VK_LWIN: return FW_KEY_WIN;
114  case VK_RWIN: return FW_KEY_WIN;
115  case VK_APPS: return FW_KEY_APPS;
116  case VK_SLEEP: break;
117  case VK_NUMPAD0: return FW_KEY_0;
118  case VK_NUMPAD1: return FW_KEY_1;
119  case VK_NUMPAD2: return FW_KEY_2;
120  case VK_NUMPAD3: return FW_KEY_3;
121  case VK_NUMPAD4: return FW_KEY_4;
122  case VK_NUMPAD5: return FW_KEY_5;
123  case VK_NUMPAD6: return FW_KEY_6;
124  case VK_NUMPAD7: return FW_KEY_7;
125  case VK_NUMPAD8: return FW_KEY_8;
126  case VK_NUMPAD9: return FW_KEY_9;
127  case VK_MULTIPLY: return FW_KEY_ASTERISK;
128  case VK_ADD: return FW_KEY_PLUS;
129  case VK_SEPARATOR: return FW_KEY_COMMA;
130  case VK_SUBTRACT: return FW_KEY_MINUS;
131  case VK_DECIMAL: return FW_KEY_PERIOD;
132  case VK_DIVIDE: return FW_KEY_SLASH;
133  case VK_F1: return FW_KEY_F1;
134  case VK_F2: return FW_KEY_F2;
135  case VK_F3: return FW_KEY_F3;
136  case VK_F4: return FW_KEY_F4;
137  case VK_F5: return FW_KEY_F5;
138  case VK_F6: return FW_KEY_F6;
139  case VK_F7: return FW_KEY_F7;
140  case VK_F8: return FW_KEY_F8;
141  case VK_F9: return FW_KEY_F9;
142  case VK_F10: return FW_KEY_F10;
143  case VK_F11: return FW_KEY_F11;
144  case VK_F12: return FW_KEY_F12;
145  case VK_F13: return FW_KEY_F13;
146  case VK_F14: return FW_KEY_F14;
147  case VK_F15: return FW_KEY_F15;
148  case VK_F16: return FW_KEY_F16;
149  case VK_F17: return FW_KEY_F17;
150  case VK_F18: return FW_KEY_F18;
151  case VK_F19: return FW_KEY_F19;
152  case VK_F20: return FW_KEY_F20;
153  case VK_F21: return FW_KEY_F21;
154  case VK_F22: return FW_KEY_F22;
155  case VK_F23: return FW_KEY_F23;
156  case VK_F24: return FW_KEY_F24;
157  case VK_NUMLOCK: return FW_KEY_NUM_LOCK;
158  case VK_SCROLL: return FW_KEY_SCROLL;
159  case VK_OEM_FJ_JISHO: break;
160  case VK_OEM_FJ_MASSHOU: break;
161  case VK_OEM_FJ_TOUROKU: break;
162  case VK_OEM_FJ_LOYA: break;
163  case VK_OEM_FJ_ROYA: break;
164  case VK_BROWSER_BACK: return FW_KEY_BROWSER_BACK;
165  case VK_BROWSER_FORWARD: return FW_KEY_BROWSER_FORWARD;
166  case VK_BROWSER_REFRESH: return FW_KEY_BROWSER_REFRESH;
167  case VK_BROWSER_STOP: return FW_KEY_BROWSER_STOP;
168  case VK_BROWSER_SEARCH: return FW_KEY_BROWSER_SEARCH;
169  case VK_BROWSER_FAVORITES: return FW_KEY_BROWSER_FAVORITES;
170  case VK_BROWSER_HOME: return FW_KEY_BROWSER_HOME;
171  case VK_VOLUME_MUTE: return FW_KEY_VOLUME_MUTE;
172  case VK_VOLUME_DOWN: return FW_KEY_VOLUME_DOWN;
173  case VK_VOLUME_UP: return FW_KEY_VOLUME_UP;
174  case VK_MEDIA_NEXT_TRACK: return FW_KEY_MEDIA_NEXT_TRACK;
175  case VK_MEDIA_PREV_TRACK: return FW_KEY_MEDIA_PREVIOUS_TRACK;
176  case VK_MEDIA_STOP: return FW_KEY_MEDIA_STOP;
177  case VK_MEDIA_PLAY_PAUSE: return FW_KEY_MEDIA_PLAY_PAUSE;
178  case VK_LAUNCH_MAIL: return FW_KEY_LAUNCH_MAIL;
179  case VK_LAUNCH_MEDIA_SELECT: return FW_KEY_SELECT_MEDIA;
180  case VK_LAUNCH_APP1: return FW_KEY_LAUNCH_APPLICATION1;
181  case VK_LAUNCH_APP2: return FW_KEY_LAUNCH_APPLICATION2;
182  case VK_OEM_1: break;
183  case VK_OEM_PLUS: break;
184  case VK_OEM_COMMA: break;
185  case VK_OEM_MINUS: break;
186  case VK_OEM_PERIOD: break;
187  case VK_OEM_2: break;
188  case VK_OEM_3: break;
189  case VK_OEM_4: break;
190  case VK_OEM_5: break;
191  case VK_OEM_6: break;
192  case VK_OEM_7: break;
193  case VK_OEM_8: break;
194  case VK_OEM_AX: break;
195  case VK_OEM_102: break;
196  case VK_ICO_HELP: break;
197  case VK_ICO_00: break;
198  case VK_PROCESSKEY: return FW_KEY_PROCESS;
199  case VK_ICO_CLEAR: break;
200  case VK_PACKET: break;
201  case VK_OEM_RESET: break;
202  case VK_OEM_JUMP: break;
203  case VK_OEM_PA1: break;
204  case VK_OEM_PA2: break;
205  case VK_OEM_PA3: break;
206  case VK_OEM_WSCTRL: break;
207  case VK_OEM_CUSEL: break;
208  case VK_OEM_ATTN: break;
209  case VK_OEM_FINISH: break;
210  case VK_OEM_COPY: break;
211  case VK_OEM_AUTO: break;
212  case VK_OEM_ENLW: break;
213  case VK_OEM_BACKTAB: break;
214  case VK_ATTN: return FW_KEY_ATTN;
215  case VK_CRSEL: return FW_KEY_CRSEL;
216  case VK_EXSEL: return FW_KEY_EXSEL;
217  case VK_EREOF: return FW_KEY_ERASE_EOF;
218  case VK_PLAY: return FW_KEY_PLAY;
219  case VK_ZOOM: return FW_KEY_ZOOM;
220  case VK_NONAME: break;
221  case VK_PA1: break;
222  case VK_OEM_CLEAR: return FW_KEY_CLEAR;
223  default: break;
224  }
225 
226  // Translate to Unicode.
227 
228  S32 cp = MapVirtualKeyW(vkey, 2);
229 
230  // Translate dead keys to combining marks.
231 
232  switch (cp)
233  {
234  case 0x80000060: cp = 0x0300; break; // FW_KEY_DEAD_GRAVE
235  case 0x800000B4: cp = 0x0301; break; // FW_KEY_DEAD_ACUTE
236  case 0x8000005E: cp = 0x0302; break; // FW_KEY_DEAD_CIRCUMFLEX
237  case 0x8000007E: cp = 0x0303; break; // FW_KEY_DEAD_TILDE
238  case 0x800000AF: cp = 0x0304; break; // FW_KEY_DEAD_MACRON
239  case 0x800002D8: cp = 0x0306; break; // FW_KEY_DEAD_BREVE
240  case 0x800002D9: cp = 0x0307; break; // FW_KEY_DEAD_ABOVE_DOT
241  case 0x800000A8: cp = 0x0308; break; // FW_KEY_DEAD_DIAERESIS
242  case 0x800002DA: cp = 0x030A; break; // FW_KEY_DEAD_ABOVE_RING
243  case 0x800002DD: cp = 0x030B; break; // FW_KEY_DEAD_DOUBLE_ACUTE
244  case 0x800002C7: cp = 0x030C; break; // FW_KEY_DEAD_CARON
245  case 0x800000B8: cp = 0x0327; break; // FW_KEY_DEAD_CEDILLA
246  case 0x800002DB: cp = 0x0328; break; // FW_KEY_DEAD_OGONEK
247  case 0x8000037A: cp = 0x0345; break; // FW_KEY_DEAD_IOTA
248  case 0x8000309B: cp = 0x3099; break; // FW_KEY_DEAD_VOICED
249  case 0x8000309C: cp = 0x309A; break; // FW_KEY_DEAD_SEMIVOICED
250  default: break;
251  }
252 
253  // Convert to string.
254 
255  return (cp) ? unicodeToKey(cp) : "";
256 }
257 
258 //------------------------------------------------------------------------
#define FW_KEY_PAGE_UP
Definition: Keys.hpp:135
#define FW_KEY_MEDIA_PLAY_PAUSE
Definition: Keys.hpp:128
#define FW_KEY_ENTER
Definition: Keys.hpp:77
#define FW_KEY_PLAY
Definition: Keys.hpp:138
#define FW_KEY_CLEAR
Definition: Keys.hpp:67
#define FW_KEY_F13
Definition: Keys.hpp:93
#define FW_KEY_SELECT
Definition: Keys.hpp:146
#define FW_KEY_F8
Definition: Keys.hpp:88
const char * getPtr(void) const
Definition: String.hpp:51
#define FW_KEY_DOWN
Definition: Keys.hpp:75
#define FW_KEY_6
Definition: Keys.hpp:182
#define FW_KEY_F3
Definition: Keys.hpp:83
#define FW_KEY_LEFT
Definition: Keys.hpp:125
#define FW_KEY_BROWSER_STOP
Definition: Keys.hpp:65
#define FW_KEY_PAGE_DOWN
Definition: Keys.hpp:134
#define FW_KEY_VOLUME_UP
Definition: Keys.hpp:154
#define FW_KEY_CONVERT
Definition: Keys.hpp:72
void ** ptr
Definition: DLLImports.cpp:74
#define FW_KEY_BACKSPACE
Definition: Keys.hpp:157
#define FW_KEY_BROWSER_BACK
Definition: Keys.hpp:59
#define FW_KEY_DELETE
Definition: Keys.hpp:228
#define FW_KEY_MEDIA_STOP
Definition: Keys.hpp:130
#define FW_KEY_LAUNCH_APPLICATION2
Definition: Keys.hpp:123
#define FW_KEY_SELECT_MEDIA
Definition: Keys.hpp:147
#define FW_KEY_F6
Definition: Keys.hpp:86
#define FW_KEY_ASTERISK
Definition: Keys.hpp:170
#define FW_KEY_F17
Definition: Keys.hpp:97
#define FW_KEY_NONCONVERT
Definition: Keys.hpp:132
#define FW_KEY_F24
Definition: Keys.hpp:104
#define FW_KEY_ATTN
Definition: Keys.hpp:58
#define FW_KEY_PAUSE
Definition: Keys.hpp:137
String vkeyToKey(U32 vkey)
Definition: Keys.cpp:72
#define FW_KEY_RIGHT
Definition: Keys.hpp:143
#define FW_KEY_8
Definition: Keys.hpp:184
#define FW_KEY_F22
Definition: Keys.hpp:102
#define FW_KEY_APPS
Definition: Keys.hpp:57
#define FW_KEY_CONTROL
Definition: Keys.hpp:70
#define FW_KEY_BROWSER_FAVORITES
Definition: Keys.hpp:60
#define FW_KEY_COMMA
Definition: Keys.hpp:172
#define FW_KEY_PRINT_SCREEN
Definition: Keys.hpp:140
#define FW_KEY_EXECUTE
Definition: Keys.hpp:79
#define FW_KEY_F18
Definition: Keys.hpp:98
#define FW_KEY_2
Definition: Keys.hpp:178
#define FW_KEY_END
Definition: Keys.hpp:76
#define FW_KEY_PLUS
Definition: Keys.hpp:171
#define FW_KEY_PROCESS
Definition: Keys.hpp:141
#define FW_KEY_F5
Definition: Keys.hpp:85
#define FW_KEY_F1
Definition: Keys.hpp:81
#define FW_KEY_7
Definition: Keys.hpp:183
#define FW_KEY_F15
Definition: Keys.hpp:95
#define FW_KEY_MEDIA_NEXT_TRACK
Definition: Keys.hpp:127
#define FW_KEY_CAPS_LOCK
Definition: Keys.hpp:66
#define FW_KEY_1
Definition: Keys.hpp:177
String unicodeToKey(S32 cp)
Definition: Keys.cpp:36
#define FW_KEY_ESCAPE
Definition: Keys.hpp:160
#define FW_KEY_VOLUME_DOWN
Definition: Keys.hpp:152
#define FW_KEY_F4
Definition: Keys.hpp:84
#define FW_KEY_F14
Definition: Keys.hpp:94
#define FW_ASSERT(X)
Definition: Defs.hpp:67
signed int S32
Definition: Defs.hpp:88
S32 keyToUnicode(const String &key)
Definition: Keys.cpp:44
#define FW_KEY_SPACE
Definition: Keys.hpp:161
#define FW_KEY_FINAL_MODE
Definition: Keys.hpp:105
#define FW_KEY_SCROLL
Definition: Keys.hpp:145
#define FW_KEY_NUM_LOCK
Definition: Keys.hpp:133
#define FW_KEY_SHIFT
Definition: Keys.hpp:148
String sprintf(const char *fmt,...)
Definition: Defs.cpp:241
#define FW_KEY_MODE_CHANGE
Definition: Keys.hpp:131
#define FW_KEY_ACCEPT
Definition: Keys.hpp:51
#define FW_KEY_BROWSER_SEARCH
Definition: Keys.hpp:64
#define FW_KEY_ZOOM
Definition: Keys.hpp:156
#define FW_KEY_4
Definition: Keys.hpp:180
#define FW_KEY_TAB
Definition: Keys.hpp:158
#define FW_KEY_ALT
Definition: Keys.hpp:55
unsigned int U32
Definition: Defs.hpp:85
#define FW_KEY_F23
Definition: Keys.hpp:103
#define FW_KEY_3
Definition: Keys.hpp:179
#define FW_KEY_INSERT
Definition: Keys.hpp:114
#define FW_KEY_HANJA_MODE
Definition: Keys.hpp:110
#define FW_KEY_SLASH
Definition: Keys.hpp:175
#define FW_KEY_F11
Definition: Keys.hpp:91
#define FW_KEY_HOME
Definition: Keys.hpp:113
#define FW_KEY_F10
Definition: Keys.hpp:90
#define FW_KEY_9
Definition: Keys.hpp:185
#define FW_KEY_5
Definition: Keys.hpp:181
#define FW_KEY_MEDIA_PREVIOUS_TRACK
Definition: Keys.hpp:129
#define FW_KEY_JUNJA_MODE
Definition: Keys.hpp:118
#define FW_KEY_F21
Definition: Keys.hpp:101
#define FW_KEY_CANCEL
Definition: Keys.hpp:159
#define FW_KEY_WIN
Definition: Keys.hpp:155
#define FW_KEY_F2
Definition: Keys.hpp:82
#define FW_KEY_VOLUME_MUTE
Definition: Keys.hpp:153
#define FW_KEY_UP
Definition: Keys.hpp:150
#define FW_KEY_F16
Definition: Keys.hpp:96
#define FW_KEY_ERASE_EOF
Definition: Keys.hpp:78
#define FW_KEY_MINUS
Definition: Keys.hpp:173
#define FW_KEY_BROWSER_FORWARD
Definition: Keys.hpp:61
#define FW_KEY_F19
Definition: Keys.hpp:99
#define FW_KEY_0
Definition: Keys.hpp:176
#define FW_KEY_KANA_MODE
Definition: Keys.hpp:119
#define FW_KEY_EXSEL
Definition: Keys.hpp:80
#define FW_KEY_PERIOD
Definition: Keys.hpp:174
#define FW_KEY_LAUNCH_APPLICATION1
Definition: Keys.hpp:122
#define FW_KEY_BROWSER_REFRESH
Definition: Keys.hpp:63
#define FW_KEY_F9
Definition: Keys.hpp:89
#define FW_KEY_LAUNCH_MAIL
Definition: Keys.hpp:124
#define FW_KEY_BROWSER_HOME
Definition: Keys.hpp:62
#define FW_KEY_F20
Definition: Keys.hpp:100
#define FW_KEY_CRSEL
Definition: Keys.hpp:71
#define FW_KEY_F12
Definition: Keys.hpp:92
#define FW_KEY_F7
Definition: Keys.hpp:87
#define FW_KEY_HELP
Definition: Keys.hpp:111