3975
|
1 #include "epoc_sdl.h"
|
|
2
|
|
3 #include <stdio.h>
|
|
4 #undef NULL
|
|
5 extern "C" {
|
|
6 //#define DEBUG_TRACE_ENABLED
|
|
7 #include "SDL_error.h"
|
|
8 #include "SDL_video.h"
|
|
9 #include "SDL_keysym.h"
|
|
10 #include "SDL_keyboard.h"
|
|
11 #include "SDL_events_c.h"
|
|
12 #include "SDL_timer.h"
|
|
13 } /* extern "C" */
|
|
14
|
|
15 #include "SDL_epocvideo.h"
|
|
16 #include "SDL_epocevents_c.h"
|
|
17
|
|
18 #include "sdlepocapi.h"
|
|
19
|
|
20 #include <eikenv.h>
|
|
21
|
|
22 #include<bautils.h>
|
|
23
|
|
24
|
|
25 extern "C"
|
|
26 {
|
|
27 static SDL_keysym *TranslateKey(_THIS, int scancode, SDL_keysym *keysym);
|
|
28 }
|
|
29
|
|
30 //extern "C" {
|
|
31 /* The translation tables from a console scancode to a SDL keysym */
|
|
32 static SDLKey keymap[MAX_SCANCODE];
|
|
33 static SDL_keysym *TranslateKey(_THIS, int scancode, SDL_keysym *keysym);
|
|
34 void DisableKeyBlocking(_THIS);
|
|
35 //} /* extern "C" */
|
|
36
|
|
37 SDLKey* KeyMap()
|
|
38 {
|
|
39 return keymap;
|
|
40 }
|
|
41
|
|
42 TBool isCursorVisible = EFalse;
|
|
43
|
|
44 void ResetKeyMap()
|
|
45 {
|
|
46 int i;
|
|
47
|
|
48 /* Initialize the key translation table */
|
|
49 for ( i=0; i<SDL_TABLESIZE(keymap); ++i )
|
|
50 keymap[i] = SDLK_UNKNOWN;
|
|
51
|
|
52
|
|
53 /* Numbers */
|
|
54 for ( i = 0; i<32; ++i ){
|
|
55 keymap[' ' + i] = (SDLKey)(SDLK_SPACE+i);
|
|
56 }
|
|
57 /* e.g. Alphabet keys */
|
|
58 for ( i = 0; i<32; ++i ){
|
|
59 keymap['A' + i] = (SDLKey)(SDLK_a+i);
|
|
60 }
|
|
61
|
|
62 keymap[EStdKeyBackspace] = SDLK_BACKSPACE;
|
|
63 keymap[EStdKeyTab] = SDLK_TAB;
|
|
64 keymap[EStdKeyEnter] = SDLK_RETURN;
|
|
65 keymap[EStdKeyEscape] = SDLK_ESCAPE;
|
|
66 keymap[EStdKeySpace] = SDLK_SPACE;
|
|
67 keymap[EStdKeyPause] = SDLK_PAUSE;
|
|
68 keymap[EStdKeyHome] = SDLK_HOME;
|
|
69 keymap[EStdKeyEnd] = SDLK_END;
|
|
70 keymap[EStdKeyPageUp] = SDLK_PAGEUP;
|
|
71 keymap[EStdKeyPageDown] = SDLK_PAGEDOWN;
|
|
72 keymap[EStdKeyDelete] = SDLK_DELETE;
|
|
73 keymap[EStdKeyUpArrow] = SDLK_UP;
|
|
74 keymap[EStdKeyDownArrow] = SDLK_DOWN;
|
|
75 keymap[EStdKeyLeftArrow] = SDLK_LEFT;
|
|
76 keymap[EStdKeyRightArrow] = SDLK_RIGHT;
|
|
77 keymap[EStdKeyCapsLock] = SDLK_CAPSLOCK;
|
|
78 keymap[EStdKeyLeftShift] = SDLK_LSHIFT;
|
|
79 keymap[EStdKeyRightShift] = SDLK_RSHIFT;
|
|
80 keymap[EStdKeyLeftAlt] = SDLK_LALT;
|
|
81 keymap[EStdKeyRightAlt] = SDLK_RALT;
|
|
82 keymap[EStdKeyLeftCtrl] = SDLK_LCTRL;
|
|
83 keymap[EStdKeyRightCtrl] = SDLK_RCTRL;
|
|
84 keymap[EStdKeyLeftFunc] = SDLK_LMETA;
|
|
85 keymap[EStdKeyRightFunc] = SDLK_RMETA;
|
|
86 keymap[EStdKeyInsert] = SDLK_INSERT;
|
|
87 keymap[EStdKeyComma] = SDLK_COMMA;
|
|
88 keymap[EStdKeyFullStop] = SDLK_PERIOD;
|
|
89 keymap[EStdKeyForwardSlash] = SDLK_SLASH;
|
|
90 keymap[EStdKeyBackSlash] = SDLK_BACKSLASH;
|
|
91 keymap[EStdKeySemiColon] = SDLK_SEMICOLON;
|
|
92 keymap[EStdKeySingleQuote] = SDLK_QUOTE;
|
|
93 keymap[EStdKeyHash] = SDLK_HASH;
|
|
94 keymap[EStdKeySquareBracketLeft] = SDLK_LEFTBRACKET;
|
|
95 keymap[EStdKeySquareBracketRight] = SDLK_RIGHTBRACKET;
|
|
96 keymap[EStdKeyMinus] = SDLK_MINUS;
|
|
97 keymap[EStdKeyEquals] = SDLK_EQUALS;
|
|
98
|
|
99 keymap[EStdKeyF1] = SDLK_F1;
|
|
100 keymap[EStdKeyF2] = SDLK_F2;
|
|
101 keymap[EStdKeyF3] = SDLK_F3;
|
|
102 keymap[EStdKeyF4] = SDLK_F4;
|
|
103 keymap[EStdKeyF5] = SDLK_F5;
|
|
104 keymap[EStdKeyF6] = SDLK_F6;
|
|
105 keymap[EStdKeyF7] = SDLK_F7;
|
|
106 keymap[EStdKeyF8] = SDLK_F8;
|
|
107
|
|
108 keymap[EStdKeyF9] = SDLK_F9;
|
|
109 keymap[EStdKeyF10] = SDLK_F10;
|
|
110 keymap[EStdKeyF11] = SDLK_F11;
|
|
111 keymap[EStdKeyF12] = SDLK_F12;
|
|
112
|
|
113
|
|
114 keymap[EStdKeyXXX] = SDLK_RETURN; /* "fire" key */
|
|
115
|
|
116 keymap[EStdKeyDevice3] = SDLK_RETURN; /* "fire" key */
|
|
117 keymap[EStdKeyNkpAsterisk] = SDLK_ASTERISK;
|
|
118 keymap[EStdKeyYes] = SDLK_HOME; /* "call" key */
|
|
119 keymap[EStdKeyNo] = SDLK_END; /* "end call" key */
|
|
120 keymap[EStdKeyDevice0] = SDLK_SPACE; /* right menu key */
|
|
121 keymap[EStdKeyDevice1] = SDLK_ESCAPE; /* left menu key */
|
|
122 keymap[EStdKeyDevice2] = SDLK_POWER; /* power key */
|
|
123
|
|
124 keymap[EStdKeyMenu] = SDLK_MENU; // menu key
|
|
125 keymap[EStdKeyDevice6] = SDLK_LEFT; // Rocker (joystick) left
|
|
126 keymap[EStdKeyDevice7] = SDLK_RIGHT; // Rocker (joystick) right
|
|
127 keymap[EStdKeyDevice8] = SDLK_UP; // Rocker (joystick) up
|
|
128 keymap[EStdKeyDevice9] = SDLK_DOWN; // Rocker (joystick) down
|
|
129 keymap[EStdKeyLeftFunc] = SDLK_LALT; //chr?
|
|
130 keymap[EStdKeyRightFunc] = SDLK_RALT;
|
|
131 keymap[EStdKeyDeviceA] = SDLK_RETURN; /* "fire" key */
|
|
132
|
|
133
|
|
134
|
|
135
|
|
136
|
|
137 ///////////////////////////////////////////////////////////
|
|
138 /*
|
|
139 RFs fs;
|
|
140 if(KErrNone == fs.Connect())
|
|
141 {
|
|
142 RArray<TInt> array;
|
|
143 TRAPD(err, ReadL(fs, array));
|
|
144 if(err == KErrNone && array.Count() > 0)
|
|
145 {
|
|
146
|
|
147 SDLKey temp[MAX_SCANCODE];
|
|
148 Mem::Copy(temp, keymap, MAX_SCANCODE * sizeof(SDLKey));
|
|
149
|
|
150 for(TInt k = 0; k < array.Count(); k+= 2)
|
|
151 {
|
|
152 const TInt oldval = array[k];
|
|
153 const TInt newval = array[k + 1];
|
|
154 if(oldval >= 0 && oldval < MAX_SCANCODE && newval >= 0 && newval < MAX_SCANCODE)
|
|
155 {
|
|
156 keymap[oldval] = temp[newval];
|
|
157 }
|
|
158 }
|
|
159 }
|
|
160 array.Close();
|
|
161 }
|
|
162
|
|
163 fs.Close();*/
|
|
164 ///////////////////////////////////////////////////////////
|
|
165
|
|
166
|
|
167 keymap[EStdKeyNumLock] = SDLK_NUMLOCK;
|
|
168 keymap[EStdKeyScrollLock] = SDLK_SCROLLOCK;
|
|
169
|
|
170 keymap[EStdKeyNkpForwardSlash] = SDLK_KP_DIVIDE;
|
|
171 keymap[EStdKeyNkpAsterisk] = SDLK_KP_MULTIPLY;
|
|
172 keymap[EStdKeyNkpMinus] = SDLK_KP_MINUS;
|
|
173 keymap[EStdKeyNkpPlus] = SDLK_KP_PLUS;
|
|
174 keymap[EStdKeyNkpEnter] = SDLK_KP_ENTER;
|
|
175 keymap[EStdKeyNkp1] = SDLK_KP1;
|
|
176 keymap[EStdKeyNkp2] = SDLK_KP2;
|
|
177 keymap[EStdKeyNkp3] = SDLK_KP3;
|
|
178 keymap[EStdKeyNkp4] = SDLK_KP4;
|
|
179 keymap[EStdKeyNkp5] = SDLK_KP5;
|
|
180 keymap[EStdKeyNkp6] = SDLK_KP6;
|
|
181 keymap[EStdKeyNkp7] = SDLK_KP7;
|
|
182 keymap[EStdKeyNkp8] = SDLK_KP8;
|
|
183 keymap[EStdKeyNkp9] = SDLK_KP9;
|
|
184 keymap[EStdKeyNkp0] = SDLK_KP0;
|
|
185 keymap[EStdKeyNkpFullStop] = SDLK_KP_PERIOD;
|
|
186 /*
|
|
187 keymap[EStdKeyMenu] = SDLK_MENU; should be, but not yet
|
|
188 keymap[EStdKeyBacklightOn] =
|
|
189 keymap[EStdKeyBacklightOff] =
|
|
190 keymap[EStdKeyBacklightToggle] =
|
|
191 keymap[EStdKeyIncContrast] =
|
|
192 keymap[EStdKeyDecContrast] =
|
|
193 keymap[EStdKeySliderDown] =
|
|
194 keymap[EStdKeySliderUp] =
|
|
195 keymap[EStdKeyDictaphonePlay] =
|
|
196 keymap[EStdKeyDictaphoneStop] =
|
|
197 keymap[EStdKeyDictaphoneRecord] =
|
|
198 keymap[EStdKeyHelp] =
|
|
199 keymap[EStdKeyOff] =
|
|
200 keymap[EStdKeyDial] =
|
|
201 keymap[EStdKeyIncVolume] =
|
|
202 keymap[EStdKeyDecVolume] =
|
|
203 keymap[EStdKeyDevice0] =
|
|
204 keymap[EStdKeyDevice1] =
|
|
205 keymap[EStdKeyDevice2] =
|
|
206 keymap[EStdKeyDevice3] =
|
|
207 keymap[EStdKeyDevice4] =
|
|
208 keymap[EStdKeyDevice5] =
|
|
209 keymap[EStdKeyDevice6] =
|
|
210 keymap[EStdKeyDevice7] =
|
|
211 keymap[EStdKeyDevice8] =
|
|
212 keymap[EStdKeyDevice9] =
|
|
213 keymap[EStdKeyDeviceA] =
|
|
214 keymap[EStdKeyDeviceB] =
|
|
215 keymap[EStdKeyDeviceC] =
|
|
216 keymap[EStdKeyDeviceD] =
|
|
217 keymap[EStdKeyDeviceE] =
|
|
218 keymap[EStdKeyDeviceF] =
|
|
219 keymap[EStdKeyApplication0] =
|
|
220 keymap[EStdKeyApplication1] =
|
|
221 keymap[EStdKeyApplication2] =
|
|
222 keymap[EStdKeyApplication3] =
|
|
223 keymap[EStdKeyApplication4] =
|
|
224 keymap[EStdKeyApplication5] =
|
|
225 keymap[EStdKeyApplication6] =
|
|
226 keymap[EStdKeyApplication7] =
|
|
227 keymap[EStdKeyApplication8] =
|
|
228 keymap[EStdKeyApplication9] =
|
|
229 keymap[EStdKeyApplicationA] =
|
|
230 keymap[EStdKeyApplicationB] =
|
|
231 keymap[EStdKeyApplicationC] =
|
|
232 keymap[EStdKeyApplicationD] =
|
|
233 keymap[EStdKeyApplicationE] =
|
|
234 keymap[EStdKeyApplicationF] =
|
|
235 keymap[EStdKeyYes] =
|
|
236 keymap[EStdKeyNo] =
|
|
237 keymap[EStdKeyIncBrightness] =
|
|
238 keymap[EStdKeyDecBrightness] =
|
|
239 keymap[EStdKeyCaseOpen] =
|
|
240 keymap[EStdKeyCaseClose] = */
|
|
241
|
|
242
|
|
243
|
|
244 }
|
|
245
|
|
246
|
|
247 int EPOC_HandleWsEvent(_THIS, const TWsEvent& aWsEvent)
|
|
248 {
|
|
249 int posted = 0;
|
|
250 SDL_keysym keysym;
|
|
251
|
|
252 // SDL_TRACE1("hws %d", aWsEvent.Type());
|
|
253
|
|
254 switch (aWsEvent.Type())
|
|
255 {
|
|
256 case EEventPointer: /* Mouse pointer events */
|
|
257 {
|
|
258 /* const TPointerCursorMode mode = EpocSdlEnv::PointerMode();
|
|
259
|
|
260
|
|
261 if(mode == EPointerCursorNone)
|
|
262 {
|
|
263 return 0; //TODO: Find out why events are get despite of cursor should be off
|
|
264 }
|
|
265 */
|
|
266 const TPointerEvent* pointerEvent = aWsEvent.Pointer();
|
|
267 const TPoint mousePos = EpocSdlEnv::WindowCoordinates(pointerEvent->iPosition);
|
|
268
|
|
269 /*!! TODO Pointer do not yet work properly
|
|
270 //SDL_TRACE1("SDL: EPOC_HandleWsEvent, pointerEvent->iType=%d", pointerEvent->iType); //!!
|
|
271
|
|
272 if (Private->EPOC_ShrinkedHeight) {
|
|
273 mousePos.iY <<= 1; // Scale y coordinate to shrinked screen height
|
|
274 }
|
|
275 if (Private->EPOC_ShrinkedWidth) {
|
|
276 mousePos.iX <<= 1; // Scale x coordinate to shrinked screen width
|
|
277 }
|
|
278 */
|
|
279
|
|
280 posted += SDL_PrivateMouseMotion(0, 0, mousePos.iX, mousePos.iY); /* Absolute position on screen */
|
|
281
|
|
282 switch (pointerEvent->iType)
|
|
283 {
|
|
284 case TPointerEvent::EButton1Down:
|
|
285 posted += SDL_PrivateMouseButton(SDL_PRESSED, SDL_BUTTON_LEFT, 0, 0);
|
|
286 break;
|
|
287 case TPointerEvent::EButton1Up:
|
|
288 posted += SDL_PrivateMouseButton(SDL_RELEASED, SDL_BUTTON_LEFT, 0, 0);
|
|
289 break;
|
|
290 case TPointerEvent::EButton2Down:
|
|
291 posted += SDL_PrivateMouseButton(SDL_PRESSED, SDL_BUTTON_RIGHT, 0, 0);
|
|
292 break;
|
|
293 case TPointerEvent::EButton2Up:
|
|
294 posted += SDL_PrivateMouseButton(SDL_RELEASED, SDL_BUTTON_RIGHT, 0, 0);
|
|
295 break;
|
|
296 case TPointerEvent::EButton3Down:
|
|
297 posted += SDL_PrivateMouseButton(SDL_PRESSED, SDL_BUTTON_MIDDLE, 0, 0);
|
|
298 break;
|
|
299 case TPointerEvent::EButton3Up:
|
|
300 posted += SDL_PrivateMouseButton(SDL_RELEASED, SDL_BUTTON_MIDDLE, 0, 0);
|
|
301 break;
|
|
302 } // switch
|
|
303 break;
|
|
304 }
|
|
305
|
|
306 case EEventKeyDown: /* Key events */
|
|
307 {
|
|
308 #ifdef SYMBIAN_CRYSTAL
|
|
309 // special case: 9300/9500 rocker down, simulate left mouse button
|
|
310 if (aWsEvent.Key()->iScanCode == EStdKeyDeviceA)
|
|
311 {
|
|
312 const TPointerCursorMode mode = Private->EPOC_WsSession.PointerCursorMode();
|
|
313 if(mode != EPointerCursorNone)
|
|
314 posted += SDL_PrivateMouseButton(SDL_PRESSED, SDL_BUTTON_LEFT, 0, 0);
|
|
315 }
|
|
316 #endif
|
|
317 (void*)TranslateKey(_this, aWsEvent.Key()->iScanCode, &keysym);
|
|
318
|
|
319 #ifndef DISABLE_JOYSTICK
|
|
320 /* Special handling */
|
|
321 switch((int)keysym.sym) {
|
|
322 case SDLK_CAPSLOCK:
|
|
323 if (!isCursorVisible) {
|
|
324 /* Enable virtual cursor */
|
|
325 HAL::Set(HAL::EMouseState, HAL::EMouseState_Visible);
|
|
326 }
|
|
327 else {
|
|
328 /* Disable virtual cursor */
|
|
329 HAL::Set(HAL::EMouseState, HAL::EMouseState_Invisible);
|
|
330 }
|
|
331 isCursorVisible = !isCursorVisible;
|
|
332 break;
|
|
333 }
|
|
334 #endif
|
|
335 posted += SDL_PrivateKeyboard(SDL_PRESSED, &keysym);
|
|
336 break;
|
|
337 }
|
|
338
|
|
339 case EEventKeyUp: /* Key events */
|
|
340 {
|
|
341 #ifdef SYMBIAN_CRYSTAL
|
|
342 // special case: 9300/9500 rocker up, simulate left mouse button
|
|
343 if (aWsEvent.Key()->iScanCode == EStdKeyDeviceA)
|
|
344 {
|
|
345 posted += SDL_PrivateMouseButton(SDL_RELEASED, SDL_BUTTON_LEFT, 0, 0);
|
|
346 }
|
|
347 #endif
|
|
348 posted += SDL_PrivateKeyboard(SDL_RELEASED, TranslateKey(_this, aWsEvent.Key()->iScanCode, &keysym));
|
|
349 break;
|
|
350 }
|
|
351
|
|
352 case EEventFocusGained: /* SDL window got focus */
|
|
353 {
|
|
354 Private->iIsWindowFocused = ETrue;
|
|
355 posted += SDL_PrivateAppActive(1, SDL_APPINPUTFOCUS|SDL_APPMOUSEFOCUS);
|
|
356 /* Draw window background and screen buffer */
|
|
357 DisableKeyBlocking(_this); //Markus: guess why:-)
|
|
358
|
|
359 //RedrawWindowL(_this);
|
|
360 break;
|
|
361 }
|
|
362
|
|
363 case EEventFocusLost: /* SDL window lost focus */
|
|
364 {
|
|
365
|
|
366 Private->iIsWindowFocused = EFalse;
|
|
367
|
|
368 posted += SDL_PrivateAppActive(0, SDL_APPINPUTFOCUS|SDL_APPMOUSEFOCUS);
|
|
369
|
|
370
|
|
371 break;
|
|
372 }
|
|
373
|
|
374 case EEventModifiersChanged:
|
|
375 {
|
|
376 TModifiersChangedEvent* modEvent = aWsEvent.ModifiersChanged();
|
|
377 TUint modstate = KMOD_NONE;
|
|
378 if (modEvent->iModifiers == EModifierLeftShift)
|
|
379 modstate |= KMOD_LSHIFT;
|
|
380 if (modEvent->iModifiers == EModifierRightShift)
|
|
381 modstate |= KMOD_RSHIFT;
|
|
382 if (modEvent->iModifiers == EModifierLeftCtrl)
|
|
383 modstate |= KMOD_LCTRL;
|
|
384 if (modEvent->iModifiers == EModifierRightCtrl)
|
|
385 modstate |= KMOD_RCTRL;
|
|
386 if (modEvent->iModifiers == EModifierLeftAlt)
|
|
387 modstate |= KMOD_LALT;
|
|
388 if (modEvent->iModifiers == EModifierRightAlt)
|
|
389 modstate |= KMOD_RALT;
|
|
390 if (modEvent->iModifiers == EModifierLeftFunc)
|
|
391 modstate |= KMOD_LMETA;
|
|
392 if (modEvent->iModifiers == EModifierRightFunc)
|
|
393 modstate |= KMOD_RMETA;
|
|
394 if (modEvent->iModifiers == EModifierCapsLock)
|
|
395 modstate |= KMOD_CAPS;
|
|
396 SDL_SetModState(STATIC_CAST(SDLMod,(modstate | KMOD_LSHIFT)));
|
|
397 break;
|
|
398 }
|
|
399 case EEventScreenDeviceChanged:
|
|
400 {
|
|
401 EpocSdlEnv::WaitDeviceChange();
|
|
402 }
|
|
403 break;
|
|
404 default:
|
|
405 break;
|
|
406 }
|
|
407
|
|
408 return posted;
|
|
409 }
|
|
410
|
|
411 extern "C" {
|
|
412
|
|
413 void EPOC_PumpEvents(_THIS)
|
|
414 {
|
|
415 MEventQueue& events = EpocSdlEnv::EventQueue();
|
|
416 while(events.HasData())
|
|
417 {
|
|
418 events.Lock();
|
|
419
|
|
420 //there have to be a copy, so we can release
|
|
421 //lock immediately. HandleWsEvent may cause
|
|
422 //deadlock otherwise.
|
|
423
|
|
424 const TWsEvent event = events.Shift();
|
|
425 events.Unlock();
|
|
426 // const TWsEvent& event = events.Top();
|
|
427 EPOC_HandleWsEvent(_this, event);
|
|
428 // events.Shift();
|
|
429 }
|
|
430 }
|
|
431
|
|
432
|
|
433
|
|
434 void EPOC_InitOSKeymap(_THIS)
|
|
435 {
|
|
436 ResetKeyMap();
|
|
437 EpocSdlEnv::ObserverEvent(MSDLObserver::EEventKeyMapInit ,0);
|
|
438 }
|
|
439
|
|
440 static SDL_keysym *TranslateKey(_THIS, int scancode, SDL_keysym *keysym)
|
|
441 {
|
|
442 // char debug[256];
|
|
443 //SDL_TRACE1("SDL: TranslateKey, scancode=%d", scancode); //!!
|
|
444
|
|
445 /* Set the keysym information */
|
|
446
|
|
447 keysym->scancode = scancode;
|
|
448
|
|
449 if ((scancode >= MAX_SCANCODE) &&
|
|
450 ((scancode - ENonCharacterKeyBase + 0x0081) >= MAX_SCANCODE)) {
|
|
451 SDL_SetError("Too big scancode");
|
|
452 keysym->scancode = SDLK_UNKNOWN;
|
|
453 keysym->mod = KMOD_NONE;
|
|
454 return keysym;
|
|
455 }
|
|
456
|
|
457 keysym->mod = SDL_GetModState();
|
|
458
|
|
459 /* Handle function keys: F1, F2, F3 ... */
|
|
460 if (keysym->mod & KMOD_META) {
|
|
461 if (scancode >= 'A' && scancode < ('A' + 24)) { /* first 32 alphabet keys */
|
|
462 switch(scancode) {
|
|
463 case 'Q': scancode = EStdKeyF1; break;
|
|
464 case 'W': scancode = EStdKeyF2; break;
|
|
465 case 'E': scancode = EStdKeyF3; break;
|
|
466 case 'R': scancode = EStdKeyF4; break;
|
|
467 case 'T': scancode = EStdKeyF5; break;
|
|
468 case 'Y': scancode = EStdKeyF6; break;
|
|
469 case 'U': scancode = EStdKeyF7; break;
|
|
470 case 'I': scancode = EStdKeyF8; break;
|
|
471 case 'A': scancode = EStdKeyF9; break;
|
|
472 case 'S': scancode = EStdKeyF10; break;
|
|
473 case 'D': scancode = EStdKeyF11; break;
|
|
474 case 'F': scancode = EStdKeyF12; break;
|
|
475 }
|
|
476 keysym->sym = keymap[scancode];
|
|
477 }
|
|
478 }
|
|
479
|
|
480 if (scancode >= ENonCharacterKeyBase) {
|
|
481 // Non character keys
|
|
482 keysym->sym = keymap[scancode -
|
|
483 ENonCharacterKeyBase + 0x0081]; // !!hard coded
|
|
484 } else {
|
|
485 keysym->sym = keymap[scancode];
|
|
486 }
|
|
487
|
|
488 /* Remap the arrow keys if the device is rotated */
|
|
489 /*
|
|
490 if (Private->EPOC_ScreenOrientation == CFbsBitGc::EGraphicsOrientationRotated270) {
|
|
491 switch(keysym->sym) {
|
|
492 case SDLK_UP: keysym->sym = SDLK_LEFT; break;
|
|
493 case SDLK_DOWN: keysym->sym = SDLK_RIGHT; break;
|
|
494 case SDLK_LEFT: keysym->sym = SDLK_DOWN; break;
|
|
495 case SDLK_RIGHT:keysym->sym = SDLK_UP; break;
|
|
496 }
|
|
497 }
|
|
498 */
|
|
499 /* If UNICODE is on, get the UNICODE value for the key */
|
|
500 keysym->unicode = 0;
|
|
501
|
|
502 #if 0 // !!TODO:unicode
|
|
503
|
|
504 if ( SDL_TranslateUNICODE )
|
|
505 {
|
|
506 /* Populate the unicode field with the ASCII value */
|
|
507 keysym->unicode = scancode;
|
|
508 }
|
|
509 #endif
|
|
510
|
|
511 //!!
|
|
512 //sprintf(debug, "SDL: TranslateKey: keysym->scancode=%d, keysym->sym=%d, keysym->mod=%d",
|
|
513 // keysym->scancode, keysym->sym, keysym->mod);
|
|
514 //SDL_TRACE(debug); //!!
|
|
515
|
|
516 return(keysym);
|
|
517 }
|
|
518
|
|
519 } /* extern "C" */
|
|
520
|
|
521
|