1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
5 * Copyright 2008 Novell, Inc. (http://www.novell.com)
7 * See the LICENSE file included with the distribution for details.
13 #include <gdk/gdkkeysyms.h>
17 ModifierKeys
Keyboard::modifiers
= ModifierKeyNone
;
18 GHashTable
*Keyboard::pressedKeys
= NULL
;
22 Keyboard::GetModifiers ()
28 Keyboard::SetModifiers (ModifierKeys m
)
34 Keyboard::OnKeyPress (Key key
)
37 pressedKeys
= g_hash_table_new (g_direct_hash
, g_direct_equal
);
39 g_hash_table_insert (pressedKeys
, GINT_TO_POINTER (key
), GINT_TO_POINTER (1));
43 modifiers
= (ModifierKeys
) (modifiers
| ModifierKeyControl
);
46 modifiers
= (ModifierKeys
) (modifiers
| ModifierKeyAlt
);
49 modifiers
= (ModifierKeys
) (modifiers
| ModifierKeyShift
);
57 Keyboard::OnKeyRelease (Key key
)
62 g_hash_table_remove (pressedKeys
, GINT_TO_POINTER (key
));
66 modifiers
= (ModifierKeys
) (modifiers
& ~ModifierKeyControl
);
69 modifiers
= (ModifierKeys
) (modifiers
& ~ModifierKeyAlt
);
72 modifiers
= (ModifierKeys
) (modifiers
& ~ModifierKeyShift
);
80 Keyboard::IsKeyPressed (Key key
)
82 return pressedKeys
&& (g_hash_table_lookup (pressedKeys
, GINT_TO_POINTER (key
)) != NULL
);
86 Keyboard::MapKeyValToKey (guint keyval
)
89 case GDK_BackSpace
: return KeyBACKSPACE
;
90 case GDK_Tab
: case GDK_ISO_Left_Tab
: return KeyTAB
;
91 case GDK_Return
: case GDK_KP_Enter
: return KeyENTER
;
92 case GDK_Shift_L
: case GDK_Shift_R
: return KeySHIFT
;
93 case GDK_Control_L
: case GDK_Control_R
: return KeyCTRL
;
94 case GDK_Alt_L
: case GDK_Alt_R
: return KeyALT
;
95 case GDK_Caps_Lock
: return KeyCAPSLOCK
;
96 case GDK_Escape
: return KeyESCAPE
;
97 case GDK_space
: case GDK_KP_Space
: return KeySPACE
;
98 case GDK_Page_Up
: case GDK_KP_Page_Up
: return KeyPAGEUP
;
99 case GDK_Page_Down
: case GDK_KP_Page_Down
: return KeyPAGEDOWN
;
100 case GDK_End
: case GDK_KP_End
: return KeyEND
;
101 case GDK_Home
: case GDK_KP_Home
: return KeyHOME
;
102 case GDK_Left
: case GDK_KP_Left
: return KeyLEFT
;
103 case GDK_Up
: case GDK_KP_Up
: return KeyUP
;
104 case GDK_Right
: case GDK_KP_Right
: return KeyRIGHT
;
105 case GDK_Down
: case GDK_KP_Down
: return KeyDOWN
;
106 case GDK_Insert
: case GDK_KP_Insert
: return KeyINSERT
;
107 case GDK_Delete
: case GDK_KP_Delete
: return KeyDELETE
;
108 case GDK_0
: return KeyDIGIT0
;
109 case GDK_1
: return KeyDIGIT1
;
110 case GDK_2
: return KeyDIGIT2
;
111 case GDK_3
: return KeyDIGIT3
;
112 case GDK_4
: return KeyDIGIT4
;
113 case GDK_5
: return KeyDIGIT5
;
114 case GDK_6
: return KeyDIGIT6
;
115 case GDK_7
: return KeyDIGIT7
;
116 case GDK_8
: return KeyDIGIT8
;
117 case GDK_9
: return KeyDIGIT9
;
118 case GDK_a
: case GDK_A
: return KeyA
;
119 case GDK_b
: case GDK_B
: return KeyB
;
120 case GDK_c
: case GDK_C
: return KeyC
;
121 case GDK_d
: case GDK_D
: return KeyD
;
122 case GDK_e
: case GDK_E
: return KeyE
;
123 case GDK_f
: case GDK_F
: return KeyF
;
124 case GDK_g
: case GDK_G
: return KeyG
;
125 case GDK_h
: case GDK_H
: return KeyH
;
126 case GDK_i
: case GDK_I
: return KeyI
;
127 case GDK_j
: case GDK_J
: return KeyJ
;
128 case GDK_k
: case GDK_K
: return KeyK
;
129 case GDK_l
: case GDK_L
: return KeyL
;
130 case GDK_m
: case GDK_M
: return KeyM
;
131 case GDK_n
: case GDK_N
: return KeyN
;
132 case GDK_o
: case GDK_O
: return KeyO
;
133 case GDK_p
: case GDK_P
: return KeyP
;
134 case GDK_q
: case GDK_Q
: return KeyQ
;
135 case GDK_r
: case GDK_R
: return KeyR
;
136 case GDK_s
: case GDK_S
: return KeyS
;
137 case GDK_t
: case GDK_T
: return KeyT
;
138 case GDK_u
: case GDK_U
: return KeyU
;
139 case GDK_v
: case GDK_V
: return KeyV
;
140 case GDK_w
: case GDK_W
: return KeyW
;
141 case GDK_x
: case GDK_X
: return KeyX
;
142 case GDK_y
: case GDK_Y
: return KeyY
;
143 case GDK_z
: case GDK_Z
: return KeyZ
;
145 case GDK_F1
: case GDK_KP_F1
: return KeyF1
;
146 case GDK_F2
: case GDK_KP_F2
: return KeyF2
;
147 case GDK_F3
: case GDK_KP_F3
: return KeyF3
;
148 case GDK_F4
: case GDK_KP_F4
: return KeyF4
;
149 case GDK_F5
: return KeyF5
;
150 case GDK_F6
: return KeyF6
;
151 case GDK_F7
: return KeyF7
;
152 case GDK_F8
: return KeyF8
;
153 case GDK_F9
: return KeyF9
;
154 case GDK_F10
: return KeyF10
;
155 case GDK_F11
: return KeyF11
;
156 case GDK_F12
: return KeyF12
;
158 case GDK_KP_0
: return KeyNUMPAD0
;
159 case GDK_KP_1
: return KeyNUMPAD1
;
160 case GDK_KP_2
: return KeyNUMPAD2
;
161 case GDK_KP_3
: return KeyNUMPAD3
;
162 case GDK_KP_4
: return KeyNUMPAD4
;
163 case GDK_KP_5
: return KeyNUMPAD5
;
164 case GDK_KP_6
: return KeyNUMPAD6
;
165 case GDK_KP_7
: return KeyNUMPAD7
;
166 case GDK_KP_8
: return KeyNUMPAD8
;
167 case GDK_KP_9
: return KeyNUMPAD9
;
169 case GDK_KP_Multiply
: case GDK_asterisk
: return KeyMULTIPLY
;
170 case GDK_KP_Add
: case GDK_plus
: return KeyADD
;
171 case GDK_KP_Subtract
: case GDK_minus
: return KeySUBTRACT
;
172 case GDK_KP_Decimal
: case GDK_period
: return KeyDECIMAL
;
173 case GDK_KP_Divide
: case GDK_slash
: return KeyDIVIDE
;