summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2015-01-08 01:55:45 -0500
committerPietro Gagliardi <[email protected]>2015-01-08 01:55:45 -0500
commitce64650aadf1f7dd751a1f753dff920ba1652edf (patch)
treea4fdecd9310e2a74ab54cc53eef3cfc308d7efaa
parent592ae7a987d2b795c5f508a17520b313f8d17481 (diff)
Added updateAll() and resolved WM_SETFONT to begin the final reasoning-through of update().
-rw-r--r--wintable/api.h13
-rw-r--r--wintable/main.h3
-rw-r--r--wintable/update.h11
3 files changed, 16 insertions, 11 deletions
diff --git a/wintable/api.h b/wintable/api.h
index 3d36379..f6895e5 100644
--- a/wintable/api.h
+++ b/wintable/api.h
@@ -15,22 +15,17 @@ static void addColumn(struct table *t, WPARAM wParam, LPARAM lParam)
HANDLER(apiHandlers)
{
intptr_t *rcp;
- BOOL tfbool;
switch (uMsg) {
case WM_SETFONT:
// don't free the old font; see http://blogs.msdn.com/b/oldnewthing/archive/2008/09/12/8945692.aspx
t->font = (HFONT) wParam;
SendMessageW(t->header, WM_SETFONT, wParam, lParam);
- // let's ensure the values are strictly TRUE and FALSE just to be safe
- tfbool = FALSE;
+ // if we redraw, we have to redraw ALL of it; after all, the font changed!
if (LOWORD(lParam) != FALSE)
- tfbool = TRUE;
- update(t, tfbool);
- // TODO is this needed?
- if (tfbool != FALSE)
- // TODO check error
- InvalidateRect(t->hwnd, NULL, TRUE);
+ updateAll(t); // DONE
+ else
+ update(t, FALSE); // DONE
*lResult = 0;
return TRUE;
case WM_GETFONT:
diff --git a/wintable/main.h b/wintable/main.h
index ba85e7a..ff86c35 100644
--- a/wintable/main.h
+++ b/wintable/main.h
@@ -103,8 +103,9 @@ struct table {
// forward declaration (TODO needed?)
static LRESULT notify(struct table *, UINT, intptr_t, intptr_t, uintptr_t);
-// necessary forward declaration
+// necessary forward declarations
static void update(struct table *, BOOL);
+static void updateAll(struct table *);
#include "util.h"
#include "coord.h"
diff --git a/wintable/update.h b/wintable/update.h
index b04f445..edf4b40 100644
--- a/wintable/update.h
+++ b/wintable/update.h
@@ -3,6 +3,8 @@
// Whenever a number of things in the Table changes, the update() function needs to be called to update any metrics and scrolling positions.
// The control font changing is the big one, as that comes with a flag that decides whether or not to redraw everything. We'll need to respect that here.
+// For my personal convenience, each invocation of update() and updateAll() will be suffixed with a DONE comment once I have reasoned that the chosen function is correct and that no additional redrawing is necessary.
+
// TODO actually use redraw here
static void update(struct table *t, BOOL redraw)
{
@@ -39,6 +41,13 @@ static void update(struct table *t, BOOL redraw)
t->vpagesize = height / rowht(t);
// and do a dummy vertical scroll to apply that
vscrollby(t, 0);
+}
- // TODO invalidate /everything/?
+// this is the same as update(), but also redraws /everything/
+// as such, redraw is TRUE
+static void updateAll(struct table *t)
+{
+ update(t, TRUE);
+ if (InvalidateRect(t, NULL, TRUE) == 0)
+ panic("error queueing all of Table for redraw in updateAll()");
}