diff --git a/CMakeLists.txt b/CMakeLists.txt index 62a0b5a..10fdcac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,7 @@ set(FLAGS -DROM_PATH_PREFIX=\"ux0:/data/uae4all/roms/\" -DDATA_PREFIX=\"app0:/data/\" -DSAVE_PREFIX=\"ux0:/data/uae4all/saves/\" -DUSE_UAE4ALL_VKBD -DVKBD_ALWAYS +-DLARGEKEYBOARD -fomit-frame-pointer -Wno-unused -Wno-format -ffast-math -fstrict-aliasing -mstructure-size-boundary=32 -fexpensive-optimizations -fweb -frename-registers -fomit-frame-pointer diff --git a/psp2data/data/vkbdLarge.bmp b/psp2data/data/vkbdLarge.bmp new file mode 100644 index 0000000..28dff92 Binary files /dev/null and b/psp2data/data/vkbdLarge.bmp differ diff --git a/psp2data/data/vkbdLargeShift.bmp b/psp2data/data/vkbdLargeShift.bmp new file mode 100644 index 0000000..0a0acff Binary files /dev/null and b/psp2data/data/vkbdLargeShift.bmp differ diff --git a/psp2data/data/vkbdLargeShift_German.bmp b/psp2data/data/vkbdLargeShift_German.bmp new file mode 100644 index 0000000..7faa00c Binary files /dev/null and b/psp2data/data/vkbdLargeShift_German.bmp differ diff --git a/psp2data/data/vkbdLarge_German.bmp b/psp2data/data/vkbdLarge_German.bmp new file mode 100644 index 0000000..74eb44a Binary files /dev/null and b/psp2data/data/vkbdLarge_German.bmp differ diff --git a/src/gui.cpp b/src/gui.cpp index 9ee49f0..9d5dca2 100755 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -1742,27 +1742,40 @@ if(!vkbd_mode) } #ifdef USE_UAE4ALL_VKBD - if (vkbd_key) + if (vkbd_key!=-1234567) // This means key was selected by user. We cannot test for zero, because that is a valid Amiga keycode { - if (vkbd_keysave==-1234567) + if (vkbd_keysave==-1234567) // the previous vkbd key was released. Press the new key for one frame { - SDL_keysym ks; - ks.sym=vkbd_key; - vkbd_keysave=keycode2amiga(&ks); + vkbd_keysave=vkbd_key; // remember which key we are pressing so we can release it later if (vkbd_keysave >= 0) { if (!uae4all_keystate[vkbd_keysave]) { + if ((vkbd_shift) && uae4all_keystate[AK_LSH] == 0) + { + uae4all_keystate[AK_LSH]=1; + record_key(AK_LSH<<1); + } + if (!(vkbd_shift) && uae4all_keystate[AK_LSH] == 1) + { + uae4all_keystate[AK_LSH]=0; + record_key((AK_LSH<<1)|1); + } uae4all_keystate[vkbd_keysave]=1; - record_key(vkbd_keysave<<1); + record_key(vkbd_keysave<<1); } } } } else if (vkbd_keysave!=-1234567) { - if (vkbd_keysave >= 0) + if (vkbd_keysave >= 0) //turn off shift together with any other key release if it was on { + if (uae4all_keystate[AK_LSH] == 1) + { + uae4all_keystate[AK_LSH]=0; + record_key((AK_LSH<<1)|1); + } uae4all_keystate[vkbd_keysave]=0; record_key((vkbd_keysave << 1) | 1); } diff --git a/src/od-joy.cpp b/src/od-joy.cpp index 861ee31..0b6790d 100755 --- a/src/od-joy.cpp +++ b/src/od-joy.cpp @@ -314,32 +314,51 @@ void read_joystick(int nr, unsigned int *dir, int *button) if (vkbd_mode && nr) { // move around the virtual keyboard instead - if (left) - vkbd_move |= VKBD_LEFT; - else + + // if Start+up or Start+down is pressed: move the keyboard itself + if (buttonStart && (dpadUp || top)) { - vkbd_move &= ~VKBD_LEFT; - if (right) - vkbd_move |= VKBD_RIGHT; - else - vkbd_move &= ~VKBD_RIGHT; + vkbd_displace_up(); } - if (top) - vkbd_move |= VKBD_UP; - else + else if (buttonStart && (dpadDown || bot)) { - vkbd_move &= ~VKBD_UP; - if (bot) - vkbd_move |= VKBD_DOWN; - else - vkbd_move &= ~VKBD_DOWN; + vkbd_displace_down(); } - if (*button) + + else { - vkbd_move=VKBD_BUTTON; - *button=0; + if (left || dpadLeft) + vkbd_move |= VKBD_LEFT; + else + { + vkbd_move &= ~VKBD_LEFT; + if (right || dpadRight) + vkbd_move |= VKBD_RIGHT; + else + vkbd_move &= ~VKBD_RIGHT; + } + if (top || dpadUp) + vkbd_move |= VKBD_UP; + else + { + vkbd_move &= ~VKBD_UP; + if (bot || dpadDown) + vkbd_move |= VKBD_DOWN; + else + vkbd_move &= ~VKBD_DOWN; + } + + if (*button || buttonX) + { + vkbd_move=VKBD_BUTTON; + *button=0; + } + else //button release, make shift toggle possible again. + { + vkbd_can_switch_shift=1; + } + // TODO: add vkbd_button2 mapped to button2 } - // TODO: add vkbd_button2 mapped to button2 } else #endif diff --git a/src/vkbd/vkbd.cpp b/src/vkbd/vkbd.cpp index e68af24..90fa041 100755 --- a/src/vkbd/vkbd.cpp +++ b/src/vkbd/vkbd.cpp @@ -4,14 +4,23 @@ #include "vkbd.h" -#define MENU_FILE_BACKGROUND DATA_PREFIX "background.bmp" +#include "keyboard.h" + #define MIN_VKBD_TIME 100 +extern int keycode2amiga(SDL_keysym *prKeySym); + +static int vkbd_x=VKBD_X; +static int vkbd_y=VKBD_Y; +static int vkbd_just_blinked=0; + +int vkbd_shift=0; +int vkbd_can_switch_shift=0; int vkbd_mode=0; int vkbd_move=0; -SDLKey vkbd_key=(SDLKey)0; -SDLKey vkbd_button2=(SDLKey)0; +int vkbd_key=-1234567; +SDLKey vkbd_button2=(SDLKey)0; //not implemented int vkbd_keysave=-1234567; #if !defined (DREAMCAST) && !defined (GP2X) && !defined (PSP) && !defined (GIZMONDO) @@ -19,15 +28,21 @@ int vkbd_keysave=-1234567; int vkbd_init(void) { return 0; } void vkbd_init_button2(void) { } void vkbd_quit(void) { } -SDLKey vkbd_process(void) { return (SDLKey)0; } - +int vkbd_process(void) { return -1234567; } +void vkbd_displace_up(void) { }; +void vkbd_displace_down(void) { }; #else #define MAX_KEY 110 extern SDL_Surface *prSDLScreen; -static SDL_Surface *ksur, *vkey[MAX_KEY]; +static SDL_Surface *ksur; +#ifdef LARGEKEYBOARD // The new larger keyboard uses transparency and supports shift. +static SDL_Surface *ksurShift; +#else +static SDL_Surface *vkey[MAX_KEY]; +#endif static int vkbd_actual=0, vkbd_color=0; @@ -38,9 +53,16 @@ extern char launchDir [256]; typedef struct{ SDL_Rect rect; unsigned char up,down,left,right; - SDLKey key; +#ifdef LARGEKEYBOARD + int key; +#else + SDLKey key; //Amiga Keycode, defined in keyboard.h, some use shift etc. +#endif } t_vkbd_rect; +//Keyboard parameters +#ifndef LARGEKEYBOARD +//Small Keyboard this is the old one from Pandora version based on SDL keys static t_vkbd_rect vkbd_rect[]= { {{ 8, 3, 6, 6 },89,10, 9, 1, SDLK_F1}, // 0 @@ -143,6 +165,111 @@ static t_vkbd_rect vkbd_rect[]= {{131,34,12, 5 },86,28,91,93, SDLK_KP0}, // 92 {{145,34, 6, 5 },87,29,92,88, SDLK_KP_PERIOD}, // 93 }; +#else +//This is the new keyboard, based directly on amiga-side keys +//last four numbers: next keys in up,down,left,right directions +static t_vkbd_rect vkbd_rect[]= +{ + {{ 1, 1, 29, 11 },85,17,16, 1, AK_ESC}, // 0, row 1 start + {{ 31, 1, 14, 11 },86,18, 0, 2, AK_F1}, // 1 + {{ 46, 1, 14, 11 },87,19, 1, 3, AK_F2}, // 2 + {{ 61, 1, 14, 11 },87,20, 2, 4, AK_F3}, // 3 + {{ 76, 1, 14, 11 },87,21, 3, 5, AK_F4}, // 4 + {{ 91, 1, 14, 11 },87,22, 4, 6, AK_F5}, // 5 + {{106, 1, 14, 11 },87,23, 5, 7, AK_F6}, // 6 + {{121, 1, 14, 11 },87,24, 6, 8, AK_F7}, // 7 + {{136, 1, 14, 11 },87,25, 7, 9, AK_F8}, // 8 + {{151, 1, 14, 11 },87,26, 8,10, AK_F9}, // 9 + {{166, 1, 14, 11 },87,27, 9,11, AK_F10}, // 10 + {{181, 1, 29, 11 },88,28,10,12, AK_DEL}, // 11 + {{211, 1, 29, 11 },90,30,11,13, AK_HELP}, // 12 + {{241, 1, 14, 11 },92,32,12,14, AK_NPLPAREN}, // 13 + {{256, 1, 14, 11 },69,33,13,15, AK_NPRPAREN}, // 14 + {{271, 1, 13, 11 },69,34,14,16, AK_NPDIV}, // 15 + {{286, 1, 13, 11 },69,35,15,0, AK_NPMUL}, // 16 + + {{ 1, 13, 29, 11 }, 0,36,35,18, AK_QUOTE}, // 17, row 2 start + {{ 31, 13, 14, 11 }, 1,37,17,19, AK_1}, // 18 + {{ 46, 13, 14, 11 }, 2,38,18,20, AK_2}, // 19 + {{ 61, 13, 14, 11 }, 3,39,19,21, AK_3}, // 20 + {{ 76, 13, 14, 11 }, 4,40,20,22, AK_4}, // 21 + {{ 91, 13, 14, 11 }, 5,41,21,23, AK_5}, // 22 + {{106, 13, 14, 11 }, 6,42,22,24, AK_6}, // 23 + {{121, 13, 14, 11 }, 7,43,23,25, AK_7}, // 24 + {{136, 13, 14, 11 }, 8,44,24,26, AK_8}, // 25 + {{151, 13, 14, 11 }, 9,45,25,27, AK_9}, // 26 + {{166, 13, 14, 11 },10,46,26,28, AK_0}, // 27 + {{181, 13, 14, 11 },11,47,27,29, AK_MINUS}, // 28 + {{196, 13, 14, 11 },11,48,28,30, AK_EQUAL}, // 29 + {{211, 13, 14, 11 },12,49,29,31, AK_BACKSLASH}, // 30 + {{226, 13, 14, 11 },12,49,30,32, AK_BS}, // 31 + {{241, 13, 14, 11 },13,50,31,33, AK_NP7}, // 32 + {{256, 13, 14, 11 },14,51,32,34, AK_NP8}, // 33 + {{271, 13, 13, 11 },15,52,33,35, AK_NP9}, // 34 + {{285, 13, 13, 11 },16,53,34,17, AK_NPSUB}, // 35 + + {{ 1, 25, 29, 11 }, 17,54,53,37, AK_TAB}, // 36, row 3 start + {{ 31, 25, 14, 11 }, 18,55,36,38, AK_Q}, // 37 + {{ 46, 25, 14, 11 }, 19,56,37,39, AK_W}, // 38 + {{ 61, 25, 14, 11 }, 20,57,38,40, AK_E}, // 39 + {{ 76, 25, 14, 11 }, 21,58,39,41, AK_R}, // 40 + {{ 91, 25, 14, 11 }, 22,59,40,42, AK_T}, // 41 + {{106, 25, 14, 11 }, 23,60,41,43, AK_Y}, // 42 + {{121, 25, 14, 11 }, 24,61,42,44, AK_U}, // 43 + {{136, 25, 14, 11 }, 25,62,43,45, AK_I}, // 44 + {{151, 25, 14, 11 }, 26,63,44,46, AK_O}, // 45 + {{166, 25, 14, 11 }, 27,64,45,47, AK_P}, // 46 + {{181, 25, 14, 11 }, 28,65,46,48, AK_LBRACKET}, // 47 + {{196, 25, 14, 11 }, 29,49,47,49, AK_RBRACKET}, // 48 + {{211, 25, 29, 23 }, 30,81,48,50, AK_RET}, // 49 + {{241, 25, 14, 11 }, 32,66,49,51, AK_NP4}, // 50 + {{256, 25, 14, 11 }, 33,67,50,52, AK_NP5}, // 51 + {{271, 25, 13, 11 }, 34,68,51,53, AK_NP6}, // 52 + {{285, 25, 13, 11 }, 35,69,52,36, AK_NPADD}, // 53 + + {{ 1, 37, 29, 11 }, 36,70,69,55, AK_CTRL}, // 54, row 4 start + {{ 31, 37, 14, 11 }, 37,70,54,56, AK_A}, // 55 + {{ 46, 37, 14, 11 }, 38,71,55,57, AK_S}, // 56 + {{ 61, 37, 14, 11 }, 39,72,56,58, AK_D}, // 57 + {{ 76, 37, 14, 11 }, 40,73,57,59, AK_F}, // 58 + {{ 91, 37, 14, 11 }, 41,74,58,60, AK_G}, // 59 + {{106, 37, 14, 11 }, 42,75,59,61, AK_H}, // 60 + {{121, 37, 14, 11 }, 43,76,60,62, AK_J}, // 61 + {{136, 37, 14, 11 }, 44,77,61,63, AK_K}, // 62 + {{151, 37, 14, 11 }, 45,78,62,64, AK_L}, // 63 + {{166, 37, 14, 11 }, 46,79,63,65, AK_SEMICOLON}, // 64 + {{181, 37, 14, 11 }, 47,80,64,49, AK_BACKQUOTE}, // 65 + {{241, 37, 14, 11 }, 50,83,49,67, AK_NP1}, // 66 + {{256, 37, 14, 11 }, 51,83,66,68, AK_NP2}, // 67 + {{271, 37, 13, 11 }, 52,84,67,69, AK_NP3}, // 68 + {{285, 37, 13, 34 }, 53,16,68,54, AK_ENT}, // 69 + + {{ 1, 49, 44, 11 }, 54,85,84,71, AK_LSH}, // 70, row 5 start + {{ 46, 49, 14, 11 }, 56,87,70,72, AK_Z}, // 71 + {{ 61, 49, 14, 11 }, 57,87,71,73, AK_X}, // 72 + {{ 76, 49, 14, 11 }, 58,87,72,74, AK_C}, // 73 + {{ 91, 49, 14, 11 }, 59,87,73,75, AK_V}, // 74 + {{106, 49, 14, 11 }, 60,87,74,76, AK_B}, // 75 + {{121, 49, 14, 11 }, 61,87,75,77, AK_N}, // 76 + {{136, 49, 14, 11 }, 62,87,76,78, AK_M}, // 77 + {{151, 49, 14, 11 }, 63,87,77,79, AK_COMMA}, // 78 + {{166, 49, 14, 11 }, 64,87,78,80, AK_PERIOD}, // 79 + {{181, 49, 14, 11 }, 65,88,79,81, AK_SLASH}, // 80 + {{196, 49, 29, 11 }, 49,89,80,82, AK_RSH}, // 81 + {{226, 49, 14, 11 }, 49,91,81,83, AK_UP}, // 82 + {{241, 49, 27, 11 }, 66,92,82,84, AK_NP0}, // 83 + {{271, 49, 13, 11 }, 67,69,83,69, AK_NPDEL}, // 84 + + {{ 1, 61, 29, 11 }, 70,0,69,86, AK_LALT}, // 85, row 6 start + {{ 31, 61, 14, 11 }, 70,1,85,87, AK_LAMI}, // 86 + {{ 46, 61,134, 11 }, 71,2,86,88, AK_SPC}, // 87 + {{181, 61, 14, 11 }, 80,11,87,89, AK_RAMI}, // 88 + {{196, 61, 14, 11 }, 81,11,88,90, AK_RALT}, // 89 + {{211, 61, 14, 11 }, 81,12,89,91, AK_LF}, // 90 + {{226, 61, 14, 11 }, 82,12,90,92, AK_DN}, // 91 + {{241, 61, 14, 11 }, 83,13,91,69, AK_RT}, // 92 +}; +#endif void vkbd_init_button2(void) { @@ -153,24 +280,29 @@ int vkbd_init(void) { int i; char tmpchar[256]; + char vkbdFileName[256]; +#ifdef LARGEKEYBOARD + snprintf(vkbdFileName, 256, "vkbdLarge.bmp"); +#else + snprintf(vkbdFileName, 256, "vkbd.bmp"); +#endif + #ifdef __PSP2__ -// if (!vkbd_screen) -// { //vkbd_screen=SDL_CreateRGBSurface(prSDLScreen->flags,prSDLScreen->w,prSDLScreen->h,prSDLScreen->format->BitsPerPixel,prSDLScreen->format->Rmask,prSDLScreen->format->Gmask,prSDLScreen->format->Bmask,prSDLScreen->format->Amask); -// } - SDL_Surface *tmp=SDL_LoadBMP(DATA_PREFIX "vkbd.bmp"); -// SDL_Surface *tmp=SDL_LoadBMP("app0:/data/vkbd.bmp"); + snprintf(tmpchar, 256, "%s%s", DATA_PREFIX, vkbdFileName); #else #ifdef GP2X - snprintf(tmpchar, 256, "%s/data/vkbd.bmp", launchDir); - SDL_Surface *tmp = SDL_LoadBMP(tmpchar); + snprintf(tmpchar, 256, "%s/data/%s", launchDir, vkbdFileName); #else #ifdef GIZMONDO - SDL_Surface *tmp = SDL_LoadBMP("\\SD Card\\uae4all\\data\\vkbd.bmp"); + snprintf(tmpchar, 256, "%s", "\\SD Card\\uae4all\\data\\%s",vkbdFileName); #else - SDL_Surface *tmp=SDL_LoadBMP(DATA_PREFIX "vkbd.bmp"); + snprintf(tmpchar, 256, "%s%s", DATA_PREFIX, vkbdFileName); #endif #endif #endif //__PSP2__ + + SDL_Surface *tmp = SDL_LoadBMP(tmpchar); + if (tmp==NULL) { printf("Virtual Keyboard Bitmap Error: %s\n",SDL_GetError()); @@ -178,6 +310,39 @@ int vkbd_init(void) } ksur=SDL_DisplayFormat(tmp); SDL_FreeSurface(tmp); + +//for large keyboard, use another image for shifted keys, and transparency +#ifdef LARGEKEYBOARD + char vkbdShiftFileName[256]; + snprintf(vkbdShiftFileName, 256, "vkbdLargeShift.bmp"); +#ifdef __PSP2__ + snprintf(tmpchar, 256, "%s%s", DATA_PREFIX, vkbdShiftFileName); +#else +#ifdef GP2X + snprintf(tmpchar, 256, "%s/data/%s", launchDir, vkbdShiftFileName); +#else +#ifdef GIZMONDO + snprintf(tmpchar, 256, "%s", "\\SD Card\\uae4all\\data\\%s",vkbdShiftFileName); +#else + snprintf(tmpchar, 256, "%s%s", DATA_PREFIX, vkbdShiftFileName); +#endif +#endif +#endif //__PSP2__ + + tmp = SDL_LoadBMP(tmpchar); + + if (tmp==NULL) + { + printf("Virtual Keyboard Bitmap Error: %s\n",SDL_GetError()); + return -1; + } + ksurShift=SDL_DisplayFormat(tmp); + SDL_FreeSurface(tmp); + + SDL_SetAlpha(ksur, SDL_SRCALPHA | SDL_RLEACCEL, 125); + SDL_SetAlpha(ksurShift, SDL_SRCALPHA | SDL_RLEACCEL, 125); +#else //LARGEKEYBOARD +//if using the small keyboard, load in the zoomed keys instead for(i=0;iw-ksur->w)/2; + vkbd_y=prSDLScreen->h-ksur->h; +#else + vkbd_x=VKBD_X; + vkbd_y=(prSDLScreen->h-ksur->h); #endif vkbd_mode=0; vkbd_move=0; - vkbd_key=(SDLKey)0; + vkbd_key=0; vkbd_button2=(SDLKey)0; vkbd_keysave=-1234567; return 0; @@ -216,23 +392,56 @@ int vkbd_init(void) void vkbd_quit(void) { int i; +#ifdef LARGEKEYBOARD + SDL_FreeSurface(ksurShift); +#else for(i=0;ih-40; + + if (vkbd_y>prSDLScreen->h-ksur->h) + vkbd_y=prSDLScreen->h-ksur->h; + + r.x=vkbd_x; + r.y=vkbd_y; r.w=ksur->w; r.h=ksur->h; + +#ifdef LARGEKEYBOARD + if (!vkbd_shift) + SDL_BlitSurface(ksur,NULL,prSDLScreen,&r); + else + SDL_BlitSurface(ksurShift,NULL,prSDLScreen,&r); +#else SDL_BlitSurface(ksur,NULL,prSDLScreen,&r); +#endif } -SDLKey vkbd_process(void) +void vkbd_displace_up(void) +{ + if (vkbd_y>3) + vkbd_y-=4; + else + vkbd_y=0; +} + +void vkbd_displace_down(void) +{ + if (vkbd_yh-ksur->h-3) + vkbd_y+=4; + else + vkbd_y=prSDLScreen->h-ksur->h; +} + +int vkbd_process(void) { static Uint32 last_time=0; Uint32 now=SDL_GetTicks(); @@ -246,15 +455,30 @@ SDLKey vkbd_process(void) if (vkbd_move&VKBD_BUTTON) { vkbd_move=0; - return vkbd_rect[vkbd_actual].key; +#ifndef LARGEKEYBOARD //the old small keyboard struct contains SDL codes + SDL_keysym ks; + ks.sym=vkbd_rect[vkbd_actual].key; + return keycode2amiga(&ks); +#else //the large keyboard struct contains Amiga key codes + int amigaKeyCode=vkbd_rect[vkbd_actual].key; + if ((amigaKeyCode == AK_LSH || amigaKeyCode == AK_RSH) && vkbd_can_switch_shift) + { + vkbd_shift=!vkbd_shift; + vkbd_can_switch_shift=0; + amigaKeyCode=-1234567; //shift is handled as part of the other keypress + } + return amigaKeyCode; +#endif } + /* else - if (vkbd_move&VKBD_BUTTON2) + if (vkbd_move&VKBD_BUTTON2) // not implemented yet { vkbd_move=0; vkbd_button2=vkbd_rect[vkbd_actual].key; return (SDLKey)0; } + */ if (canmove) { last_time=now; @@ -267,14 +491,22 @@ SDLKey vkbd_process(void) else if (vkbd_move&VKBD_DOWN) vkbd_actual=vkbd_rect[vkbd_actual].down; } - r.x=VKBD_X+vkbd_rect[vkbd_actual].rect.x; - r.y=prSDLScreen->h-40+vkbd_rect[vkbd_actual].rect.y; + r.x=vkbd_x+vkbd_rect[vkbd_actual].rect.x; + r.y=vkbd_y+vkbd_rect[vkbd_actual].rect.y; r.w=vkbd_rect[vkbd_actual].rect.w; r.h=vkbd_rect[vkbd_actual].rect.h; - - SDL_FillRect(prSDLScreen,&r,vkbd_color); - vkbd_color = ~vkbd_color; - + if (!vkbd_just_blinked) + { + SDL_FillRect(prSDLScreen,&r,vkbd_color); + vkbd_just_blinked=1; + //vkbd_color = ~vkbd_color; + } + else + { + vkbd_just_blinked=0; + } +//Draw the zoomed in key preview, only do this when using the small keyboard +#ifndef LARGEKEYBOARD #ifndef VKBD_ALWAYS if (vkbd_move && vkey[vkbd_actual]!=NULL) { @@ -287,6 +519,7 @@ SDLKey vkbd_process(void) #ifndef VKBD_ALWAYS } #endif - return (SDLKey)0; +#endif //!LARGEKEYBOARD + return -1234567; //nothing on the vkbd was pressed } #endif diff --git a/src/vkbd/vkbd.h b/src/vkbd/vkbd.h index d6f7b62..7cbc058 100755 --- a/src/vkbd/vkbd.h +++ b/src/vkbd/vkbd.h @@ -13,12 +13,16 @@ int vkbd_init(void); void vkbd_quit(void); void vkbd_redraw(void); -SDLKey vkbd_process(void); +int vkbd_process(void); void vkbd_init_button2(void); +void vkbd_displace_up(void); +void vkbd_displace_down(void); extern int vkbd_mode; extern int vkbd_move; -extern SDLKey vkbd_key; +extern int vkbd_shift; +extern int vkbd_can_switch_shift; +extern int vkbd_key; extern int vkbd_keysave; extern SDLKey vkbd_button2; extern int keymappings[10][3];