Added redrawRow() to the Windows Table and changed WM_SETFOCUS/WM_KILLFOCUS handling to use it. It will be used for selections later.

This commit is contained in:
Pietro Gagliardi 2014-11-17 10:21:43 -05:00
parent c8f732c44b
commit d893ba6c03
1 changed files with 19 additions and 2 deletions

View File

@ -159,6 +159,24 @@ static intptr_t lastVisible(struct table *t, RECT cliprect, LONG rowHeight)
return last;
}
static void redrawRow(struct table *t, intptr_t row)
{
RECT r;
intptr_t height;
r = realClientRect(t);
height = rowHeight(t);
if (row < t->firstVisible || row > lastVisible(t, r, height)) // not visible; don't bother
return;
r.top = (row - t->firstVisible) * height + t->headerHeight;
r.bottom = r.top + height;
// keep the width and height the same; it spans the client area anyway
if (InvalidateRect(t->hwnd, &r, TRUE) == 0)
abort();
if (UpdateWindow(t->hwnd) == 0)
abort();
}
static intptr_t hitTestColumn(struct table *t, int x)
{
HDITEMW item;
@ -744,9 +762,8 @@ if (ImageList_GetIconSize(t->imagelist, &unused, &(t->imagelistHeight)) == 0)abo
case WM_SETFOCUS:
case WM_KILLFOCUS:
// all we need to do here is redraw the highlight
// TODO localize to just the selected item
// TODO ensure giving focus works right
redrawAll(t);
redrawRow(t, t->selected);
return 0;
case WM_KEYDOWN:
keySelect(t, wParam, lParam);