Refactor the input part
And add support for moving the canvas with cursor keys.
This commit is contained in:
parent
50842917f6
commit
28a93ad693
99
autistdraw.c
99
autistdraw.c
|
@ -657,56 +657,39 @@ export_irc (app_context_t *app)
|
||||||
|
|
||||||
// --- Event handlers ----------------------------------------------------------
|
// --- Event handlers ----------------------------------------------------------
|
||||||
|
|
||||||
static bool
|
static void
|
||||||
on_key (app_context_t *app, termo_key_t *key)
|
move_canvas (app_context_t *app, int x, int y)
|
||||||
{
|
{
|
||||||
if (key->type == TERMO_TYPE_KEYSYM && key->code.sym == TERMO_SYM_ESCAPE)
|
app->corner_x += x;
|
||||||
return false;
|
app->corner_y += y;
|
||||||
|
|
||||||
if (key->type == TERMO_TYPE_KEY
|
app->center_x += x;
|
||||||
&& (key->modifiers & TERMO_KEYMOD_CTRL)
|
app->center_y += y;
|
||||||
&& (key->code.codepoint == 'C' || key->code.codepoint == 'c'))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (key->type == TERMO_TYPE_KEY && key->code.codepoint == 'e')
|
redraw_canvas (app);
|
||||||
{
|
}
|
||||||
export_ansi (app);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key->type == TERMO_TYPE_KEY && key->code.codepoint == 'E')
|
|
||||||
{
|
|
||||||
export_irc (app);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key->type != TERMO_TYPE_MOUSE)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_mouse (app_context_t *app, termo_key_t *key)
|
||||||
|
{
|
||||||
int screen_y, screen_x, button;
|
int screen_y, screen_x, button;
|
||||||
termo_mouse_event_t event;
|
termo_mouse_event_t event;
|
||||||
|
|
||||||
termo_interpret_mouse (app->tk, key, &event, &button, &screen_y, &screen_x);
|
termo_interpret_mouse (app->tk, key, &event, &button, &screen_y, &screen_x);
|
||||||
if (event != TERMO_MOUSE_PRESS && event != TERMO_MOUSE_DRAG)
|
if (event != TERMO_MOUSE_PRESS && event != TERMO_MOUSE_DRAG)
|
||||||
return true;
|
return;
|
||||||
|
|
||||||
// Middle mouse button, or Ctrl + left mouse button, moves the canvas
|
// Middle mouse button, or Ctrl + left mouse button, moves the canvas
|
||||||
if (button == 2 || (button == 1 && key->modifiers == TERMO_KEYMOD_CTRL))
|
if (button == 2 || (button == 1 && key->modifiers == TERMO_KEYMOD_CTRL))
|
||||||
{
|
{
|
||||||
if (event == TERMO_MOUSE_DRAG)
|
if (event == TERMO_MOUSE_DRAG)
|
||||||
{
|
move_canvas (app,
|
||||||
app->corner_x += app->move_saved_x - screen_x;
|
app->move_saved_x - screen_x,
|
||||||
app->corner_y += app->move_saved_y - screen_y;
|
app->move_saved_y - screen_y);
|
||||||
|
|
||||||
app->center_x += app->move_saved_x - screen_x;
|
|
||||||
app->center_y += app->move_saved_y - screen_y;
|
|
||||||
|
|
||||||
redraw_canvas (app);
|
|
||||||
}
|
|
||||||
|
|
||||||
app->move_saved_x = screen_x;
|
app->move_saved_x = screen_x;
|
||||||
app->move_saved_y = screen_y;
|
app->move_saved_y = screen_y;
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t *color;
|
uint8_t *color;
|
||||||
|
@ -715,7 +698,7 @@ on_key (app_context_t *app, termo_key_t *key)
|
||||||
else if (button == 3)
|
else if (button == 3)
|
||||||
color = &app->current_color_right;
|
color = &app->current_color_right;
|
||||||
else
|
else
|
||||||
return true;
|
return;
|
||||||
|
|
||||||
int canvas_x = app->corner_x + screen_x;
|
int canvas_x = app->corner_x + screen_x;
|
||||||
int canvas_y = app->corner_y + screen_y - TOP_BAR_CUTOFF;
|
int canvas_y = app->corner_y + screen_y - TOP_BAR_CUTOFF;
|
||||||
|
@ -732,6 +715,54 @@ on_key (app_context_t *app, termo_key_t *key)
|
||||||
int pair = (float) screen_x / COLS * PALETTE_WIDTH;
|
int pair = (float) screen_x / COLS * PALETTE_WIDTH;
|
||||||
*color = pair + (screen_y - 1) * PALETTE_WIDTH;
|
*color = pair + (screen_y - 1) * PALETTE_WIDTH;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
on_key (app_context_t *app, termo_key_t *key)
|
||||||
|
{
|
||||||
|
if (key->type == TERMO_TYPE_KEYSYM)
|
||||||
|
{
|
||||||
|
if (key->code.sym == TERMO_SYM_ESCAPE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (key->modifiers)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
switch (key->code.sym)
|
||||||
|
{
|
||||||
|
case TERMO_SYM_UP:
|
||||||
|
move_canvas (app, 0, -1);
|
||||||
|
break;
|
||||||
|
case TERMO_SYM_DOWN:
|
||||||
|
move_canvas (app, 0, 1);
|
||||||
|
break;
|
||||||
|
case TERMO_SYM_LEFT:
|
||||||
|
move_canvas (app, -1, 0);
|
||||||
|
break;
|
||||||
|
case TERMO_SYM_RIGHT:
|
||||||
|
move_canvas (app, 1, 0);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key->type == TERMO_TYPE_KEY)
|
||||||
|
{
|
||||||
|
if ((key->modifiers & TERMO_KEYMOD_CTRL)
|
||||||
|
&& (key->code.codepoint == 'C' || key->code.codepoint == 'c'))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (key->modifiers)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (key->code.codepoint == 'e') export_ansi (app);
|
||||||
|
if (key->code.codepoint == 'E') export_irc (app);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key->type == TERMO_TYPE_MOUSE)
|
||||||
|
on_mouse (app, key);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue