Virtual keyboard real time key pressed

This commit is contained in:
fabio.olimpieri 2013-03-09 14:24:01 +00:00
parent 66f4481760
commit f945b1c549
4 changed files with 47 additions and 16 deletions

View File

@ -53,6 +53,7 @@ extern FILE *fdebug;
static SDL_Surface *image_kbd, *image_sym, *image_caps,*image_kbd_small, *image_sym_small, *image_caps_small, *tmp_surface ; static SDL_Surface *image_kbd, *image_sym, *image_caps,*image_kbd_small, *image_sym_small, *image_caps_small, *tmp_surface ;
static int vkb_is_init; static int vkb_is_init;
static int key_code;
extern struct computer ordenador; extern struct computer ordenador;
void clean_screen(); void clean_screen();
@ -202,7 +203,6 @@ struct virtkey* get_key()
void virtkey_ir_run(void) void virtkey_ir_run(void)
{ {
int key_code;
int x,y,xm, ym, i=0; int x,y,xm, ym, i=0;
int key_w = 50/RATIO; int key_w = 50/RATIO;
int key_h = 64/RATIO; int key_h = 64/RATIO;
@ -225,6 +225,13 @@ void virtkey_ir_run(void)
(SDL_JoystickGetButton(joy, 10) && !joy_bottons_last[3])) /* CB */ (SDL_JoystickGetButton(joy, 10) && !joy_bottons_last[3])) /* CB */
key_sel = KEY_SELECT; key_sel = KEY_SELECT;
if ((!SDL_JoystickGetButton(joy, 0) && joy_bottons_last[0]) || /* A */
(!SDL_JoystickGetButton(joy, 3) && joy_bottons_last[1]) || /* 2 */
(!SDL_JoystickGetButton(joy, 9) && joy_bottons_last[2]) || /* CA */
(!SDL_JoystickGetButton(joy, 10) && joy_bottons_last[3])) /* CB */
key_sel = KEY_DESELECT;
joy_bottons_last[0]=SDL_JoystickGetButton(joy, 0) ; /* A */ joy_bottons_last[0]=SDL_JoystickGetButton(joy, 0) ; /* A */
joy_bottons_last[1] =SDL_JoystickGetButton(joy, 3) ; /* 2 */ joy_bottons_last[1] =SDL_JoystickGetButton(joy, 3) ; /* 2 */
joy_bottons_last[2] =SDL_JoystickGetButton(joy, 9) ; /* CA */ joy_bottons_last[2] =SDL_JoystickGetButton(joy, 9) ; /* CA */
@ -248,24 +255,22 @@ void virtkey_ir_run(void)
virtkey_t *key = &keys[i]; virtkey_t *key = &keys[i];
if ((key->sdl_code == SDLK_LSHIFT) && !keys[3 * KEY_COLS + 8 ].is_on) if ((key->sdl_code == SDLK_LSHIFT) && !keys[3 * KEY_COLS + 8 ].is_on)
keys[3 * KEY_COLS + 0 ].is_on = !keys[3 * KEY_COLS + 0 ].is_on; //Caps Shit keys[3 * KEY_COLS + 0 ].is_on = !keys[3 * KEY_COLS + 0 ].is_on; //Caps Shit
else if ((key->sdl_code == SDLK_LCTRL) && !keys[3 * KEY_COLS + 0 ].is_on) else if ((key->sdl_code == SDLK_LCTRL) && !keys[3 * KEY_COLS + 0 ].is_on)
keys[3 * KEY_COLS + 8 ].is_on = !keys[3 * KEY_COLS + 8 ].is_on; //Sym Shift keys[3 * KEY_COLS + 8 ].is_on = !keys[3 * KEY_COLS + 8 ].is_on; //Sym Shift
else { else {
key->caps_on = keys[3 * KEY_COLS + 0 ].is_on; key->caps_on = keys[3 * KEY_COLS + 0 ].is_on;
key->sym_on = keys[3 * KEY_COLS + 8 ].is_on; key->sym_on = keys[3 * KEY_COLS + 8 ].is_on;
keys[3 * KEY_COLS + 0 ].is_on = 0; //Caps Shit
keys[3 * KEY_COLS + 8 ].is_on = 0; //Sym Shift
} }
key_code = key->sdl_code; key_code = key->sdl_code;
ordenador.kbd_buffer_pointer=1; if ((key_code!=SDLK_LSHIFT)&&(key_code!=SDLK_LCTRL))
countdown_buffer=8; {
ordenador.keyboard_buffer[0][1]= key_code; if (key->caps_on) joybutton_matrix[0][SDLK_LSHIFT]=1;
if (key->caps_on) ordenador.keyboard_buffer[1][1]= SDLK_LSHIFT; else if (key->sym_on) joybutton_matrix[0][SDLK_LCTRL]=1;
else if (key->sym_on) ordenador.keyboard_buffer[1][1]= SDLK_LCTRL; joybutton_matrix[0][key_code]=1;
else ordenador.keyboard_buffer[1][1]= 0; }
printf ("Push Event: keycode %d\n", key_code); printf ("Push Event: keycode %d\n", key_code);
@ -273,7 +278,25 @@ void virtkey_ir_run(void)
draw_vk(); draw_vk();
SDL_ShowCursor(SDL_ENABLE); SDL_ShowCursor(SDL_ENABLE);
} }
key_sel=0; }
if (key_sel==KEY_DESELECT)
{
joybutton_matrix[0][key_code]=0;
joybutton_matrix[0][SDLK_LSHIFT]=0;
joybutton_matrix[0][SDLK_LCTRL]=0;
if ((key_code!=SDLK_LSHIFT)&&(key_code!=SDLK_LCTRL))
{
keys[3 * KEY_COLS + 0 ].is_on = 0; //Caps Shit
keys[3 * KEY_COLS + 8 ].is_on = 0; //Sym Shift
}
SDL_ShowCursor(SDL_DISABLE);
draw_vk();
SDL_ShowCursor(SDL_ENABLE);
key_code=0;
} }
} }
@ -290,4 +313,11 @@ void virtkey_ir_deactivate(void)
{ {
ordenador.vk_is_active=0; ordenador.vk_is_active=0;
SDL_ShowCursor(SDL_DISABLE); SDL_ShowCursor(SDL_DISABLE);
joybutton_matrix[0][key_code]=0;
joybutton_matrix[0][SDLK_LSHIFT]=0;
joybutton_matrix[0][SDLK_LCTRL]=0;
keys[3 * KEY_COLS + 0 ].is_on = 0; //Caps Shit
keys[3 * KEY_COLS + 8 ].is_on = 0; //Sym Shift
key_code=0;
} }

View File

@ -1109,7 +1109,6 @@ inline void read_keyboard () {
enum joystate_x {JOY_CENTER_X, JOY_LEFT, JOY_RIGHT}; enum joystate_x {JOY_CENTER_X, JOY_LEFT, JOY_RIGHT};
enum joystate_y {JOY_CENTER_Y, JOY_UP, JOY_DOWN}; enum joystate_y {JOY_CENTER_Y, JOY_UP, JOY_DOWN};
int joy_axis_x[2],joy_axis_y[2], joy_n, joybutton_n; int joy_axis_x[2],joy_axis_y[2], joy_n, joybutton_n;
static unsigned char joybutton_matrix[2][322];
unsigned char status_hat[2]; unsigned char status_hat[2];
int fire_on[2]; int fire_on[2];
fire_on[0]=0; fire_on[0]=0;

View File

@ -37,6 +37,7 @@ enum taptypes {TAP_TAP, TAP_TZX};
enum block_type {NOBLOCK, PROG, VAR, DATA}; enum block_type {NOBLOCK, PROG, VAR, DATA};
int countdown_buffer; int countdown_buffer;
unsigned char joybutton_matrix[2][322];
struct computer { struct computer {

View File

@ -38,6 +38,7 @@
#define KEY_PAGEDOWN 64 #define KEY_PAGEDOWN 64
#define KEY_PAGEUP 128 #define KEY_PAGEUP 128
#define KEY_HELP 256 #define KEY_HELP 256
#define KEY_DESELECT 512
int FULL_DISPLAY_X; //640 int FULL_DISPLAY_X; //640
int FULL_DISPLAY_Y; //480 int FULL_DISPLAY_Y; //480