summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-12-10 10:07:08 -0500
committerPietro Gagliardi <[email protected]>2014-12-10 10:07:08 -0500
commit395521b832acb7f5133f1b2b1920cd31734ed585 (patch)
tree2da4412344315ed34abf7c0b48ff85738a897d2c
parentb2b04c6de406ee58810994c8b74399e93216bb9f (diff)
Moved Table width calculation out of recomputeHScroll() and into updateTableWidth(); also stored width in the Table itself.
-rw-r--r--wintable/new/header.h13
-rw-r--r--wintable/new/hscroll.h13
-rw-r--r--wintable/new/main.c1
3 files changed, 15 insertions, 12 deletions
diff --git a/wintable/new/header.h b/wintable/new/header.h
index 47c13b2..c89b506 100644
--- a/wintable/new/header.h
+++ b/wintable/new/header.h
@@ -55,6 +55,19 @@ static void headerAddColumn(struct table *t, WCHAR *name)
static void updateTableWidth(struct table *t)
{
+ HDITEMW item;
+ intptr_t i;
+
+ t->width = 0;
+ // TODO count dividers?
+ for (i = 0; i < t->nColumns; i++) {
+ ZeroMemory(&item, sizeof (HDITEMW));
+ item.mask = HDI_WIDTH;
+ if (SendMessageW(t->header, HDM_GETITEM, (WPARAM) i, (LPARAM) (&item)) == FALSE)
+ panic("error getting Table column width for updateTableWidth()");
+ t->width += item.cxy;
+ }
+ // TODO replace this with a call to hscrollby(t, 0)
recomputeHScroll(t);
}
diff --git a/wintable/new/hscroll.h b/wintable/new/hscroll.h
index 061cd7b..84ddc3b 100644
--- a/wintable/new/hscroll.h
+++ b/wintable/new/hscroll.h
@@ -18,19 +18,8 @@ static void hscroll(struct table *t, WPARAM wParam, LPARAM lParam)
static void recomputeHScroll(struct table *t)
{
SCROLLINFO si;
- HDITEMW item;
- intptr_t i, width;
RECT r;
- width = 0;
- // TODO count dividers?
- for (i = 0; i < t->nColumns; i++) {
- ZeroMemory(&item, sizeof (HDITEMW));
- item.mask = HDI_WIDTH;
- if (SendMessageW(t->header, HDM_GETITEM, (WPARAM) i, (LPARAM) (&item)) == FALSE)
- panic("error getting Table column width for recomputeHScroll()");
- width += item.cxy;
- }
if (GetClientRect(t->hwnd, &r) == 0)
panic("error getting Table client rect for recomputeHScroll()");
ZeroMemory(&si, sizeof (SCROLLINFO));
@@ -38,7 +27,7 @@ static void recomputeHScroll(struct table *t)
si.fMask = SIF_PAGE | SIF_RANGE;
si.nPage = r.right - r.left;
si.nMin = 0;
- si.nMax = width - 1; // endpoint inclusive
+ si.nMax = t->width - 1; // endpoint inclusive
SetScrollInfo(t->hwnd, SB_HORZ, &si, TRUE);
// TODO what happens if the above call renders the current scroll position moot?
}
diff --git a/wintable/new/main.c b/wintable/new/main.c
index 2a0ccba..79b00ae 100644
--- a/wintable/new/main.c
+++ b/wintable/new/main.c
@@ -52,6 +52,7 @@ struct table {
HFONT font;
intptr_t nColumns;
int *columnTypes;
+ intptr_t width;
};
#include "util.h"