Using the new rewrited of onscreen keyboard.
This commit is contained in:
parent
f14872a133
commit
a9d30e243b
1 changed files with 227 additions and 338 deletions
557
src/tuxpaint.c
557
src/tuxpaint.c
|
|
@ -457,6 +457,7 @@ extern WrapperData macosx;
|
||||||
#include "fonts.h"
|
#include "fonts.h"
|
||||||
#include "dirwalk.h"
|
#include "dirwalk.h"
|
||||||
#include "get_fname.h"
|
#include "get_fname.h"
|
||||||
|
#include "onscreen_keyboard.h"
|
||||||
|
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
#include "titles.h"
|
#include "titles.h"
|
||||||
|
|
@ -649,6 +650,7 @@ static SDL_Rect r_tcolors; /* was 96x48 @ 0,376 (title for colors, "Colors") */
|
||||||
static SDL_Rect r_ttoolopt; /* was 96x40 @ 544,0 (title for tool options) */
|
static SDL_Rect r_ttoolopt; /* was 96x40 @ 544,0 (title for tool options) */
|
||||||
static SDL_Rect r_tuxarea; /* was 640x56 */
|
static SDL_Rect r_tuxarea; /* was 640x56 */
|
||||||
static SDL_Rect r_label;
|
static SDL_Rect r_label;
|
||||||
|
static SDL_Rect old_dest;
|
||||||
|
|
||||||
static int button_w; /* was 48 */
|
static int button_w; /* was 48 */
|
||||||
static int button_h; /* was 48 */
|
static int button_h; /* was 48 */
|
||||||
|
|
@ -936,6 +938,47 @@ static int disable_label = 1;
|
||||||
static int disable_label;
|
static int disable_label;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Update the contents of a region */
|
||||||
|
static void update_canvas_ex_r(int x1, int y1, int x2, int y2, int screen_too)
|
||||||
|
{
|
||||||
|
SDL_Rect src, dest;
|
||||||
|
|
||||||
|
src.x = x1;
|
||||||
|
src.y = y1;
|
||||||
|
src.w = x2 - x1 + 1;
|
||||||
|
src.h = y2 - y1 + 1;
|
||||||
|
|
||||||
|
dest.x = x1;
|
||||||
|
dest.y = y1;
|
||||||
|
dest.w = src.w;
|
||||||
|
dest.h = src.h;
|
||||||
|
|
||||||
|
if (img_starter != NULL)
|
||||||
|
{
|
||||||
|
/* If there was a starter, cover this part of the drawing with
|
||||||
|
the corresponding part of the starter's foreground! */
|
||||||
|
|
||||||
|
SDL_BlitSurface(img_starter, &dest, canvas, &dest);
|
||||||
|
}
|
||||||
|
// printf("%d\n", canvas );
|
||||||
|
//printf("%d, %d, %d, %d\n", dest.x, dest.y, dest.w, dest.h);
|
||||||
|
//printf("%d\n", screen);
|
||||||
|
//printf("%d, %d, %d, %d\n\n\n", r_canvas.x, r_canvas.y, r_canvas.w, r_canvas.w);
|
||||||
|
|
||||||
|
// src.x = x1 + 96;
|
||||||
|
dest.x = x1 + 96;
|
||||||
|
|
||||||
|
SDL_BlitSurface(canvas, &src, screen, &dest);
|
||||||
|
|
||||||
|
/* If label is not disabled, cover canvas with label layer */
|
||||||
|
|
||||||
|
if(!disable_label)
|
||||||
|
SDL_BlitSurface(label, &src, screen, &dest);
|
||||||
|
|
||||||
|
if (screen_too)
|
||||||
|
update_screen(x1 + 96, y1, x2 + 96, y2);
|
||||||
|
}
|
||||||
|
|
||||||
static void update_canvas_ex(int x1, int y1, int x2, int y2, int screen_too)
|
static void update_canvas_ex(int x1, int y1, int x2, int y2, int screen_too)
|
||||||
{
|
{
|
||||||
SDL_Rect src, dest;
|
SDL_Rect src, dest;
|
||||||
|
|
@ -1369,7 +1412,7 @@ static Uint16 *wcstou16(const wchar_t * str)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static SDL_Surface *render_text_w(TuxPaint_Font * restrict font,
|
SDL_Surface *render_text_w(TuxPaint_Font * restrict font,
|
||||||
const wchar_t * restrict str,
|
const wchar_t * restrict str,
|
||||||
SDL_Color color)
|
SDL_Color color)
|
||||||
{
|
{
|
||||||
|
|
@ -1940,7 +1983,7 @@ static void eat_sdl_events(void)
|
||||||
else if (event.type == SDL_ACTIVEEVENT)
|
else if (event.type == SDL_ACTIVEEVENT)
|
||||||
handle_active(&event);
|
handle_active(&event);
|
||||||
else if (event.type == SDL_KEYDOWN)
|
else if (event.type == SDL_KEYDOWN)
|
||||||
{
|
{//AAAAAAAAAAAAAAQQQQQQQQQQQQQQQQQQUUUUUUUUUUUUUUUUUUIIIIIIIIIII
|
||||||
SDLKey key = event.key.keysym.sym;
|
SDLKey key = event.key.keysym.sym;
|
||||||
SDLMod ctrl = event.key.keysym.mod & KMOD_CTRL;
|
SDLMod ctrl = event.key.keysym.mod & KMOD_CTRL;
|
||||||
SDLMod alt = event.key.keysym.mod & KMOD_ALT;
|
SDLMod alt = event.key.keysym.mod & KMOD_ALT;
|
||||||
|
|
@ -2038,15 +2081,15 @@ void apply_surface (int x, int y, SDL_Surface *source, SDL_Surface *destination,
|
||||||
void drawkeybd(void );
|
void drawkeybd(void );
|
||||||
int regionhit(int x, int y, int w, int h);
|
int regionhit(int x, int y, int w, int h);
|
||||||
void button(int id, int x, int y);
|
void button(int id, int x, int y);
|
||||||
void on_screen_keyboard(void );
|
void on_screen_keyboardd(void );
|
||||||
SDL_Surface *messager = NULL;
|
SDL_Surface *messager = NULL;
|
||||||
#define initial_x (2 * button_w + 80)
|
#define initial_x (2 * button_w + 80)
|
||||||
#define key_width 24
|
#define key_width 24
|
||||||
#define key_height 24
|
#define key_height 24
|
||||||
|
|
||||||
TTF_Font *fonty = NULL;
|
TTF_Font *fontyy = NULL;
|
||||||
|
|
||||||
SDL_Color textcolory = { 0, 0, 0, 0};
|
SDL_Color textcolory = { 0, 0, 0 ,0};
|
||||||
|
|
||||||
const char *keybd_array[] = {"","Esc", " `", " 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9"," 0"," -"," =","Back",
|
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",
|
"Caps"," a"," b"," c"," d"," e"," f"," g"," h"," i"," j"," k"," l"," m"," n"," [", " ]"," \\","Ret",
|
||||||
|
|
@ -2101,6 +2144,9 @@ static void mainloop(void)
|
||||||
SDLKey key_down;
|
SDLKey key_down;
|
||||||
#endif
|
#endif
|
||||||
SDL_Event ev;
|
SDL_Event ev;
|
||||||
|
on_screen_keyboard *kbd, *new_kbd;
|
||||||
|
SDL_Rect kbd_rect;
|
||||||
|
|
||||||
num_things = num_brushes;
|
num_things = num_brushes;
|
||||||
thing_scroll = &brush_scroll;
|
thing_scroll = &brush_scroll;
|
||||||
cur_thing = 0;
|
cur_thing = 0;
|
||||||
|
|
@ -2128,6 +2174,7 @@ static void mainloop(void)
|
||||||
done = 0;
|
done = 0;
|
||||||
color_flag = 0;
|
color_flag = 0;
|
||||||
keyglobal = 0;
|
keyglobal = 0;
|
||||||
|
kbd = NULL;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
|
@ -2187,7 +2234,7 @@ static void mainloop(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (event.type == SDL_KEYDOWN)
|
else if (event.type == SDL_KEYDOWN)
|
||||||
{
|
{
|
||||||
key = event.key.keysym.sym;
|
key = event.key.keysym.sym;
|
||||||
mod = event.key.keysym.mod;
|
mod = event.key.keysym.mod;
|
||||||
|
|
||||||
|
|
@ -2541,8 +2588,9 @@ static void mainloop(void)
|
||||||
playsound(screen, 1, SND_CLICK, 0, SNDPOS_LEFT, SNDDIST_NEAR);
|
playsound(screen, 1, SND_CLICK, 0, SNDPOS_LEFT, SNDDIST_NEAR);
|
||||||
update_screen(0,0,WINDOW_WIDTH,WINDOW_HEIGHT);
|
update_screen(0,0,WINDOW_WIDTH,WINDOW_HEIGHT);
|
||||||
}
|
}
|
||||||
|
/* FIXME: this caused part of the onscreen keyboard flickering,
|
||||||
if (key == SDLK_RETURN && (tool_flag == 1))
|
need to find a better key to handle this */
|
||||||
|
if (key == SDLK_RETURN && (tool_flag == 1) && cur_tool != TOOL_LABEL && cur_tool != TOOL_TEXT)
|
||||||
{
|
{
|
||||||
ev.type = SDL_MOUSEBUTTONDOWN;
|
ev.type = SDL_MOUSEBUTTONDOWN;
|
||||||
ev.button.which = 0;
|
ev.button.which = 0;
|
||||||
|
|
@ -3340,8 +3388,25 @@ static void mainloop(void)
|
||||||
}
|
}
|
||||||
else if (cur_tool == TOOL_TEXT || cur_tool == TOOL_LABEL)
|
else if (cur_tool == TOOL_TEXT || cur_tool == TOOL_LABEL)
|
||||||
{
|
{
|
||||||
if (onscreen_keyboard)
|
if (onscreen_keyboard)
|
||||||
on_screen_keyboard();
|
{
|
||||||
|
if (kbd == NULL)
|
||||||
|
kbd = osk_create("test.layout", screen, img_btnsm_up, img_btnsm_down, img_btnsm_off);
|
||||||
|
if (kbd == NULL)
|
||||||
|
printf("kbd = NULL\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
kbd_rect.x = button_w * 2 + (canvas->w - kbd->surface->w)/2;
|
||||||
|
if(old_y > canvas->h / 2)
|
||||||
|
kbd_rect.y = 0;
|
||||||
|
else
|
||||||
|
kbd_rect.y = canvas->h - kbd->surface->h;
|
||||||
|
kbd_rect.w = kbd->surface->w;
|
||||||
|
kbd_rect.h = kbd->surface->h;
|
||||||
|
SDL_BlitSurface(kbd->surface, &kbd->rect, screen, &kbd_rect);
|
||||||
|
update_screen_rect(&kbd_rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!font_thread_done)
|
if (!font_thread_done)
|
||||||
{
|
{
|
||||||
draw_colors(COLORSEL_DISABLE);
|
draw_colors(COLORSEL_DISABLE);
|
||||||
|
|
@ -4018,11 +4083,17 @@ static void mainloop(void)
|
||||||
{
|
{
|
||||||
cur_label = LABEL_LABEL;
|
cur_label = LABEL_LABEL;
|
||||||
update_canvas(0, 0, WINDOW_WIDTH - 96, (48 * 7) + 40 + HEIGHTOFFSET);
|
update_canvas(0, 0, WINDOW_WIDTH - 96, (48 * 7) + 40 + HEIGHTOFFSET);
|
||||||
}
|
if (onscreen_keyboard)
|
||||||
|
{
|
||||||
|
SDL_BlitSurface(kbd->surface, &kbd->rect, screen, &kbd_rect);
|
||||||
|
update_screen_rect(&kbd_rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (are_labels())
|
if (are_labels())
|
||||||
{
|
{
|
||||||
|
update_canvas_ex_r(kbd_rect.x- 96, kbd_rect.y, kbd_rect.x + kbd_rect.w, kbd_rect.y + kbd_rect.h, 1);
|
||||||
if( texttool_len > 0)
|
if( texttool_len > 0)
|
||||||
{
|
{
|
||||||
rec_undo_buffer();
|
rec_undo_buffer();
|
||||||
|
|
@ -4371,14 +4442,14 @@ static void mainloop(void)
|
||||||
/* Draw something! */
|
/* Draw something! */
|
||||||
old_x = event.button.x - r_canvas.x;
|
old_x = event.button.x - r_canvas.x;
|
||||||
old_y = event.button.y - r_canvas.y;
|
old_y = event.button.y - r_canvas.y;
|
||||||
if (old_y < r_canvas.h/2)
|
/* if (old_y < r_canvas.h/2) */
|
||||||
{
|
/* { */
|
||||||
keybd_position = 0;
|
/* keybd_position = 0; */
|
||||||
}
|
/* } */
|
||||||
else
|
/* else */
|
||||||
{
|
/* { */
|
||||||
keybd_position = 1;
|
/* keybd_position = 1; */
|
||||||
}
|
/* } */
|
||||||
|
|
||||||
if (been_saved)
|
if (been_saved)
|
||||||
{
|
{
|
||||||
|
|
@ -4599,13 +4670,27 @@ static void mainloop(void)
|
||||||
draw_fonts();
|
draw_fonts();
|
||||||
update_screen_rect(&r_toolopt);
|
update_screen_rect(&r_toolopt);
|
||||||
if (onscreen_keyboard)
|
if (onscreen_keyboard)
|
||||||
on_screen_keyboard();
|
{
|
||||||
|
if (old_y < r_canvas.h/2)
|
||||||
|
kbd_rect.y = r_canvas.h - kbd->surface->h;
|
||||||
|
else
|
||||||
|
kbd_rect.y = 0;
|
||||||
|
|
||||||
|
SDL_BlitSurface(kbd->surface, &kbd->rect, screen, &kbd_rect);
|
||||||
|
update_screen_rect(&kbd_rect);
|
||||||
|
}
|
||||||
|
|
||||||
do_render_cur_text(0);
|
do_render_cur_text(0);
|
||||||
draw_colors(COLORSEL_REFRESH);
|
draw_colors(COLORSEL_REFRESH);
|
||||||
draw_fonts();
|
draw_fonts();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
hide_blinking_cursor();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (cursor_x != -1 && cursor_y != -1)
|
if (cursor_x != -1 && cursor_y != -1)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
@ -4617,12 +4702,58 @@ static void mainloop(void)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
if (onscreen_keyboard && HIT(kbd_rect))
|
||||||
|
{
|
||||||
|
new_kbd = osk_clicked(kbd, old_x - kbd_rect.x + r_canvas.x, old_y - kbd_rect.y + r_canvas.y);
|
||||||
|
/* keyboard has changed, erase the old, note that the old kbd has yet been freed. */
|
||||||
|
if (new_kbd != kbd)
|
||||||
|
{
|
||||||
|
kbd = new_kbd;
|
||||||
|
update_canvas_ex(kbd_rect.x, kbd_rect.y, kbd_rect.x + kbd_rect.w, kbd_rect.y + kbd_rect.h, 0);
|
||||||
|
/* set kbd_rect dimensions according to the new keyboard */
|
||||||
|
kbd_rect.x = button_w * 2 + (canvas->w - kbd->surface->w)/2;
|
||||||
|
if(kbd_rect.y != 0)
|
||||||
|
kbd_rect.y = canvas->h - kbd->surface->h;
|
||||||
|
kbd_rect.w = kbd->surface->w;
|
||||||
|
kbd_rect.h = kbd->surface->h;
|
||||||
|
}
|
||||||
|
SDL_BlitSurface(kbd->surface, &kbd->rect, screen, &kbd_rect);
|
||||||
|
update_screen_rect(&kbd_rect);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cursor_x = old_x;
|
||||||
|
cursor_y = old_y;
|
||||||
|
cursor_left = old_x;
|
||||||
|
|
||||||
cursor_x = old_x;
|
if (onscreen_keyboard)
|
||||||
cursor_y = old_y;
|
if (old_y < r_canvas.h/2)
|
||||||
cursor_left = old_x;
|
{
|
||||||
|
if (kbd_rect.y != r_canvas.h - kbd->surface->h)
|
||||||
|
{
|
||||||
|
update_canvas_ex(kbd_rect.x, kbd_rect.y, kbd_rect.x + kbd_rect.w, kbd_rect.y + kbd_rect.h, 0);
|
||||||
|
update_screen_rect(&kbd_rect);
|
||||||
|
kbd_rect.y = r_canvas.h - kbd->surface->h;
|
||||||
|
SDL_BlitSurface(kbd->surface, &kbd->rect, screen, &kbd_rect);
|
||||||
|
update_screen_rect(&kbd_rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (kbd_rect.y != 0)
|
||||||
|
{
|
||||||
|
update_canvas_ex(kbd_rect.x, kbd_rect.y, kbd_rect.x + kbd_rect.w, kbd_rect.y + kbd_rect.h, 0);
|
||||||
|
update_screen_rect(&kbd_rect);
|
||||||
|
kbd_rect.y = 0;
|
||||||
|
SDL_BlitSurface(kbd->surface, &kbd->rect, screen, &kbd_rect);
|
||||||
|
update_screen_rect(&kbd_rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
do_render_cur_text(0);
|
do_render_cur_text(0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
button_down = 1;
|
button_down = 1;
|
||||||
|
|
@ -4858,7 +4989,7 @@ static void mainloop(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event.type == SDL_USEREVENT)
|
else if (event.type == SDL_USEREVENT)
|
||||||
{
|
{
|
||||||
if (event.user.code == USEREVENT_TEXT_UPDATE)
|
if (event.user.code == USEREVENT_TEXT_UPDATE)
|
||||||
{
|
{
|
||||||
/* Time to replace "Great!" with old tip text: */
|
/* Time to replace "Great!" with old tip text: */
|
||||||
|
|
@ -5056,6 +5187,15 @@ static void mainloop(void)
|
||||||
update_rect.y + update_rect.h);
|
update_rect.y + update_rect.h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (onscreen_keyboard &&
|
||||||
|
(cur_tool == TOOL_TEXT ||
|
||||||
|
(cur_tool == TOOL_LABEL && cur_label != LABEL_SELECT)))
|
||||||
|
{
|
||||||
|
osk_released(kbd);
|
||||||
|
SDL_BlitSurface(kbd->surface, &kbd->rect, screen, &kbd_rect);
|
||||||
|
update_screen_rect(&kbd_rect);
|
||||||
|
// SDL_Flip(screen);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
button_down = 0;
|
button_down = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -5260,12 +5400,18 @@ static void mainloop(void)
|
||||||
}
|
}
|
||||||
else if (cur_tool == TOOL_TEXT)
|
else if (cur_tool == TOOL_TEXT)
|
||||||
{
|
{
|
||||||
do_setcursor(cursor_insertion);
|
if (onscreen_keyboard && HIT(kbd_rect))
|
||||||
|
do_setcursor(cursor_hand);
|
||||||
|
else
|
||||||
|
do_setcursor(cursor_insertion);
|
||||||
}
|
}
|
||||||
else if (cur_tool == TOOL_LABEL)
|
else if (cur_tool == TOOL_LABEL)
|
||||||
{
|
{
|
||||||
if (cur_label == LABEL_LABEL)
|
if (cur_label == LABEL_LABEL)
|
||||||
do_setcursor(cursor_insertion);
|
if (onscreen_keyboard && HIT(kbd_rect))
|
||||||
|
do_setcursor(cursor_hand);
|
||||||
|
else
|
||||||
|
do_setcursor(cursor_insertion);
|
||||||
else if (cur_label == LABEL_SELECT)
|
else if (cur_label == LABEL_SELECT)
|
||||||
{
|
{
|
||||||
if (search_label_list(¤t_label_node, event.button.x - 96, event.button.y, 1))
|
if (search_label_list(¤t_label_node, event.button.x - 96, event.button.y, 1))
|
||||||
|
|
@ -5486,8 +5632,9 @@ static void mainloop(void)
|
||||||
|
|
||||||
if (cur_tool == TOOL_TEXT || (cur_tool == TOOL_LABEL && cur_label != LABEL_SELECT))
|
if (cur_tool == TOOL_TEXT || (cur_tool == TOOL_LABEL && cur_label != LABEL_SELECT))
|
||||||
{
|
{
|
||||||
if (onscreen_keyboard)
|
/* if (onscreen_keyboard) */
|
||||||
on_screen_keyboard();
|
/* osk_clicked(kbd, old_x, old_y); */
|
||||||
|
/* on_screen_keyboardd(); */
|
||||||
cur_cursor_blink = SDL_GetTicks();
|
cur_cursor_blink = SDL_GetTicks();
|
||||||
|
|
||||||
if( cursor_x != -1 && cursor_y != -1 &&
|
if( cursor_x != -1 && cursor_y != -1 &&
|
||||||
|
|
@ -16212,19 +16359,20 @@ static void do_render_cur_text(int do_blit)
|
||||||
|
|
||||||
cursor_textwidth = w;
|
cursor_textwidth = w;
|
||||||
}
|
}
|
||||||
else /* Erase the stalle letter. Hope there is not any letter 3 times wider than its height */
|
else /* Erase the stalle letter . */
|
||||||
{
|
{
|
||||||
if (cur_label != LABEL_SELECT)
|
if (cur_label != LABEL_SELECT)
|
||||||
{
|
{
|
||||||
update_canvas(cursor_x - 1,
|
update_canvas_ex_r(old_dest.x - 96, old_dest.y,
|
||||||
cursor_y - 1,
|
old_dest.x + old_dest.w,
|
||||||
cursor_x + 1 + TuxPaint_Font_FontHeight(getfonthandle(cur_font)) * 3,
|
old_dest.y + old_dest.h, 0);
|
||||||
cursor_y + 1 + TuxPaint_Font_FontHeight(getfonthandle(cur_font)));
|
old_dest.x = old_dest.y = old_dest.w = old_dest.h = 0;
|
||||||
|
|
||||||
update_canvas(old_cursor_x - 1,
|
|
||||||
old_cursor_y - 1,
|
update_canvas_ex_r(old_cursor_x - 1,
|
||||||
old_cursor_x + 1 + TuxPaint_Font_FontHeight(getfonthandle(cur_font)),
|
old_cursor_y - 1,
|
||||||
old_cursor_y + 1 + TuxPaint_Font_FontHeight(getfonthandle(cur_font)));
|
old_cursor_x + 1,
|
||||||
|
old_cursor_y + 1 + TuxPaint_Font_FontHeight(getfonthandle(cur_font)), 0);
|
||||||
|
|
||||||
/* FIXME: Do less flickery updating here (use update_canvas_ex() above, then SDL_Flip() or SDL_UpdateRect() here -bjk 2010.02.10 */
|
/* FIXME: Do less flickery updating here (use update_canvas_ex() above, then SDL_Flip() or SDL_UpdateRect() here -bjk 2010.02.10 */
|
||||||
|
|
||||||
|
|
@ -16232,18 +16380,23 @@ static void do_render_cur_text(int do_blit)
|
||||||
old_cursor_y = cursor_y;
|
old_cursor_y = cursor_y;
|
||||||
cursor_textwidth = 0;
|
cursor_textwidth = 0;
|
||||||
}
|
}
|
||||||
SDL_Flip(screen);
|
/* FIXME: Is this SDL_Flip() still needed? Pere 2011.06.28 */
|
||||||
return;
|
SDL_Flip(screen);
|
||||||
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!do_blit)
|
if (!do_blit)
|
||||||
{
|
{
|
||||||
update_canvas_ex(cursor_x - 1,
|
update_canvas_ex_r(old_dest.x - 96, old_dest.y,
|
||||||
cursor_y - 1,
|
old_dest.x + old_dest.w,
|
||||||
cursor_x + 1 + TuxPaint_Font_FontHeight(getfonthandle(cur_font)) * 3,
|
old_dest.y + old_dest.h, 0);
|
||||||
cursor_y + 1 + TuxPaint_Font_FontHeight(getfonthandle(cur_font)), 0);
|
|
||||||
|
/* update_canvas_ex_r(cursor_x - 1, */
|
||||||
|
/* cursor_y - 1, */
|
||||||
|
/* cursor_x + 1 + TuxPaint_Font_FontHeight(getfonthandle(cur_font)) * 3, */
|
||||||
|
/* cursor_y + 1 + TuxPaint_Font_FontHeight(getfonthandle(cur_font)), 0); */
|
||||||
|
|
||||||
|
|
||||||
/* Draw outline around text: */
|
/* Draw outline around text: */
|
||||||
|
|
@ -16260,6 +16413,10 @@ static void do_render_cur_text(int do_blit)
|
||||||
|
|
||||||
SDL_FillRect(screen, &dest, SDL_MapRGB(canvas->format, 0, 0, 0));
|
SDL_FillRect(screen, &dest, SDL_MapRGB(canvas->format, 0, 0, 0));
|
||||||
|
|
||||||
|
old_dest.x = dest.x;
|
||||||
|
old_dest.y = dest.y;
|
||||||
|
old_dest.w = dest.w;
|
||||||
|
old_dest.h = dest.h;
|
||||||
|
|
||||||
/* FIXME: This would be nice if it were alpha-blended: */
|
/* FIXME: This would be nice if it were alpha-blended: */
|
||||||
|
|
||||||
|
|
@ -16336,8 +16493,8 @@ static void do_render_cur_text(int do_blit)
|
||||||
{
|
{
|
||||||
SDL_BlitSurface(tmp_surf, &src, canvas, &dest);
|
SDL_BlitSurface(tmp_surf, &src, canvas, &dest);
|
||||||
}
|
}
|
||||||
update_canvas_ex(dest.x, dest.y, dest.x + tmp_surf->w,
|
update_canvas_ex_r(dest.x - 2, dest.y - 2 , dest.x + tmp_surf->w + 4,
|
||||||
dest.y + tmp_surf->h, 0);
|
dest.y + tmp_surf->h + 4, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -16348,14 +16505,17 @@ static void do_render_cur_text(int do_blit)
|
||||||
|
|
||||||
|
|
||||||
/* FIXME: Only update what's changed! */
|
/* FIXME: Only update what's changed! */
|
||||||
|
|
||||||
SDL_Flip(screen);
|
SDL_Flip(screen);
|
||||||
|
|
||||||
|
//update_screen_rect(&dest);
|
||||||
free(str);
|
free(str);
|
||||||
|
|
||||||
if (tmp_surf != NULL)
|
if (tmp_surf != NULL)
|
||||||
SDL_FreeSurface(tmp_surf);
|
SDL_FreeSurface(tmp_surf);
|
||||||
/* if (tmp_label != NULL) */
|
/* if (tmp_label != NULL) */
|
||||||
/* SDL_FreeSurface(tmp_label); */
|
/* SDL_FreeSurface(tmp_label); */
|
||||||
|
// SDL_Delay(5000);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -23703,15 +23863,16 @@ void button(int id, int x, int y)
|
||||||
{
|
{
|
||||||
if (caps_flag % 2 != 0)
|
if (caps_flag % 2 != 0)
|
||||||
{
|
{
|
||||||
event.key.keysym.sym = SDLK_y;
|
event.key.keysym.sym = SDLK_y;
|
||||||
event.key.keysym.mod = KMOD_CAPS;
|
event.key.keysym.mod = KMOD_CAPS;
|
||||||
event.key.keysym.unicode = 89;
|
event.key.keysym.unicode = 89;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
event.key.keysym.sym = SDLK_y;
|
event.key.keysym.sym = SDLK_y;
|
||||||
event.key.keysym.mod = KMOD_NONE;
|
event.key.keysym.mod = KMOD_NONE;
|
||||||
event.key.keysym.unicode = (Uint16)'y';
|
event.key.keysym.unicode = (Uint16)'y';
|
||||||
|
// event.key.keysym.unicode = 0x1008ff79;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ide == 46)
|
else if (ide == 46)
|
||||||
|
|
@ -23773,283 +23934,11 @@ void button(int id, int x, int y)
|
||||||
|
|
||||||
if (enter_flag == 0)
|
if (enter_flag == 0)
|
||||||
{
|
{
|
||||||
static int redraw = 0;
|
event.key.type=SDL_KEYDOWN;
|
||||||
wchar_t* im_cp = im_data.s;
|
SDL_PushEvent(&event);
|
||||||
/* Discard previous # of redraw characters */
|
event.key.type=SDL_KEYUP;
|
||||||
if((int)texttool_len <= redraw) texttool_len = 0;
|
SDL_PushEvent(&event);
|
||||||
else texttool_len -= redraw;
|
}
|
||||||
texttool_str[texttool_len] = L'\0';
|
|
||||||
|
|
||||||
/* Read IM, remember how many to redraw next iteration */
|
|
||||||
redraw = im_read(&im_data, event.key.keysym);
|
|
||||||
|
|
||||||
/* Queue each character to be displayed */
|
|
||||||
while(*im_cp) {
|
|
||||||
if (*im_cp == L'\b')
|
|
||||||
{
|
|
||||||
hide_blinking_cursor();
|
|
||||||
if (texttool_len > 0)
|
|
||||||
{
|
|
||||||
texttool_len--;
|
|
||||||
texttool_str[texttool_len] = 0;
|
|
||||||
playsound(screen, 0, SND_KEYCLICK, 0, SNDPOS_CENTER,
|
|
||||||
SNDDIST_NEAR);
|
|
||||||
|
|
||||||
do_render_cur_text(0);
|
|
||||||
|
|
||||||
if (been_saved)
|
|
||||||
{
|
|
||||||
been_saved = 0;
|
|
||||||
|
|
||||||
if (!disable_save)
|
|
||||||
tool_avail[TOOL_SAVE] = 1;
|
|
||||||
|
|
||||||
draw_toolbar();
|
|
||||||
update_screen_rect(&r_tools);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (*im_cp == L'\r')
|
|
||||||
{
|
|
||||||
int font_height;
|
|
||||||
font_height = TuxPaint_Font_FontHeight(getfonthandle(cur_font));
|
|
||||||
|
|
||||||
hide_blinking_cursor();
|
|
||||||
if (texttool_len > 0)
|
|
||||||
{
|
|
||||||
rec_undo_buffer();
|
|
||||||
do_render_cur_text(1);
|
|
||||||
label_node_to_edit = NULL;
|
|
||||||
texttool_len = 0;
|
|
||||||
cursor_textwidth = 0;
|
|
||||||
if (cur_tool == TOOL_LABEL)
|
|
||||||
{
|
|
||||||
draw_fonts();
|
|
||||||
update_screen_rect(&r_toolopt);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (been_saved)
|
|
||||||
{
|
|
||||||
been_saved = 0;
|
|
||||||
|
|
||||||
if (!disable_save)
|
|
||||||
tool_avail[TOOL_SAVE] = 1;
|
|
||||||
|
|
||||||
draw_toolbar();
|
|
||||||
update_screen_rect(&r_tools);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
cursor_x = cursor_left;
|
|
||||||
cursor_y = min(cursor_y + font_height, canvas->h - font_height);
|
|
||||||
|
|
||||||
playsound(screen, 0, SND_RETURN, 1, SNDPOS_RIGHT, SNDDIST_NEAR);
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (cur_tool == TOOL_LABEL && label_node_to_edit)
|
|
||||||
{
|
|
||||||
rec_undo_buffer();
|
|
||||||
have_to_rec_label_node = TRUE;
|
|
||||||
add_label_node(0, 0, 0, 0, NULL);
|
|
||||||
derender_node(&label_node_to_edit);
|
|
||||||
label_node_to_edit = NULL;
|
|
||||||
// playsound(screen, 0, SND_DELETE_LABEL, 0, SNDPOS_CENTER); // FIXME lack of specific sound
|
|
||||||
|
|
||||||
if (been_saved)
|
|
||||||
{
|
|
||||||
been_saved = 0;
|
|
||||||
|
|
||||||
if (!disable_save)
|
|
||||||
tool_avail[TOOL_SAVE] = 1;
|
|
||||||
|
|
||||||
draw_toolbar();
|
|
||||||
update_screen_rect(&r_tools);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Select a node to edit */
|
|
||||||
else if (cur_tool == TOOL_LABEL &&
|
|
||||||
cur_label == LABEL_SELECT)
|
|
||||||
{
|
|
||||||
label_node_to_edit=search_label_list(&highlighted_label_node, highlighted_label_node->save_x + 3, highlighted_label_node->save_y + 3, 0);
|
|
||||||
if(label_node_to_edit)
|
|
||||||
{
|
|
||||||
cur_label = LABEL_LABEL;
|
|
||||||
cur_thing=label_node_to_edit->save_cur_font;
|
|
||||||
do_setcursor(cursor_insertion);
|
|
||||||
i = 0;
|
|
||||||
label_node_to_edit->is_enabled = FALSE;
|
|
||||||
derender_node(&label_node_to_edit);
|
|
||||||
|
|
||||||
texttool_len = select_texttool_len;
|
|
||||||
while(i < texttool_len)
|
|
||||||
{
|
|
||||||
texttool_str[i] = select_texttool_str[i];
|
|
||||||
i = i+1;
|
|
||||||
}
|
|
||||||
texttool_str[i] = L'\0';
|
|
||||||
cur_color = select_color;
|
|
||||||
old_x = select_x;
|
|
||||||
old_y = select_y;
|
|
||||||
cur_font = select_cur_font;
|
|
||||||
text_state = select_text_state;
|
|
||||||
text_size = select_text_size;
|
|
||||||
// int j;
|
|
||||||
for (j = 0; j < num_font_families; j++)
|
|
||||||
{
|
|
||||||
if (user_font_families[j]
|
|
||||||
&& user_font_families[j]->handle)
|
|
||||||
{
|
|
||||||
TuxPaint_Font_CloseFont(user_font_families[j]->handle);
|
|
||||||
user_font_families[j]->handle = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
draw_fonts();
|
|
||||||
update_screen_rect(&r_toolopt);
|
|
||||||
|
|
||||||
cursor_x = old_x;
|
|
||||||
cursor_y = old_y;
|
|
||||||
cursor_left = old_x;
|
|
||||||
|
|
||||||
draw_colors(COLORSEL_REFRESH);
|
|
||||||
draw_fonts();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
do_render_cur_text(0);
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cursor_x = cursor_left;
|
|
||||||
cursor_y = min(cursor_y + font_height, canvas->h - font_height);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SPEECH
|
|
||||||
#ifdef __APPLE__
|
|
||||||
if (use_sound)
|
|
||||||
speak_string(texttool_str);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
im_softreset(&im_data);
|
|
||||||
}
|
|
||||||
else if (*im_cp == L'\t')
|
|
||||||
{
|
|
||||||
|
|
||||||
if (texttool_len > 0)
|
|
||||||
{
|
|
||||||
rec_undo_buffer();
|
|
||||||
do_render_cur_text(1);
|
|
||||||
label_node_to_edit = NULL;
|
|
||||||
cursor_x = min(cursor_x + cursor_textwidth, canvas->w);
|
|
||||||
texttool_len = 0;
|
|
||||||
cursor_textwidth = 0;
|
|
||||||
if (cur_tool == TOOL_LABEL)
|
|
||||||
{
|
|
||||||
draw_fonts();
|
|
||||||
update_screen_rect(&r_toolopt);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (been_saved)
|
|
||||||
{
|
|
||||||
been_saved = 0;
|
|
||||||
|
|
||||||
if (!disable_save)
|
|
||||||
tool_avail[TOOL_SAVE] = 1;
|
|
||||||
|
|
||||||
draw_toolbar();
|
|
||||||
update_screen_rect(&r_tools);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (cur_tool == TOOL_LABEL && label_node_to_edit)
|
|
||||||
{
|
|
||||||
rec_undo_buffer();
|
|
||||||
have_to_rec_label_node = TRUE;
|
|
||||||
add_label_node(0, 0, 0, 0, NULL);
|
|
||||||
derender_node(&label_node_to_edit);
|
|
||||||
label_node_to_edit = NULL;
|
|
||||||
// playsound(screen, 0, SND_DELETE_LABEL, 0, SNDPOS_CENTER); // FIXME lack of specific sound
|
|
||||||
|
|
||||||
if (been_saved)
|
|
||||||
{
|
|
||||||
been_saved = 0;
|
|
||||||
|
|
||||||
if (!disable_save)
|
|
||||||
tool_avail[TOOL_SAVE] = 1;
|
|
||||||
|
|
||||||
draw_toolbar();
|
|
||||||
update_screen_rect(&r_tools);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Cycle accross the nodes */
|
|
||||||
else if (cur_tool == TOOL_LABEL &&
|
|
||||||
cur_label == LABEL_SELECT)
|
|
||||||
{
|
|
||||||
cycle_highlighted_label_node();
|
|
||||||
highlight_label_nodes();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef SPEECH
|
|
||||||
#ifdef __APPLE__
|
|
||||||
if (use_sound)
|
|
||||||
speak_string(texttool_str);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
im_softreset(&im_data);
|
|
||||||
}
|
|
||||||
else if (iswprint(*im_cp) &&
|
|
||||||
(cur_tool == TOOL_TEXT || cur_label == LABEL_LABEL))
|
|
||||||
{
|
|
||||||
if (texttool_len < (sizeof(texttool_str) / sizeof(wchar_t)) - 1)
|
|
||||||
{
|
|
||||||
int old_cursor_textwidth = cursor_textwidth;
|
|
||||||
|
|
||||||
texttool_str[texttool_len++] = *im_cp;
|
|
||||||
texttool_str[texttool_len] = 0;
|
|
||||||
|
|
||||||
do_render_cur_text(0);
|
|
||||||
|
|
||||||
if (been_saved)
|
|
||||||
{
|
|
||||||
been_saved = 0;
|
|
||||||
|
|
||||||
if (!disable_save)
|
|
||||||
tool_avail[TOOL_SAVE] = 1;
|
|
||||||
|
|
||||||
draw_toolbar();
|
|
||||||
update_screen_rect(&r_tools);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (cursor_x + old_cursor_textwidth <= canvas->w - 50 &&
|
|
||||||
cursor_x + cursor_textwidth > canvas->w - 50)
|
|
||||||
{
|
|
||||||
playsound(screen, 0, SND_KEYCLICKRING, 1, SNDPOS_RIGHT,
|
|
||||||
SNDDIST_NEAR);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* FIXME: Might be fun to position the
|
|
||||||
sound based on keyboard layout...? */
|
|
||||||
|
|
||||||
playsound(screen, 0, SND_KEYCLICK, 0, SNDPOS_CENTER,
|
|
||||||
SNDDIST_NEAR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
im_cp++;
|
|
||||||
} /* while(*im_cp) */
|
|
||||||
|
|
||||||
/* Show IM tip text */
|
|
||||||
if(im_data.tip_text) {
|
|
||||||
draw_tux_text(TUX_DEFAULT, im_data.tip_text, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -24060,8 +23949,8 @@ void keybd_prepare()
|
||||||
fontname = malloc(128);
|
fontname = malloc(128);
|
||||||
|
|
||||||
sprintf(fontname, "%s/fonts/FreeSansBold.ttf", DATA_PREFIX);
|
sprintf(fontname, "%s/fonts/FreeSansBold.ttf", DATA_PREFIX);
|
||||||
fonty = TTF_OpenFont( fontname, 12 );
|
fontyy = TTF_OpenFont( fontname, 12 );
|
||||||
if (fonty == NULL)
|
if (fontyy == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "\nError: Can't open the font!\n"
|
fprintf(stderr, "\nError: Can't open the font!\n"
|
||||||
"The Simple DirectMedia Layer error that occurred was:\n"
|
"The Simple DirectMedia Layer error that occurred was:\n"
|
||||||
|
|
@ -24083,7 +23972,7 @@ void keybd_finish()
|
||||||
if (uistate.activeitem == 0)
|
if (uistate.activeitem == 0)
|
||||||
uistate.activeitem = -1;
|
uistate.activeitem = -1;
|
||||||
}
|
}
|
||||||
TTF_CloseFont (fonty);
|
TTF_CloseFont (fontyy);
|
||||||
}
|
}
|
||||||
|
|
||||||
void apply_surface (int x, int y, SDL_Surface *source, SDL_Surface *destination, SDL_Rect *clip)
|
void apply_surface (int x, int y, SDL_Surface *source, SDL_Surface *destination, SDL_Rect *clip)
|
||||||
|
|
@ -24102,28 +23991,28 @@ void drawkeybd(void )
|
||||||
int i;
|
int i;
|
||||||
for (i = 1; i <= 15; i++)
|
for (i = 1; i <= 15; i++)
|
||||||
{
|
{
|
||||||
messager = TTF_RenderText_Solid( fonty, keybd_array[i], textcolory );
|
messager = TTF_RenderText_Solid( fontyy, keybd_array[i], textcolory );
|
||||||
apply_surface( initial_x + (key_width)*(i-1), initial_y, messager, screen, NULL);
|
apply_surface( initial_x + (key_width)*(i-1), initial_y, messager, screen, NULL);
|
||||||
SDL_FreeSurface(messager);
|
SDL_FreeSurface(messager);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 1; i <= 19; i++)
|
for (i = 1; i <= 19; i++)
|
||||||
{
|
{
|
||||||
messager = TTF_RenderText_Solid( fonty, keybd_array[i+15], textcolory );
|
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);
|
apply_surface( initial_x + (key_width)*(i-1), initial_y + key_height, messager, screen, NULL);
|
||||||
SDL_FreeSurface(messager);
|
SDL_FreeSurface(messager);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 1; i <= 19; i++)
|
for (i = 1; i <= 19; i++)
|
||||||
{
|
{
|
||||||
messager = TTF_RenderText_Solid( fonty, keybd_array[i+34], textcolory );
|
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);
|
apply_surface( initial_x + (key_width)*(i-1), initial_y + (2 * key_height), messager, screen, NULL);
|
||||||
SDL_FreeSurface(messager);
|
SDL_FreeSurface(messager);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_screen_keyboard(void )
|
void on_screen_keyboardd(void )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
if (key_board != NULL)
|
if (key_board != NULL)
|
||||||
|
|
@ -24623,7 +24512,7 @@ static void handle_joybuttonupdownscl(SDL_Event event, int oldpos_x, int oldpos_
|
||||||
ev.button.type = SDL_MOUSEBUTTONUP;
|
ev.button.type = SDL_MOUSEBUTTONUP;
|
||||||
ev.button.state = SDL_RELEASED;
|
ev.button.state = SDL_RELEASED;
|
||||||
}
|
}
|
||||||
|
printf("result %d %d\n", ev.button.x, ev.button.y);
|
||||||
SDL_PushEvent(&ev);
|
SDL_PushEvent(&ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue