From 9e07f271aa93ad49fd7a4a1f1f134cd1fd500eb8 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Tue, 23 Dec 2014 14:43:33 -0500 Subject: [PATCH] Draw whole selected row properly this time (full background on row, focus rect on cell). More TODOs. --- wintable/new/draw.h | 11 +++++++++-- wintable/new/main.c | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/wintable/new/draw.h b/wintable/new/draw.h index 409a1ad..135f1df 100644 --- a/wintable/new/draw.h +++ b/wintable/new/draw.h @@ -19,12 +19,12 @@ static void drawCell(struct table *t, HDC dc, struct drawCellParams *p) int textColor; POINT pt; int cbState; + RECT cellrect; // TODO verify these two background = (HBRUSH) (COLOR_WINDOW + 1); textColor = COLOR_WINDOWTEXT; - // TODO get rid of the selectedColumn bits - if (t->selectedRow == p->row && t->selectedColumn == p->column) { + if (t->selectedRow == p->row) { // these are the colors wine uses (http://source.winehq.org/source/dlls/comctl32/listview.c) // the two for unfocused are also suggested by http://stackoverflow.com/questions/10428710/windows-forms-inactive-highlight-color background = (HBRUSH) (COLOR_HIGHLIGHT + 1); @@ -42,6 +42,7 @@ static void drawCell(struct table *t, HDC dc, struct drawCellParams *p) r.bottom = p->y + p->height; if (FillRect(dc, &r, background) == 0) panic("error filling Table cell background"); + cellrect = r; // save for drawing the focus rect switch (t->columnTypes[p->column]) { case tableColumnText: @@ -72,8 +73,14 @@ static void drawCell(struct table *t, HDC dc, struct drawCellParams *p) drawCheckbox(t, dc, &r, cbState); break; } + + // TODO in front of or behind the cell contents? + if (t->selectedRow == p->row && t->selectedColumn == p->column) + if (DrawFocusRect(dc, &cellrect) == 0) + panic("error drawing focus rect on current Table cell"); } +// TODO use cliprect static void draw(struct table *t, HDC dc, RECT cliprect, RECT client) { intptr_t i, j; diff --git a/wintable/new/main.c b/wintable/new/main.c index e0fce2e..0baf096 100644 --- a/wintable/new/main.c +++ b/wintable/new/main.c @@ -34,6 +34,7 @@ // - going right from column 0 to column 2 with the right arrow key deselects // - make sure all error messages involving InvalidateRect() are consistent with regards to "redrawing" and "queueing for redraw" // - collect all resize-related tasks in a single function (so things like adding columns will refresh everything, not just horizontal scrolls; also would fix initial coordinates) +// - checkbox columns don't clip to the column width #define tableWindowClass L"gouitable"