Skip to content

Commit bf0a269

Browse files
committed
Support all keyboard keys supported by SDL2
1 parent aa3a28b commit bf0a269

File tree

7 files changed

+459
-248
lines changed

7 files changed

+459
-248
lines changed

src/Common/PlatformWindows.inl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
22
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
33
#define IDIRECTPLAY2_OR_GREATER // ?
4-
#define DIRECTINPUT_VERSION 0x0800 //
54

65
#ifndef _WIN32_WINNT
76
// Request Windows 7 functionality

src/xrEngine/edit_actions.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ void type_pair::on_key_press(line_edit_control* const control)
7676

7777
static _locale_t current_locale = _create_locale(LC_ALL, "");
7878

79-
if (pInput->get_key_name(m_dik, buff, sizeof(buff)))
79+
if (pInput->get_dik_name(m_dik, buff, sizeof(buff)))
8080
{
8181
if (_isalpha_l(buff[0], current_locale) || buff[0] == char(-1)) // "я" = -1
8282
{

src/xrEngine/xr_input.cpp

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -187,27 +187,46 @@ void CInput::KeyUpdate()
187187
cbStack.back()->IR_OnKeyboardHold(i);
188188
}
189189

190-
bool CInput::get_key_name(int dik, LPSTR dest_str, int dest_sz)
190+
pcstr KeyToMouseButtonName(const int dik)
191191
{
192+
switch (dik)
193+
{
194+
case MOUSE_1: return "Left mouse";
195+
case MOUSE_2: return "Right mouse";
196+
case MOUSE_3: return "Center mouse";
197+
case MOUSE_4: return "Fourth mouse";
198+
case MOUSE_5: return "Fifth mouse";
199+
case MOUSE_6: return "Sixth mouse";
200+
case MOUSE_7: return "Seventh mouse";
201+
case MOUSE_8: return "Eighth mouse";
202+
default: return "Unknown mouse";
203+
}
204+
}
205+
206+
bool CInput::get_dik_name(int dik, LPSTR dest_str, int dest_sz)
207+
{
208+
pcstr keyname;
209+
192210
if (dik < SDL_NUM_SCANCODES)
211+
keyname = SDL_GetKeyName(SDL_GetKeyFromScancode((SDL_Scancode)dik));
212+
else
213+
keyname = KeyToMouseButtonName(dik);
214+
215+
if (0 == strlen(keyname))
193216
{
194-
const char* keyname = SDL_GetKeyName(SDL_GetKeyFromScancode((SDL_Scancode)dik));
195-
if (0 == strlen(keyname))
217+
if (dik == SDL_SCANCODE_UNKNOWN)
218+
keyname = "Unknown";
219+
else
196220
{
197-
Msg("! cant convert dik_name for dik[%d]", dik);
221+
Msg("! Can't convert dik_name for dik[%d]", dik);
198222
return false;
199223
}
200-
xr_strcpy(dest_str, dest_sz, keyname);
201224
}
202-
else
203-
xr_sprintf(dest_str, dest_sz, "MOUSE%d", dik - SDL_NUM_SCANCODES);
204225

226+
xr_strcpy(dest_str, dest_sz, keyname);
205227
return true;
206228
}
207229

208-
#define MOUSE_1 (SDL_NUM_SCANCODES + SDL_BUTTON_LEFT)
209-
#define MOUSE_8 (SDL_NUM_SCANCODES + 8)
210-
211230
bool CInput::iGetAsyncKeyState(int dik)
212231
{
213232
if (dik < COUNT_KB_BUTTONS)

src/xrEngine/xr_input.h

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,41 @@
11
#ifndef __XR_INPUT__
22
#define __XR_INPUT__
33

4-
#define DIRECTINPUT_VERSION 0x0800
54
#include <SDL.h>
65

6+
// SDL_NUM_SCANCODES - max vavue in SDL_SCANCODE_* enum
7+
#define MOUSE_1 (SDL_NUM_SCANCODES + SDL_BUTTON_LEFT)
8+
#define MOUSE_2 (SDL_NUM_SCANCODES + SDL_BUTTON_RIGHT)
9+
#define MOUSE_3 (SDL_NUM_SCANCODES + SDL_BUTTON_MIDDLE)
10+
11+
#define MOUSE_4 (SDL_NUM_SCANCODES + SDL_BUTTON_X1)
12+
#define MOUSE_5 (SDL_NUM_SCANCODES + SDL_BUTTON_X2)
13+
#define MOUSE_6 (SDL_NUM_SCANCODES + 6)
14+
#define MOUSE_7 (SDL_NUM_SCANCODES + 7)
15+
#define MOUSE_8 (SDL_NUM_SCANCODES + 8)
16+
17+
constexpr int MouseButtonToKey[] = { MOUSE_1, MOUSE_3, MOUSE_2, MOUSE_4, MOUSE_5, MOUSE_6, MOUSE_7, MOUSE_8 };
18+
19+
inline int KeyToMouseButton(const int dik, const bool fromZero = true)
20+
{
21+
int i = 0;
22+
if (!fromZero)
23+
++i;
24+
25+
switch (dik)
26+
{
27+
case MOUSE_1: return 0 + i;
28+
case MOUSE_2: return 1 + i;
29+
case MOUSE_3: return 2 + i;
30+
case MOUSE_4: return 3 + i;
31+
case MOUSE_5: return 4 + i;
32+
case MOUSE_6: return 5 + i;
33+
case MOUSE_7: return 6 + i;
34+
case MOUSE_8: return 7 + i;
35+
default: return dik - SDL_NUM_SCANCODES + i;
36+
}
37+
}
38+
739
class ENGINE_API IInputReceiver;
840

941
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
@@ -84,7 +116,7 @@ class ENGINE_API CInput
84116
IC bool get_exclusive_mode();
85117
void unacquire();
86118
void acquire(const bool& exclusive);
87-
bool get_key_name(int dik, LPSTR dest, int dest_sz);
119+
bool get_dik_name(int dik, LPSTR dest, int dest_sz);
88120

89121
void feedback(u16 s1, u16 s2, float time);
90122
};

src/xrGame/key_binding_registrator_script.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -225,25 +225,25 @@ SCRIPT_EXPORT(KeyBindings, (),
225225
value("DIK_NUMPADCOMMA", int(SDL_SCANCODE_KP_COMMA)),
226226
value("DIK_NUMPADEQUALSAS400", int(SDL_SCANCODE_KP_EQUALSAS400)),
227227

228-
//value("DIK_", int(SDL_SCANCODE_INTERNATIONAL1)),
229-
//value("DIK_", int(SDL_SCANCODE_INTERNATIONAL2)),
228+
value("DIK_INTERNATIONAL1", int(SDL_SCANCODE_INTERNATIONAL1)), // Give a better name?
229+
value("DIK_INTERNATIONAL2", int(SDL_SCANCODE_INTERNATIONAL2)), // Give a better name?
230230
value("DIK_YEN", int(SDL_SCANCODE_INTERNATIONAL3)),
231-
//value("DIK_", int(SDL_SCANCODE_INTERNATIONAL4)),
232-
//value("DIK_", int(SDL_SCANCODE_INTERNATIONAL5)),
233-
//value("DIK_", int(SDL_SCANCODE_INTERNATIONAL6)),
234-
//value("DIK_", int(SDL_SCANCODE_INTERNATIONAL7)),
235-
//value("DIK_", int(SDL_SCANCODE_INTERNATIONAL8)),
236-
//value("DIK_", int(SDL_SCANCODE_INTERNATIONAL9)),
237-
238-
//value("DIK_", int(SDL_SCANCODE_LANG1)),
239-
//value("DIK_", int(SDL_SCANCODE_LANG2)),
231+
value("DIK_INTERNATIONAL4", int(SDL_SCANCODE_INTERNATIONAL4)), // Give a better name?
232+
value("DIK_INTERNATIONAL5", int(SDL_SCANCODE_INTERNATIONAL5)), // Give a better name?
233+
value("DIK_INTERNATIONAL6", int(SDL_SCANCODE_INTERNATIONAL6)), // Give a better name?
234+
value("DIK_INTERNATIONAL7", int(SDL_SCANCODE_INTERNATIONAL7)), // Give a better name?
235+
value("DIK_INTERNATIONAL8", int(SDL_SCANCODE_INTERNATIONAL8)), // Give a better name?
236+
value("DIK_INTERNATIONAL9", int(SDL_SCANCODE_INTERNATIONAL9)), // Give a better name?
237+
238+
value("DIK_HANGUL", int(SDL_SCANCODE_LANG1)),
239+
value("DIK_HANJA", int(SDL_SCANCODE_LANG2)),
240240
value("DIK_KATAKANA", int(SDL_SCANCODE_LANG3)),
241241
value("DIK_HIRAGANA", int(SDL_SCANCODE_LANG4)),
242-
//value("DIK_", int(SDL_SCANCODE_LANG5)),
243-
//value("DIK_", int(SDL_SCANCODE_LANG6)),
244-
//value("DIK_", int(SDL_SCANCODE_LANG7)),
245-
//value("DIK_", int(SDL_SCANCODE_LANG8)),
246-
//value("DIK_", int(SDL_SCANCODE_LANG9)),
242+
value("DIK_ZENHANKAKU", int(SDL_SCANCODE_LANG5)),
243+
value("DIK_LANG6", int(SDL_SCANCODE_LANG6)), // Give a better name?
244+
value("DIK_LANG7", int(SDL_SCANCODE_LANG7)), // Give a better name?
245+
value("DIK_LANG8", int(SDL_SCANCODE_LANG8)), // Give a better name?
246+
value("DIK_LANG9", int(SDL_SCANCODE_LANG9)), // Give a better name?
247247

248248
value("DIK_ALTERASE", int(SDL_SCANCODE_ALTERASE)),
249249
value("DIK_CANCEL", int(SDL_SCANCODE_CANCEL)),

0 commit comments

Comments
 (0)