Added vertical scroll. The drawing code will now need updating...

This commit is contained in:
Pietro Gagliardi 2014-12-12 15:20:34 -05:00
parent 2013a3a753
commit 2da55f35a6
3 changed files with 71 additions and 0 deletions

View File

@ -68,6 +68,7 @@ struct table {
#include "events.h" #include "events.h"
#include "scroll.h" #include "scroll.h"
#include "hscroll.h" #include "hscroll.h"
#include "vscroll.h"
#include "header.h" #include "header.h"
#include "children.h" #include "children.h"
#include "resize.h" #include "resize.h"
@ -81,6 +82,7 @@ static const handlerfunc handlers[] = {
drawHandlers, drawHandlers,
apiHandlers, apiHandlers,
hscrollHandler, hscrollHandler,
vscrollHandler,
NULL, NULL,
}; };

View File

@ -7,15 +7,33 @@
HANDLER(resizeHandler) HANDLER(resizeHandler)
{ {
WINDOWPOS *wp; WINDOWPOS *wp;
RECT client;
intptr_t height;
if (uMsg != WM_WINDOWPOSCHANGED) if (uMsg != WM_WINDOWPOSCHANGED)
return FALSE; return FALSE;
wp = (WINDOWPOS *) lParam; wp = (WINDOWPOS *) lParam;
if ((wp->flags & SWP_NOSIZE) != 0) if ((wp->flags & SWP_NOSIZE) != 0)
return FALSE; return FALSE;
// TODO does wp store the window rect or the client rect?
if (GetClientRect(t->hwnd, &client) == 0)
panic("error getting Table client rect in resizeHandler()");
// TODO do this before calling updateTableWidth() (which calls repositionHeader()?)?
client.top -= t->headerHeight;
// update the width...
// this will call repositionHeader(); there's a good reason... (see comments) // this will call repositionHeader(); there's a good reason... (see comments)
// TODO when I clean that mess up, remove this comment // TODO when I clean that mess up, remove this comment
updateTableWidth(t); updateTableWidth(t);
// ...and the height
// TODO find out if order matters
height = client.bottom - client.top;
t->vpagesize = height / rowht(t);
// do a dummy scroll to reflect those changes
vscrollby(t, 0);
*lResult = 0; *lResult = 0;
return TRUE; return TRUE;
} }

51
wintable/new/vscroll.h Normal file
View File

@ -0,0 +1,51 @@
// 9 december 2014
// forward declaration needed here
static void repositionHeader(struct table *);
static struct scrollParams vscrollParams(struct table *t)
{
struct scrollParams p;
ZeroMemory(&p, sizeof (struct scrollParams));
p.pos = &(t->vscrollpos);
p.pagesize = t->vpagesize;
p.length = t->count;
p.scale = rowht(t);
p.post = NULL;
return p;
}
static void vscrollto(struct table *t, intptr_t pos)
{
struct scrollParams p;
p = vscrollParams(t);
scrollto(t, SB_VERT, &p, pos);
}
static void vscrollby(struct table *t, intptr_t delta)
{
struct scrollParams p;
p = vscrollParams(t);
scrollby(t, SB_VERT, &p, delta);
}
static void vscroll(struct table *t, WPARAM wParam, LPARAM lParam)
{
struct scrollParams p;
p = vscrollParams(t);
scroll(t, SB_VERT, &p, wParam, lParam);
}
// TODO WM_MOUSEWHEEL
HANDLER(vscrollHandler)
{
if (uMsg != WM_VSCROLL)
return FALSE;
vscroll(t, wParam, lParam);
*lResult = 0;
return TRUE;
}