fix(engine): redraw only for visible caret changes
This commit is contained in:
@@ -370,6 +370,7 @@ void
|
||||
engine_active_owner_caret(struct ct *t)
|
||||
{
|
||||
Caret a, moved;
|
||||
Drawcmd dc;
|
||||
char one, two;
|
||||
|
||||
memset(&a, 0, sizeof a);
|
||||
@@ -380,14 +381,37 @@ engine_active_owner_caret(struct ct *t)
|
||||
moved = a;
|
||||
moved.x = 80;
|
||||
init();
|
||||
im.l = getlang(LangJP);
|
||||
ownerrequestat(&one, Keypress, 'k', 0, &a);
|
||||
draindraw(nil);
|
||||
im.l = getlang(LangEN);
|
||||
ownerrequestat(&one, Keypress, 'x', 0, &a);
|
||||
CT_CHECK(t, caret.valid);
|
||||
CT_EQ_INT(t, 10, caret.x);
|
||||
ownerrequestat(&two, Keycaret, 0, 0, &moved);
|
||||
CT_EQ_INT(t, 10, caret.x);
|
||||
ownerrequestat(&one, Keycaret, 0, 0, &moved);
|
||||
CT_EQ_INT(t, 80, caret.x);
|
||||
CT_EQ_INT(t, 0, draindraw(nil));
|
||||
im.kouho[0] = mkstr("candidate");
|
||||
im.nkouho = 1;
|
||||
im.sel = 0;
|
||||
redraw();
|
||||
if(CT_CHECK(t, draindraw(&dc) > 0))
|
||||
CT_EQ_INT(t, 80, dc.caret.x);
|
||||
moved.x = 90;
|
||||
ownerrequestat(&two, Keycaret, 0, 0, &moved);
|
||||
CT_EQ_INT(t, 80, caret.x);
|
||||
CT_EQ_INT(t, 0, draindraw(nil));
|
||||
ownerrequestat(&one, Keycaret, 0, 0, &moved);
|
||||
CT_EQ_INT(t, 90, caret.x);
|
||||
if(CT_CHECK(t, draindraw(&dc) > 0))
|
||||
CT_EQ_INT(t, 90, dc.caret.x);
|
||||
ownerrequestat(&one, Keycaret, 0, 0, &moved);
|
||||
CT_EQ_INT(t, 0, draindraw(nil));
|
||||
ownerrequestat(&one, Keypress, 'x', 0, &moved);
|
||||
CT_EQ_INT(t, 0, draindraw(nil));
|
||||
moved.x = 100;
|
||||
ownerrequestat(&one, Keypress, 'x', 0, &moved);
|
||||
CT_EQ_INT(t, 100, caret.x);
|
||||
if(CT_CHECK(t, draindraw(&dc) > 0))
|
||||
CT_EQ_INT(t, 100, dc.caret.x);
|
||||
ownerrequest(&two, Keypress, 'n', 0);
|
||||
CT_EQ_PTR(t, &two, activeowner);
|
||||
CT_CHECK(t, !caret.valid);
|
||||
|
||||
Reference in New Issue
Block a user