projects
/
dosdemo
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3eeca1c
)
SDL backend shifted key translation
author
John Tsiombikas
<nuclear@member.fsf.org>
Sat, 21 Dec 2019 08:05:59 +0000
(10:05 +0200)
committer
John Tsiombikas
<nuclear@member.fsf.org>
Sat, 21 Dec 2019 08:05:59 +0000
(10:05 +0200)
src/sdl/main.c
patch
|
blob
|
history
diff --git
a/src/sdl/main.c
b/src/sdl/main.c
index
de27777
..
fcaee9b
100644
(file)
--- a/
src/sdl/main.c
+++ b/
src/sdl/main.c
@@
-16,7
+16,7
@@
static void toggle_fullscreen(void);
static int handle_sball_event(sball_event *ev);
static void recalc_sball_matrix(float *xform);
static int handle_sball_event(sball_event *ev);
static void recalc_sball_matrix(float *xform);
-static int sdlkey_to_demokey(int sdlkey);
+static int sdlkey_to_demokey(int sdlkey, unsigned int mod);
static int quit;
static int quit;
@@
-180,7
+180,7
@@
static void handle_event(SDL_Event *ev)
toggle_fullscreen();
break;
}
toggle_fullscreen();
break;
}
- key = sdlkey_to_demokey(ev->key.keysym.sym);
+ key = sdlkey_to_demokey(ev->key.keysym.sym, ev->key.keysym.mod);
demo_keyboard(key, ev->key.state == SDL_PRESSED ? 1 : 0);
break;
demo_keyboard(key, ev->key.state == SDL_PRESSED ? 1 : 0);
break;
@@
-266,9
+266,29
@@
static void recalc_sball_matrix(float *xform)
xform[14] = pos.z;
}
xform[14] = pos.z;
}
-static int sdlkey_to_demokey(int sdlkey)
+#define SSORG '\''
+#define SSEND '`'
+static char symshift[] = {
+ '"', 0, 0, 0, 0, '<', '_', '>', '?',
+ ')', '!', '@', '#', '$', '%', '^', '&', '*', '(',
+ 0, ':', 0, '+', 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ '{', '|', '}', 0, 0, '~'
+};
+
+
+static int sdlkey_to_demokey(int sdlkey, unsigned int mod)
{
{
- if(sdlkey < 128) return sdlkey;
+ if(sdlkey < 128) {
+ if(mod & (KMOD_SHIFT)) {
+ if(sdlkey >= 'a' && sdlkey <= 'z') {
+ sdlkey = toupper(sdlkey);
+ } else if(sdlkey >= SSORG && sdlkey <= SSEND) {
+ sdlkey = symshift[sdlkey - SSORG];
+ }
+ }
+ return sdlkey;
+ }
if(sdlkey < 256) return 0;
return sdlkey - 128;
}
if(sdlkey < 256) return 0;
return sdlkey - 128;
}