Clean up of old onscreen keyboard code, mostly passed to onscreen_keyboard.c

This commit is contained in:
Pere Pujal i Carabantes 2011-09-12 22:59:19 +00:00
parent c65bf29874
commit d34f015d83

View file

@ -824,7 +824,7 @@ static SDL_Surface *label;
static SDL_Surface *save_canvas;
static SDL_Surface *canvas_back;
static SDL_Surface *img_starter, *img_starter_bkgd;
static SDL_Surface *key_board;
/* Update a rect. based on two x/y coords (not necessarly in order): */
static void update_screen(int x1, int y1, int x2, int y2)
{
@ -1109,7 +1109,7 @@ static int starter_personal;
static int template_personal;
static int starter_modified;
static Uint8 canvas_color_r, canvas_color_g, canvas_color_b, key_board_color_r, key_board_color_g, key_board_color_b;
static Uint8 canvas_color_r, canvas_color_g, canvas_color_b;
static Uint8 * touched;
static int shape_radius;
@ -2077,37 +2077,7 @@ enum
SHAPE_TOOL_MODE_DONE
};
void keybd_prepare(void);
void keybd_finish(void);
void apply_surface (int x, int y, SDL_Surface *source, SDL_Surface *destination, SDL_Rect *clip);
void drawkeybd(void );
int regionhit(int x, int y, int w, int h);
void button(int id, int x, int y);
void on_screen_keyboardd(void );
SDL_Surface *messager = NULL;
#define initial_x (2 * button_w + 80)
#define key_width 24
#define key_height 24
TTF_Font *fontyy = NULL;
SDL_Color textcolory = { 0, 0, 0 ,0};
const char *keybd_array[] = {"","Esc", " `", " 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9"," 0"," -"," =","Back",
"Caps"," a"," b"," c"," d"," e"," f"," g"," h"," i"," j"," k"," l"," m"," n"," [", " ]"," \\","Ret",
" o"," p"," q"," r"," s"," t"," u"," v"," w"," x"," y"," z"," ,", " ."," /"," ;"," '\'","Alt","Shift"};
struct UIState
{
int mousex;
int mousey;
int mousedown;
int hotitem;
int activeitem;
}
uistate = {0,0,0,0,0};
int brushflag,xnew,ynew,eraflag,lineflag, magicflag, keybd_flag, keybd_position, keyglobal, initial_y, gen_key_flag, ide, activeflag, old_x, old_y;
int cur_thing, shift_flag, caps_flag, enter_flag;
@ -3269,10 +3239,6 @@ static void mainloop(void)
event.button.button <= 3)
{
if (keybd_flag == 1)
{
uistate.mousedown = 1;
}
if (HIT(r_tools))
{
@ -5052,11 +5018,6 @@ static void mainloop(void)
/* printf("Killing scrolling\n"); */
}
if (keybd_flag == 1)
{
uistate.mousedown = 0;
}
if (button_down || emulate_button_pressed)
{
if (cur_tool == TOOL_BRUSH)
@ -5214,21 +5175,7 @@ static void mainloop(void)
oldpos_x = event.motion.x;
oldpos_y = event.motion.y;
if (keybd_flag == 1)
{
// uistate.mousedown = 1;
uistate.mousex = event.motion.x;
uistate.mousey = event.motion.y;
}
if ((uistate.mousex > initial_x) && (uistate.mousex < initial_x + key_width * 19) && keybd_flag == 1 && ((uistate.mousey > initial_y) && (uistate.mousey < (initial_y + (key_height * 3)))))
{
keyglobal = 1;
}
else
{
keyglobal = 0;
}
/* FIXME: Is doing this every event too intensive? */
/* Should I check current cursor first? */
@ -5442,10 +5389,6 @@ static void mainloop(void)
if (button_down || emulate_button_pressed)
{
if (keybd_flag == 1)
{
uistate.mousedown = 0;
}
if (cur_tool == TOOL_BRUSH)
{
/* Pushing button and moving: Draw with the brush: */
@ -23326,764 +23269,7 @@ int main(int argc, char *argv[])
return 0;
}
// Check whether current mouse position is within a rectangle
int regionhit(int x, int y, int w, int h)
{
if (uistate.mousex < x ||
uistate.mousey < y ||
uistate.mousex >= x + w ||
uistate.mousey >= y + h)
return 0;
return 1;
}
void button(int id, int x, int y)
{
SDL_Rect dest,desti;
SDL_Surface *tmp_imgup;
SDL_Event event;
dest.x = x;
dest.y = y;
// Check whether the button should be hot
if (regionhit(x, y, 24, 24))
{
uistate.hotitem = id;
if (uistate.activeitem == 0 && uistate.mousedown)
{
uistate.activeitem = id;
activeflag = 1;
}
}
// Render button
SDL_BlitSurface(img_btnsm_up, NULL, screen, &dest);
if (caps_flag % 2 != 0)
{
desti.x = initial_x;
desti.y = initial_y + key_height;
SDL_BlitSurface(img_btnsm_down, NULL, screen, &desti);
}
if (uistate.hotitem == id)
{
if (uistate.activeitem == id)
{
// Button is both 'hot' and 'active'
if (activeflag == 1)
{
ide = id;
gen_key_flag = 1;
activeflag = 0;
uistate.activeitem = 0;
}
SDL_BlitSurface(img_btnsm_down, NULL, screen, &dest);
}
else
{
// Button is merely 'hot'
SDL_BlitSurface(img_btnsm_down, NULL, screen, &dest);
}
}
else
{
// button is not hot, but it may be active
SDL_BlitSurface(img_btnsm_up, NULL, screen, &dest);
}
if (gen_key_flag == 1)
{
int i,j;
gen_key_flag = 0;
enter_flag = 0;
SDL_EnableUNICODE(1);
// printf("\n entered here %d th time \n", k);
// k++;
if (ide == 1)
{
event.key.keysym.sym = SDLK_ESCAPE;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 27;
}
else if (ide == 2)
{
event.key.keysym.sym = SDLK_BACKQUOTE;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 96;
}
else if (ide == 3)
{
event.key.keysym.sym = SDLK_1;
if (shift_flag % 2 != 0)
event.key.keysym.mod = KMOD_RSHIFT;
else
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 49;
}
else if (ide == 4)
{
event.key.keysym.sym = SDLK_2;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 50;
}
else if (ide == 5)
{
event.key.keysym.sym = SDLK_3;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 51;
}
else if (ide == 6)
{
event.key.keysym.sym = SDLK_4;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 52;
}
else if (ide == 7)
{
event.key.keysym.sym = SDLK_5;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 53;
}
else if (ide == 8)
{
event.key.keysym.sym = SDLK_6;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 54;
}
else if (ide == 9)
{
event.key.keysym.sym = SDLK_7;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 55;
}
else if (ide == 10)
{
event.key.keysym.sym = SDLK_8;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 56;
}
else if (ide == 11)
{
event.key.keysym.sym = SDLK_9;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 57;
}
else if (ide == 12)
{
event.key.keysym.sym = SDLK_0;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 48;
}
else if (ide == 13)
{
event.key.keysym.sym = SDLK_MINUS;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 45;
}
else if (ide == 14)
{
event.key.keysym.sym = SDLK_EQUALS;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 61;
}
else if (ide == 15)
{
event.key.keysym.sym = SDLK_BACKSPACE;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 8;
}
else if (ide == 16)
{
caps_flag++;
enter_flag = 1;
}
else if (ide == 17)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_a;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 65;
}
else
{
event.key.keysym.sym = SDLK_a;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'a';
}
}
else if (ide == 18)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_b;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 66;
}
else
{
event.key.keysym.sym = SDLK_b;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'b';
}
}
else if (ide == 19)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_c;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 67;
}
else
{
event.key.keysym.sym = SDLK_c;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'c';
}
}
else if (ide == 20)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_d;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 68;
}
else
{
event.key.keysym.sym = SDLK_d;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'d';
}
}
else if (ide == 21)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_e;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 69;
}
else
{
event.key.keysym.sym = SDLK_e;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'e';
}
}
else if (ide == 22)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_f;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 70;
}
else
{
event.key.keysym.sym = SDLK_f;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'f';
}
}
else if (ide == 23)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_g;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 71;
}
else
{
event.key.keysym.sym = SDLK_g;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'g';
}
}
else if (ide == 24)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_h;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 72;
}
else
{
event.key.keysym.sym = SDLK_h;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'h';
}
}
else if (ide == 25)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_i;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 73;
}
else
{
event.key.keysym.sym = SDLK_i;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'i';
}
}
else if (ide == 26)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_j;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 74;
}
else
{
event.key.keysym.sym = SDLK_j;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'j';
}
}
else if (ide == 27)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_k;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 75;
}
else
{
event.key.keysym.sym = SDLK_k;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'k';
}
}
else if (ide == 28)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_l;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 76;
}
else
{
event.key.keysym.sym = SDLK_l;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'l';
}
}
else if (ide == 29)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_m;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 77;
}
else
{
event.key.keysym.sym = SDLK_m;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'m';
}
}
else if (ide == 30)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_n;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 78;
}
else
{
event.key.keysym.sym = SDLK_n;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'n';
}
}
else if (ide == 31)
{
event.key.keysym.sym = SDLK_LEFTBRACKET;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 91;
}
else if (ide == 32)
{
event.key.keysym.sym = SDLK_RIGHTBRACKET;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 93;
}
else if (ide == 33)
{
event.key.keysym.sym = SDLK_BACKSLASH;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 92;
}
else if (ide == 34)
{
event.key.keysym.sym = SDLK_RETURN;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 13;
}
else if (ide == 35)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_o;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 79;
}
else
{
event.key.keysym.sym = SDLK_o;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'o';
}
}
else if (ide == 36)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_p;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 80;
}
else
{
event.key.keysym.sym = SDLK_p;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'p';
}
}
else if (ide == 37)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_q;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 81;
}
else
{
event.key.keysym.sym = SDLK_q;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'q';
}
}
else if (ide == 38)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_r;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 82;
}
else
{
event.key.keysym.sym = SDLK_r;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'r';
}
}
else if (ide == 39)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_s;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 83;
}
else
{
event.key.keysym.sym = SDLK_s;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'s';
}
}
else if (ide == 40)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_t;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 84;
}
else
{
event.key.keysym.sym = SDLK_t;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'t';
}
}
else if (ide == 41)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_u;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 85;
}
else
{
event.key.keysym.sym = SDLK_u;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'u';
}
}
else if (ide == 42)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_v;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 86;
}
else
{
event.key.keysym.sym = SDLK_v;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'v';
}
}
else if (ide == 43)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_w;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 87;
}
else
{
event.key.keysym.sym = SDLK_w;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'w';
}
}
else if (ide == 44)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_x;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 88;
}
else
{
event.key.keysym.sym = SDLK_x;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'x';
}
}
else if (ide == 45)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_y;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 89;
}
else
{
event.key.keysym.sym = SDLK_y;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'y';
// event.key.keysym.unicode = 0x1008ff79;
}
}
else if (ide == 46)
{
if (caps_flag % 2 != 0)
{
event.key.keysym.sym = SDLK_z;
event.key.keysym.mod = KMOD_CAPS;
event.key.keysym.unicode = 90;
}
else
{
event.key.keysym.sym = SDLK_z;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = (Uint16)'z';
}
}
else if (ide == 47)
{
event.key.keysym.sym = SDLK_COMMA;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 44;
}
else if (ide == 48)
{
event.key.keysym.sym = SDLK_PERIOD;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 46;
}
else if (ide == 49)
{
event.key.keysym.sym = SDLK_SLASH;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 47;
}
else if (ide == 50)
{
event.key.keysym.sym = SDLK_SEMICOLON;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 59;
}
else if (ide == 51)
{
event.key.keysym.sym = SDLK_QUOTEDBL;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 34;
}
else if (ide == 52)
{
event.key.keysym.sym = SDLK_RALT;
event.key.keysym.mod = KMOD_NONE;
event.key.keysym.unicode = 307;
}
else if (ide == 53)
{
shift_flag++;
enter_flag = 1;
}
if (enter_flag == 0)
{
event.key.type=SDL_KEYDOWN;
SDL_PushEvent(&event);
event.key.type=SDL_KEYUP;
SDL_PushEvent(&event);
}
}
}
void keybd_prepare()
{
/* FIXME we should use the current font to draw the keyboard */
char * fontname;
fontname = malloc(128);
sprintf(fontname, "%s/fonts/FreeSansBold.ttf", DATA_PREFIX);
fontyy = TTF_OpenFont( fontname, 12 );
if (fontyy == NULL)
{
fprintf(stderr, "\nError: Can't open the font!\n"
"The Simple DirectMedia Layer error that occurred was:\n"
"%s\n\n", SDL_GetError());
exit(1);
}
uistate.hotitem = 0;
free(fontname);
}
void keybd_finish()
{
if (uistate.mousedown == 0)
{
uistate.activeitem = 0;
}
else
{
if (uistate.activeitem == 0)
uistate.activeitem = -1;
}
TTF_CloseFont (fontyy);
}
void apply_surface (int x, int y, SDL_Surface *source, SDL_Surface *destination, SDL_Rect *clip)
{
SDL_Rect offset;
offset.x = x;
offset.y = y;
SDL_BlitSurface( source, clip, destination, &offset );
}
void drawkeybd(void )
{
int i;
for (i = 1; i <= 15; i++)
{
messager = TTF_RenderText_Solid( fontyy, keybd_array[i], textcolory );
apply_surface( initial_x + (key_width)*(i-1), initial_y, messager, screen, NULL);
SDL_FreeSurface(messager);
}
for (i = 1; i <= 19; i++)
{
messager = TTF_RenderText_Solid( fontyy, keybd_array[i+15], textcolory );
apply_surface( initial_x + (key_width)*(i-1), initial_y + key_height, messager, screen, NULL);
SDL_FreeSurface(messager);
}
for (i = 1; i <= 19; i++)
{
messager = TTF_RenderText_Solid( fontyy, keybd_array[i+34], textcolory );
apply_surface( initial_x + (key_width)*(i-1), initial_y + (2 * key_height), messager, screen, NULL);
SDL_FreeSurface(messager);
}
}
void on_screen_keyboardd(void )
{
int i;
if (key_board != NULL)
SDL_FreeSurface(key_board);
key_board = SDL_CreateRGBSurface(canvas->flags,
key_width * 19,
key_height * 3,
canvas->format->BitsPerPixel,
canvas->format->Rmask,
canvas->format->Gmask,
canvas->format->Bmask, 0);
key_board_color_r = 255;
key_board_color_g = 255;
key_board_color_b = 255;
SDL_FillRect(key_board, NULL, SDL_MapRGB(key_board->format, 255, 255, 255));
if (keybd_position == 0)
{
initial_y = 400;
}
else
{
initial_y = 5;
}
apply_surface( initial_x, initial_y, key_board, screen, NULL);
keybd_prepare();
for (i = 1; i <= 15 ; i++)
button (i, initial_x + (key_width)*(i-1), initial_y);
for (i = 1; i <= 19; i++)
button (i+15, initial_x + (key_width)*(i-1), initial_y + key_height);
for (i = 1; i <= 19; i++)
button (i+34, initial_x + (key_width)*(i-1), initial_y + 2*key_height);
drawkeybd();
keybd_finish();
SDL_UpdateRect(screen, 0, 0, 640, 480);
/* SDL_Delay(10); */ /* FIXME: This should not be necessary! -bjk 2011.04.21 */
keybd_flag = 1;
}
/* Moves a file to the trashcan (or deletes it) */