1
0
Fork 0

Ascii foreign keyboard support

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@703
This commit is contained in:
Sjoerd van der Berg 2003-03-02 21:42:43 +00:00
parent 5fb73510fe
commit 60c35559f9
2 changed files with 24 additions and 18 deletions

View file

@ -19,17 +19,7 @@
#ifndef _KEYBOARD_H_
#define _KEYBOARD_H_
typedef void(KEYBOARD_EventHandler)(void);
void KEYBOARD_AddCode(Bit8u code);
void KEYBOARD_AddKey(Bitu keytype,bool pressed);
void KEYBOARD_AddEvent(Bitu keytype,Bitu state,KEYBOARD_EventHandler * handler);
#define ALT_PRESSED 0x1
#define CTRL_PRESSED 0x2
#define SHIFT_PRESSED 0x4
enum {
enum KBD_KEYS {
KBD_1, KBD_2, KBD_3, KBD_4, KBD_5, KBD_6, KBD_7, KBD_8, KBD_9, KBD_0,
KBD_q, KBD_w, KBD_e, KBD_r, KBD_t, KBD_y, KBD_u, KBD_i, KBD_o, KBD_p,
KBD_a, KBD_s, KBD_d, KBD_f, KBD_g, KBD_h, KBD_j, KBD_k, KBD_l, KBD_z,
@ -54,4 +44,16 @@ enum {
KBD_LAST
};
typedef void(KEYBOARD_EventHandler)(void);
void KEYBOARD_AddEvent(Bitu keytype,Bitu state,KEYBOARD_EventHandler * handler);
void KEYBOARD_AddKey(KBD_KEYS key,Bitu ascii,Bitu mod,bool pressed);
void KEYBOARD_ReadKey(Bitu & scancode,Bitu & ascii,Bitu & mod);
#define KBD_MOD_ALT 0x1
#define KBD_MOD_CTRL 0x2
#define KBD_MOD_SHIFT 0x4
#endif

View file

@ -250,14 +250,12 @@ static void GUI_StartUp(Section * sec) {
/* Initialize screen for first time */
GFX_SetSize(640,400,8,0,0,0);
SDL_EnableKeyRepeat(250,30);
SDL_EnableUNICODE(1);
/* Get some Keybinds */
KEYBOARD_AddEvent(KBD_f10,CTRL_PRESSED,CaptureMouse);
KEYBOARD_AddEvent(KBD_enter,ALT_PRESSED,SwitchFullScreen);
KEYBOARD_AddEvent(KBD_f10,KBD_MOD_CTRL,CaptureMouse);
KEYBOARD_AddEvent(KBD_enter,KBD_MOD_ALT,SwitchFullScreen);
}
void Mouse_AutoLock(bool enable) {
sdl.mouse.autolock=enable;
if (enable && sdl.mouse.autoenable) sdl.mouse.requestlock=true;
@ -265,7 +263,7 @@ void Mouse_AutoLock(bool enable) {
}
static void HandleKey(SDL_KeyboardEvent * key) {
Bit32u code;
KBD_KEYS code;
switch (key->keysym.sym) {
case SDLK_1:code=KBD_1;break;
case SDLK_2:code=KBD_2;break;
@ -386,7 +384,13 @@ static void HandleKey(SDL_KeyboardEvent * key) {
//TODO maybe give warning for keypress unknown
return;
}
KEYBOARD_AddKey(code,(key->state==SDL_PRESSED));
/* Check the modifiers */
Bitu mod=
((key->keysym.mod & KMOD_CTRL) ? KBD_MOD_CTRL : 0) |
((key->keysym.mod & KMOD_ALT) ? KBD_MOD_ALT : 0) |
((key->keysym.mod & KMOD_SHIFT) ? KBD_MOD_SHIFT : 0);
Bitu ascii=key->keysym.unicode<128 ? key->keysym.unicode : 0;
KEYBOARD_AddKey(code,ascii,mod,(key->state==SDL_PRESSED));
}
static void HandleMouseMotion(SDL_MouseMotionEvent * motion) {