Skip to content

Commit

Permalink
Vita: - virtual keyboard hotkeys: square: backspace, triangle: toggle…
Browse files Browse the repository at this point in the history
… shift

- virtual keyboard controls are now more responsive
  • Loading branch information
rsn8887 committed Dec 26, 2016
1 parent ae21396 commit b0c17a0
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 23 deletions.
12 changes: 10 additions & 2 deletions src/od-joy.cpp
Expand Up @@ -354,12 +354,20 @@ void read_joystick(int nr, unsigned int *dir, int *button)
else
vkbd_move &= ~VKBD_DOWN;
}

if (*button || buttonX)
#ifdef __PSP2__ //we know the Vita has many buttons available so use those
if (buttonX)
vkbd_move=VKBD_BUTTON;
else if (buttonY)
vkbd_move=VKBD_BUTTON_SHIFT;
else if (buttonA)
vkbd_move=VKBD_BUTTON_BACKSPACE;
#else // in other cases where those buttons might not be available, use the amiga joystick
if (*button || buttonX )
{
vkbd_move=VKBD_BUTTON;
*button=0;
}
#endif
else //button release, make shift toggle possible again.
{
vkbd_can_switch_shift=1;
Expand Down
67 changes: 47 additions & 20 deletions src/vkbd/vkbd.cpp
Expand Up @@ -7,17 +7,21 @@
#include "keyboard.h"


#define MIN_VKBD_TIME 100
#define VKBD_MIN_HOLDING_TIME 200
#define VKBD_MOVE_DELAY 50

extern int keycode2amiga(SDL_keysym *prKeySym);

static int vkbd_x=VKBD_X;
static int vkbd_y=VKBD_Y;
static int vkbd_transparency=255;
static int vkbd_just_blinked=0;
static Uint32 vkbd_last_press_time=0;
static Uint32 vkbd_last_move_time=0;

int vkbd_shift=0;
int vkbd_can_switch_shift=0;
int vkbd_let_go_of_direction=0;
int vkbd_mode=0;
int vkbd_move=0;
int vkbd_key=-1234567;
Expand Down Expand Up @@ -387,6 +391,8 @@ int vkbd_init(void)
#endif
vkbd_mode=0;
vkbd_move=0;
vkbd_last_press_time=0;
vkbd_last_move_time=0;
vkbd_key=-1234567;
vkbd_button2=(SDLKey)0;
vkbd_keysave=-1234567;
Expand Down Expand Up @@ -480,11 +486,9 @@ void vkbd_displace_down(void)

int vkbd_process(void)
{
static Uint32 last_time=0;
Uint32 now=SDL_GetTicks();
SDL_Rect r;
int canmove=(now-last_time>MIN_VKBD_TIME);


#ifndef VKBD_ALWAYS
if (vkbd_move)
#endif
Expand All @@ -507,27 +511,50 @@ int vkbd_process(void)
return amigaKeyCode;
#endif
}
/*
else
if (vkbd_move&VKBD_BUTTON2) // not implemented yet

if (vkbd_move&VKBD_BUTTON_BACKSPACE)
{
vkbd_move=0;
return AK_BS;
}
if (vkbd_move&VKBD_BUTTON_SHIFT)
{
vkbd_move=0;
vkbd_button2=vkbd_rect[vkbd_actual].key;
return (SDLKey)0;
if (vkbd_can_switch_shift)
{
vkbd_shift=!vkbd_shift;
vkbd_can_switch_shift=0;
}
return(-1234567); //shift is handled as part of the other keypress
}
*/
if (canmove)

if (vkbd_move&VKBD_LEFT || vkbd_move&VKBD_RIGHT || vkbd_move&VKBD_UP || vkbd_move&VKBD_DOWN)
{
last_time=now;
if (vkbd_move&VKBD_LEFT)
vkbd_actual=vkbd_rect[vkbd_actual].left;
else if (vkbd_move&VKBD_RIGHT)
vkbd_actual=vkbd_rect[vkbd_actual].right;
if (vkbd_move&VKBD_UP)
vkbd_actual=vkbd_rect[vkbd_actual].up;
else if (vkbd_move&VKBD_DOWN)
vkbd_actual=vkbd_rect[vkbd_actual].down;
if (vkbd_let_go_of_direction) //just pressing down
vkbd_last_press_time=now;
if (
(
now-vkbd_last_press_time>VKBD_MIN_HOLDING_TIME
&& now-vkbd_last_move_time>VKBD_MOVE_DELAY
)
|| vkbd_let_go_of_direction
)
{
vkbd_last_move_time=now;
if (vkbd_move&VKBD_LEFT)
vkbd_actual=vkbd_rect[vkbd_actual].left;
else if (vkbd_move&VKBD_RIGHT)
vkbd_actual=vkbd_rect[vkbd_actual].right;
if (vkbd_move&VKBD_UP)
vkbd_actual=vkbd_rect[vkbd_actual].up;
else if (vkbd_move&VKBD_DOWN)
vkbd_actual=vkbd_rect[vkbd_actual].down;
}
vkbd_let_go_of_direction=0;
}
else
vkbd_let_go_of_direction=1;

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;
Expand Down
4 changes: 3 additions & 1 deletion src/vkbd/vkbd.h
Expand Up @@ -8,7 +8,9 @@
#define VKBD_UP 4
#define VKBD_DOWN 8
#define VKBD_BUTTON 16
#define VKBD_BUTTON2 32
#define VKBD_BUTTON_BACKSPACE 32
#define VKBD_BUTTON_SHIFT 64
#define VLBD_BUTTON2 128

int vkbd_init(void);
void vkbd_quit(void);
Expand Down

0 comments on commit b0c17a0

Please sign in to comment.