From 9e4866e34c8d452f7b779c84e22904d56360c6bc Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Fri, 22 May 2009 19:24:03 +0000 Subject: [PATCH] Implemented US-qwerty shift characters, when Unicode is disabled git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@815 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- gfx2def.ini | 4 ++-- keyboard.c | 54 ++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/gfx2def.ini b/gfx2def.ini index 56d1423d..92c87f6d 100644 --- a/gfx2def.ini +++ b/gfx2def.ini @@ -340,8 +340,8 @@ ; that follows it isn't space or a vowel (the ones that make it a valid ; combination : ^вкофы) ; If this problem concerns you, disable unicode below, and it will never - ; crash. This won't affect keyboard shortcuts, but in text fields you will be - ; unable to type many punctuation characters. + ; crash. This won't affect keyboard shortcuts, but in text fields you'll be + ; typing in US-QWERTY mode. Use_unicode = yes ; (Default 'yes') ; end of configuration diff --git a/keyboard.c b/keyboard.c index d3b76ddc..84594e90 100644 --- a/keyboard.c +++ b/keyboard.c @@ -543,21 +543,57 @@ word Keysym_to_ANSI(SDL_keysym keysym) #if !(defined(__macosx__) || defined(__FreeBSD__)) if ( keysym.unicode == 0) { - // Converty lowercase to uppercase if SHIFT is on. - if (keysym.sym >= 'a' && keysym.sym <= 'z' && (SDL_GetModState() & (KMOD_SHIFT|KMOD_CAPS))) - return ('A' - 'a') + keysym.sym; + byte shift; + + shift = (SDL_GetModState() & (KMOD_SHIFT|KMOD_CAPS)) != 0; // Convert keypad to numbers if (keysym.sym >= SDLK_KP0 && keysym.sym <= SDLK_KP9) return ('0' - SDLK_KP0) + keysym.sym; + + // Conversion with shift on + if (shift) + { + // Lowercase to uppercase. + if (keysym.sym >= 'a' && keysym.sym <= 'z' && shift) + return ('A' - 'a') + keysym.sym; + // Some shifts of QWERTY-US keys + switch (keysym.sym) + { + case '`': return '~'; + case '1': return '!'; + case '2': return '@'; + case '3': return '#'; + case '4': return '$'; + case '5': return '%'; + case '6': return '^'; + case '7': return '&'; + case '8': return '*'; + case '9': return '('; + case '0': return ')'; + case '-': return '_'; + case '=': return '+'; + case '\\': return '|'; + case '[': return '{'; + case ']': return '}'; + case ';': return ':'; + case '\'': return '"'; + case ',': return '<'; + case '.': return '>'; + case '/': return '?'; + default: + return keysym.sym; + } + } // More conversions switch (keysym.sym) { - case SDLK_KP_PERIOD: return '.'; - case SDLK_KP_DIVIDE: return '/'; - case SDLK_KP_MINUS: return '-'; - case SDLK_KP_PLUS: return '+'; - case SDLK_KP_ENTER: return '\r'; - case SDLK_KP_EQUALS: return '='; + case SDLK_KP_PERIOD: return '.'; + case SDLK_KP_DIVIDE: return '/'; + case SDLK_KP_MINUS: return '-'; + case SDLK_KP_MULTIPLY: return '*'; + case SDLK_KP_PLUS: return '+'; + case SDLK_KP_ENTER: return '\r'; + case SDLK_KP_EQUALS: return '='; default: return keysym.sym; }