Skip to content

Commit a2db632

Browse files
author
guccigang420
committed
Added a translation for GTK virtual keys to ui::VirtualKey
1 parent f6b5424 commit a2db632

File tree

2 files changed

+152
-1
lines changed

2 files changed

+152
-1
lines changed

src/xenia/ui/window_gtk.cc

+148-1
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,153 @@ void GTKWindow::EndBatchedSizeUpdate(
350350
}
351351
}
352352

353+
VirtualKey GTKWindow::TranslateVirtualKey(guint keyval) {
354+
switch (keyval) {
355+
case GDK_KEY_a:
356+
return VirtualKey::kA;
357+
case GDK_KEY_A:
358+
return VirtualKey::kA;
359+
case GDK_KEY_b:
360+
return VirtualKey::kB;
361+
case GDK_KEY_B:
362+
return VirtualKey::kB;
363+
case GDK_KEY_c:
364+
return VirtualKey::kC;
365+
case GDK_KEY_C:
366+
return VirtualKey::kC;
367+
case GDK_KEY_d:
368+
return VirtualKey::kD;
369+
case GDK_KEY_D:
370+
return VirtualKey::kD;
371+
case GDK_KEY_e:
372+
return VirtualKey::kE;
373+
case GDK_KEY_E:
374+
return VirtualKey::kE;
375+
case GDK_KEY_f:
376+
return VirtualKey::kF;
377+
case GDK_KEY_F:
378+
return VirtualKey::kF;
379+
case GDK_KEY_g:
380+
return VirtualKey::kG;
381+
case GDK_KEY_G:
382+
return VirtualKey::kG;
383+
case GDK_KEY_h:
384+
return VirtualKey::kH;
385+
case GDK_KEY_H:
386+
return VirtualKey::kH;
387+
case GDK_KEY_i:
388+
return VirtualKey::kI;
389+
case GDK_KEY_I:
390+
return VirtualKey::kI;
391+
case GDK_KEY_j:
392+
return VirtualKey::kJ;
393+
case GDK_KEY_J:
394+
return VirtualKey::kJ;
395+
case GDK_KEY_k:
396+
return VirtualKey::kK;
397+
case GDK_KEY_K:
398+
return VirtualKey::kK;
399+
case GDK_KEY_l:
400+
return VirtualKey::kL;
401+
case GDK_KEY_L:
402+
return VirtualKey::kL;
403+
case GDK_KEY_m:
404+
return VirtualKey::kM;
405+
case GDK_KEY_M:
406+
return VirtualKey::kM;
407+
case GDK_KEY_n:
408+
return VirtualKey::kN;
409+
case GDK_KEY_N:
410+
return VirtualKey::kN;
411+
case GDK_KEY_o:
412+
return VirtualKey::kO;
413+
case GDK_KEY_O:
414+
return VirtualKey::kO;
415+
case GDK_KEY_p:
416+
return VirtualKey::kP;
417+
case GDK_KEY_P:
418+
return VirtualKey::kP;
419+
case GDK_KEY_q:
420+
return VirtualKey::kQ;
421+
case GDK_KEY_Q:
422+
return VirtualKey::kQ;
423+
case GDK_KEY_r:
424+
return VirtualKey::kR;
425+
case GDK_KEY_R:
426+
return VirtualKey::kR;
427+
case GDK_KEY_s:
428+
return VirtualKey::kS;
429+
case GDK_KEY_S:
430+
return VirtualKey::kS;
431+
case GDK_KEY_t:
432+
return VirtualKey::kT;
433+
case GDK_KEY_T:
434+
return VirtualKey::kT;
435+
case GDK_KEY_u:
436+
return VirtualKey::kU;
437+
case GDK_KEY_U:
438+
return VirtualKey::kU;
439+
case GDK_KEY_v:
440+
return VirtualKey::kV;
441+
case GDK_KEY_V:
442+
return VirtualKey::kV;
443+
case GDK_KEY_w:
444+
return VirtualKey::kW;
445+
case GDK_KEY_W:
446+
return VirtualKey::kW;
447+
case GDK_KEY_x:
448+
return VirtualKey::kX;
449+
case GDK_KEY_X:
450+
return VirtualKey::kX;
451+
case GDK_KEY_y:
452+
return VirtualKey::kY;
453+
case GDK_KEY_Y:
454+
return VirtualKey::kY;
455+
case GDK_KEY_z:
456+
return VirtualKey::kZ;
457+
case GDK_KEY_Z:
458+
return VirtualKey::kZ;
459+
case GDK_KEY_0:
460+
return VirtualKey::k0;
461+
case GDK_KEY_1:
462+
return VirtualKey::k1;
463+
case GDK_KEY_2:
464+
return VirtualKey::k2;
465+
case GDK_KEY_3:
466+
return VirtualKey::k3;
467+
case GDK_KEY_4:
468+
return VirtualKey::k4;
469+
case GDK_KEY_5:
470+
return VirtualKey::k5;
471+
case GDK_KEY_6:
472+
return VirtualKey::k6;
473+
case GDK_KEY_7:
474+
return VirtualKey::k7;
475+
case GDK_KEY_8:
476+
return VirtualKey::k8;
477+
case GDK_KEY_9:
478+
return VirtualKey::k9;
479+
case GDK_KEY_semicolon:
480+
return VirtualKey::kOem1;
481+
case GDK_KEY_apostrophe:
482+
return VirtualKey::kOem7;
483+
case GDK_KEY_comma:
484+
return VirtualKey::kOemComma;
485+
case GDK_KEY_period:
486+
return VirtualKey::kOemPeriod;
487+
case GDK_KEY_uparrow:
488+
return VirtualKey::kUp;
489+
case GDK_KEY_downarrow:
490+
return VirtualKey::kDown;
491+
case GDK_KEY_leftarrow:
492+
return VirtualKey::kLeft;
493+
case GDK_KEY_rightarrow:
494+
return VirtualKey::kRight;
495+
default:
496+
return VirtualKey(keyval);
497+
}
498+
}
499+
353500
bool GTKWindow::HandleMouse(GdkEvent* event,
354501
WindowDestructionReceiver& destruction_receiver) {
355502
MouseEvent::Button button = MouseEvent::Button::kNone;
@@ -433,7 +580,7 @@ bool GTKWindow::HandleKeyboard(
433580
bool super_pressed = modifiers & GDK_SUPER_MASK;
434581
uint32_t key_char = gdk_keyval_to_unicode(event->keyval);
435582
// TODO(Triang3l): event->hardware_keycode to VirtualKey translation.
436-
KeyEvent e(this, VirtualKey(event->hardware_keycode), 1,
583+
KeyEvent e(this, TranslateVirtualKey(event->keyval), 1,
437584
event->type == GDK_KEY_RELEASE, shift_pressed, ctrl_pressed,
438585
alt_pressed, super_pressed);
439586
switch (event->type) {

src/xenia/ui/window_gtk.h

+4
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ class GTKWindow : public Window {
5959
void BeginBatchedSizeUpdate();
6060
void EndBatchedSizeUpdate(WindowDestructionReceiver& destruction_receiver);
6161

62+
63+
//Translates a gtk virtual key to xenia ui::VirtualKey
64+
VirtualKey TranslateVirtualKey(guint keyval);
65+
6266
// Handling events related to the whole window.
6367
bool HandleMouse(GdkEvent* event,
6468
WindowDestructionReceiver& destruction_receiver);

0 commit comments

Comments
 (0)