Created abstract accessors for getting/setting key event line/col counts

This commit is contained in:
Paul LeoNerd Evans 2012-04-24 15:25:17 +01:00
parent 3b3a7c2f45
commit f33513282a
3 changed files with 25 additions and 27 deletions

View File

@ -288,17 +288,7 @@ static TermKeyResult peekkey_csi(TermKey *tk, TermKeyCsi *csi, size_t introlen,
key->modifiers = (key->code.mouse[0] & 0x1c) >> 2; key->modifiers = (key->code.mouse[0] & 0x1c) >> 2;
key->code.mouse[0] &= ~0x1c; key->code.mouse[0] &= ~0x1c;
key->code.mouse[3] = 0; termkey_key_set_linecol(key, arg[1], arg[2]);
if(arg[1] > 0xfff)
arg[1] = 0xfff;
key->code.mouse[1] = (arg[1] & 0x0ff);
key->code.mouse[3] |= (arg[1] & 0xf00) >> 8;
if(arg[2] > 0x7ff)
arg[1] = 0x7ff;
key->code.mouse[2] = (arg[2] & 0x0ff);
key->code.mouse[3] |= (arg[2] & 0x300) >> 4;
*nbytep = csi_len; *nbytep = csi_len;
return TERMKEY_RES_KEY; return TERMKEY_RES_KEY;
@ -310,17 +300,7 @@ static TermKeyResult peekkey_csi(TermKey *tk, TermKeyCsi *csi, size_t introlen,
key->modifiers = (key->code.mouse[0] & 0x1c) >> 2; key->modifiers = (key->code.mouse[0] & 0x1c) >> 2;
key->code.mouse[0] &= ~0x1c; key->code.mouse[0] &= ~0x1c;
key->code.mouse[3] = 0; termkey_key_set_linecol(key, arg[1], arg[2]);
if(arg[1] > 0xfff)
arg[1] = 0xfff;
key->code.mouse[1] = (arg[1] & 0x0ff);
key->code.mouse[3] |= (arg[1] & 0xf00) >> 8;
if(arg[2] > 0x7ff)
arg[1] = 0x7ff;
key->code.mouse[2] = (arg[2] & 0x0ff);
key->code.mouse[3] |= (arg[2] & 0x300) >> 4;
if(cmd == 'm') // release if(cmd == 'm') // release
key->code.mouse[3] |= 0x80; key->code.mouse[3] |= 0x80;

View File

@ -64,6 +64,28 @@ struct TermKey {
} method; } method;
}; };
static inline void termkey_key_get_linecol(const TermKeyKey *key, int *line, int *col)
{
if(col)
*col = (unsigned char)key->code.mouse[1] | ((unsigned char)key->code.mouse[3] & 0x0f) << 8;
if(line)
*line = (unsigned char)key->code.mouse[2] | ((unsigned char)key->code.mouse[3] & 0x70) << 4;
}
static inline void termkey_key_set_linecol(TermKeyKey *key, int line, int col)
{
if(line > 0xfff)
line = 0xfff;
if(col > 0x7ff)
col = 0x7ff;
key->code.mouse[1] = (line & 0x0ff);
key->code.mouse[2] = (col & 0x0ff);
key->code.mouse[3] = (line & 0xf00) >> 8 | (col & 0x300) >> 4;
}
extern struct TermKeyDriver termkey_driver_csi; extern struct TermKeyDriver termkey_driver_csi;
extern struct TermKeyDriver termkey_driver_ti; extern struct TermKeyDriver termkey_driver_ti;

View File

@ -911,11 +911,7 @@ TermKeyResult termkey_interpret_mouse(TermKey *tk, const TermKeyKey *key, TermKe
if(button) if(button)
*button = 0; *button = 0;
if(col) termkey_key_get_linecol(key, line, col);
*col = (unsigned char)key->code.mouse[1] | ((unsigned char)key->code.mouse[3] & 0x0f) << 8;
if(line)
*line = (unsigned char)key->code.mouse[2] | ((unsigned char)key->code.mouse[3] & 0x70) << 4;
if(!event) if(!event)
return TERMKEY_RES_KEY; return TERMKEY_RES_KEY;