* Some work to avoid leaving Magic previews on the screen when unfinished
click/move/click (e.g., by clicking a tool, hitting a command key, or leaving the window) in mouse accessibility mode. NOTE: This currently 'undoes' any magic, and not just previews; tools will need to 'register' the fact that they create previews. * Adjustment of 'backlogged event queue' handling when dealing with mouse motion. (Rather than stop listening to motion events after spinning in the "while (SDL_PollEvent())" loop for 250ms, it now skips every few events.) This prevents circle-drawings from appearing as "D". Now, they start appearing as polygon-like shapes.
This commit is contained in:
parent
853b0a3ebe
commit
868cba5794
2 changed files with 38 additions and 20 deletions
|
|
@ -8,7 +8,7 @@ http://www.tuxpaint.org/
|
||||||
|
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
2011.April.18 (0.9.22)
|
2011.April.26 (0.9.22)
|
||||||
* New Tools:
|
* New Tools:
|
||||||
----------
|
----------
|
||||||
* Label - A tool to add text to a drawing, which can be modified or
|
* Label - A tool to add text to a drawing, which can be modified or
|
||||||
|
|
@ -118,6 +118,12 @@ $Id$
|
||||||
-------------------
|
-------------------
|
||||||
* Quicker prompt window pop-up animation.
|
* Quicker prompt window pop-up animation.
|
||||||
|
|
||||||
|
* Slightly improved mouse motion handling when Tux Paint is very busy
|
||||||
|
drawing or previewing. (e.g., when drawing a circle, you could often
|
||||||
|
end up with a "D" shape... now, you get more of a regular polygon shape
|
||||||
|
if Tux Paint is taking too long to draw. It skips some motion events,
|
||||||
|
rather than ignoring all motion events after the first 1/4th second.)
|
||||||
|
|
||||||
* Deleting files from Tux Paint's 'Open' dialog now moves them to
|
* Deleting files from Tux Paint's 'Open' dialog now moves them to
|
||||||
the user's Trash folder.
|
the user's Trash folder.
|
||||||
FIXME: Only on freedesktop.org systems (e.g., Linux)
|
FIXME: Only on freedesktop.org systems (e.g., Linux)
|
||||||
|
|
|
||||||
|
|
@ -2093,14 +2093,15 @@ static void mainloop(void)
|
||||||
{
|
{
|
||||||
current_event_time = SDL_GetTicks();
|
current_event_time = SDL_GetTicks();
|
||||||
|
|
||||||
if (current_event_time > pre_event_time + 250)
|
/* To avoid getting stuck in a 'catching up with mouse motion' interface lock-up */
|
||||||
ignoring_motion = 1;
|
/* FIXME: Another thing we could do here is peek into events, and 'skip' to the last motion...? Or something... -bjk 2011.04.26 */
|
||||||
|
if (current_event_time > pre_event_time + 500 && event.type == SDL_MOUSEMOTION)
|
||||||
|
ignoring_motion = (ignoring_motion + 1) % 3; /* Ignore every couple of motion events, to keep things moving quickly (but avoid, e.g., attempts to draw "O" from looking like "D") */
|
||||||
|
|
||||||
|
|
||||||
if (event.type == SDL_QUIT)
|
if (event.type == SDL_QUIT)
|
||||||
{
|
{
|
||||||
magic_switchout(canvas);
|
magic_switchout(canvas);
|
||||||
emulate_button_pressed = 0;
|
|
||||||
done = do_quit(cur_tool);
|
done = do_quit(cur_tool);
|
||||||
if (!done)
|
if (!done)
|
||||||
magic_switchin(canvas);
|
magic_switchin(canvas);
|
||||||
|
|
@ -2557,10 +2558,9 @@ static void mainloop(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == SDLK_ESCAPE && !disable_quit)
|
if (key == SDLK_ESCAPE && !disable_quit)
|
||||||
{
|
{
|
||||||
emulate_button_pressed = 0;
|
|
||||||
magic_switchout(canvas);
|
magic_switchout(canvas);
|
||||||
done = do_quit(cur_tool);
|
done = do_quit(cur_tool);
|
||||||
if (!done)
|
if (!done)
|
||||||
|
|
@ -2590,7 +2590,6 @@ static void mainloop(void)
|
||||||
else if (key == SDLK_ESCAPE &&
|
else if (key == SDLK_ESCAPE &&
|
||||||
(mod & KMOD_SHIFT) && (mod & KMOD_CTRL))
|
(mod & KMOD_SHIFT) && (mod & KMOD_CTRL))
|
||||||
{
|
{
|
||||||
emulate_button_pressed = 0;
|
|
||||||
magic_switchout(canvas);
|
magic_switchout(canvas);
|
||||||
done = do_quit(cur_tool);
|
done = do_quit(cur_tool);
|
||||||
if (!done)
|
if (!done)
|
||||||
|
|
@ -2599,7 +2598,6 @@ static void mainloop(void)
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
else if (key == SDLK_F4 && (mod & KMOD_ALT))
|
else if (key == SDLK_F4 && (mod & KMOD_ALT))
|
||||||
{
|
{
|
||||||
emulate_button_pressed = 0;
|
|
||||||
magic_switchout(canvas);
|
magic_switchout(canvas);
|
||||||
done = do_quit(cur_tool);
|
done = do_quit(cur_tool);
|
||||||
if (!done)
|
if (!done)
|
||||||
|
|
@ -2610,7 +2608,6 @@ static void mainloop(void)
|
||||||
{
|
{
|
||||||
/* Ctrl-Z - Undo */
|
/* Ctrl-Z - Undo */
|
||||||
|
|
||||||
emulate_button_pressed = 0;
|
|
||||||
magic_switchout(canvas);
|
magic_switchout(canvas);
|
||||||
|
|
||||||
if (tool_avail[TOOL_UNDO])
|
if (tool_avail[TOOL_UNDO])
|
||||||
|
|
@ -2652,7 +2649,6 @@ static void mainloop(void)
|
||||||
{
|
{
|
||||||
/* Ctrl-R - Redo */
|
/* Ctrl-R - Redo */
|
||||||
|
|
||||||
emulate_button_pressed = 0;
|
|
||||||
magic_switchout(canvas);
|
magic_switchout(canvas);
|
||||||
|
|
||||||
if (tool_avail[TOOL_REDO])
|
if (tool_avail[TOOL_REDO])
|
||||||
|
|
@ -2669,7 +2665,6 @@ static void mainloop(void)
|
||||||
{
|
{
|
||||||
/* Ctrl-O - Open */
|
/* Ctrl-O - Open */
|
||||||
|
|
||||||
emulate_button_pressed = 0;
|
|
||||||
magic_switchout(canvas);
|
magic_switchout(canvas);
|
||||||
|
|
||||||
disable_avail_tools();
|
disable_avail_tools();
|
||||||
|
|
@ -2713,7 +2708,6 @@ static void mainloop(void)
|
||||||
{
|
{
|
||||||
/* Ctrl-N - New */
|
/* Ctrl-N - New */
|
||||||
|
|
||||||
emulate_button_pressed = 0;
|
|
||||||
magic_switchout(canvas);
|
magic_switchout(canvas);
|
||||||
|
|
||||||
hide_blinking_cursor();
|
hide_blinking_cursor();
|
||||||
|
|
@ -2757,7 +2751,6 @@ static void mainloop(void)
|
||||||
{
|
{
|
||||||
/* Ctrl-S - Save */
|
/* Ctrl-S - Save */
|
||||||
|
|
||||||
emulate_button_pressed = 0;
|
|
||||||
magic_switchout(canvas);
|
magic_switchout(canvas);
|
||||||
hide_blinking_cursor();
|
hide_blinking_cursor();
|
||||||
|
|
||||||
|
|
@ -2788,7 +2781,6 @@ static void mainloop(void)
|
||||||
|
|
||||||
if (!disable_print)
|
if (!disable_print)
|
||||||
{
|
{
|
||||||
emulate_button_pressed = 0;
|
|
||||||
magic_switchout(canvas);
|
magic_switchout(canvas);
|
||||||
|
|
||||||
/* If they haven't hit [Enter], but clicked 'Print', add their text now -bjk 2007.10.25 */
|
/* If they haven't hit [Enter], but clicked 'Print', add their text now -bjk 2007.10.25 */
|
||||||
|
|
@ -3266,7 +3258,6 @@ static void mainloop(void)
|
||||||
tool_flag = 1;
|
tool_flag = 1;
|
||||||
canvas_flag = 0;
|
canvas_flag = 0;
|
||||||
text_flag = 0;
|
text_flag = 0;
|
||||||
emulate_button_pressed = 0;
|
|
||||||
|
|
||||||
if (whicht < NUM_TOOLS && tool_avail[whicht] &&
|
if (whicht < NUM_TOOLS && tool_avail[whicht] &&
|
||||||
(valid_click(event.button.button) || whicht == TOOL_PRINT))
|
(valid_click(event.button.button) || whicht == TOOL_PRINT))
|
||||||
|
|
@ -3617,9 +3608,6 @@ static void mainloop(void)
|
||||||
WARNING: this must be kept in sync with the mouse-move
|
WARNING: this must be kept in sync with the mouse-move
|
||||||
code (for cursor changes) and mouse-scroll code. */
|
code (for cursor changes) and mouse-scroll code. */
|
||||||
|
|
||||||
if (mouseaccessibility)
|
|
||||||
emulate_button_pressed = 0;
|
|
||||||
|
|
||||||
if (cur_tool == TOOL_BRUSH || cur_tool == TOOL_STAMP ||
|
if (cur_tool == TOOL_BRUSH || cur_tool == TOOL_STAMP ||
|
||||||
cur_tool == TOOL_SHAPES || cur_tool == TOOL_LINES ||
|
cur_tool == TOOL_SHAPES || cur_tool == TOOL_LINES ||
|
||||||
cur_tool == TOOL_MAGIC || cur_tool == TOOL_TEXT ||
|
cur_tool == TOOL_MAGIC || cur_tool == TOOL_TEXT ||
|
||||||
|
|
@ -4288,6 +4276,9 @@ static void mainloop(void)
|
||||||
if (do_draw)
|
if (do_draw)
|
||||||
update_screen_rect(&r_toolopt);
|
update_screen_rect(&r_toolopt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mouseaccessibility)
|
||||||
|
emulate_button_pressed = 0;
|
||||||
}
|
}
|
||||||
else if (HIT(r_colors) && colors_are_selectable)
|
else if (HIT(r_colors) && colors_are_selectable)
|
||||||
{
|
{
|
||||||
|
|
@ -4532,7 +4523,7 @@ static void mainloop(void)
|
||||||
|
|
||||||
if (mouseaccessibility)
|
if (mouseaccessibility)
|
||||||
{
|
{
|
||||||
if (magics[cur_magic].mode != MODE_FULLSCREEN)
|
if (magics[cur_magic].mode != MODE_FULLSCREEN) /* FIXME: Some non-fullscreen tools are also click-only (not click-and-drag), so we need another magic MODE_ type -bjk 2011.04.26 */
|
||||||
emulate_button_pressed = !emulate_button_pressed;
|
emulate_button_pressed = !emulate_button_pressed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -16519,7 +16510,11 @@ static void handle_active(SDL_Event * event)
|
||||||
}
|
}
|
||||||
if (event->active.state & SDL_APPINPUTFOCUS|SDL_APPACTIVE)
|
if (event->active.state & SDL_APPINPUTFOCUS|SDL_APPACTIVE)
|
||||||
{
|
{
|
||||||
emulate_button_pressed = 0;
|
if (mouseaccessibility && emulate_button_pressed) {
|
||||||
|
magic_switchout(canvas);
|
||||||
|
emulate_button_pressed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
SetActivationState(event->active.gain);
|
SetActivationState(event->active.gain);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -19475,6 +19470,15 @@ static Uint32 magic_getpixel(SDL_Surface * surface, int x, int y)
|
||||||
|
|
||||||
static void magic_switchout(SDL_Surface * last)
|
static void magic_switchout(SDL_Surface * last)
|
||||||
{
|
{
|
||||||
|
int was_clicking = 0;
|
||||||
|
|
||||||
|
if (mouseaccessibility && emulate_button_pressed) {
|
||||||
|
/* We were 'clicking' in mouse accessibility mode; stop clicking now */
|
||||||
|
/* (EVEN if we weren't in magic tool) */
|
||||||
|
emulate_button_pressed = 0;
|
||||||
|
was_clicking = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (cur_tool == TOOL_MAGIC)
|
if (cur_tool == TOOL_MAGIC)
|
||||||
{
|
{
|
||||||
magic_funcs[magics[cur_magic].handle_idx].switchout(magic_api_struct,
|
magic_funcs[magics[cur_magic].handle_idx].switchout(magic_api_struct,
|
||||||
|
|
@ -19482,6 +19486,14 @@ static void magic_switchout(SDL_Surface * last)
|
||||||
magics[cur_magic].mode,
|
magics[cur_magic].mode,
|
||||||
canvas, last);
|
canvas, last);
|
||||||
update_canvas(0, 0, canvas->w, canvas->h);
|
update_canvas(0, 0, canvas->w, canvas->h);
|
||||||
|
|
||||||
|
if (was_clicking) {
|
||||||
|
/* Clean up preview! */
|
||||||
|
do_undo();
|
||||||
|
tool_avail[TOOL_REDO] = 0; /* Don't let them 'redo' to get preview back */
|
||||||
|
draw_toolbar();
|
||||||
|
update_screen_rect(&r_tools);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue