Implemented tabPreferredSize(). This finally eliminates windows/OLDtab.c.

This commit is contained in:
Pietro Gagliardi 2015-06-02 10:20:59 -04:00
parent a48aa36251
commit 884bd5c862
2 changed files with 26 additions and 35 deletions

View File

@ -1,34 +0,0 @@
// 12 april 2015
#include "uipriv_windows.h"
// from http://msdn.microsoft.com/en-us/library/windows/desktop/bb226818%28v=vs.85%29.aspx
#define tabMargin 7
static void tabPreferredSize(uiControl *c, uiSizing *d, intmax_t *width, intmax_t *height)
{
struct tab *t = (struct tab *) c;
LRESULT current;
struct tabPage *curpage;
intmax_t curwid, curht;
RECT r;
r.left = 0;
r.top = 0;
r.right = 0;
r.bottom = 0;
if (t->pages->len != 0) {
current = SendMessageW(t->hwnd, TCM_GETCURSEL, 0, 0);
if (current != (LRESULT) (-1)) {
curpage = ptrArrayIndex(t->pages, struct tabPage *, current);
uiControlPreferredSize(curpage->control, d, &curwid, &curht);
r.right = curwid;
r.bottom = curht;
// TODO add margins
}
}
// otherwise just use the rect [0 0 0 0]
// the following will take the tabs themselves into account
SendMessageW(t->hwnd, TCM_ADJUSTRECT, (WPARAM) TRUE, (LPARAM) (&r));
*width = r.right - r.left;
*height = r.bottom - r.top;
}

View File

@ -96,7 +96,32 @@ static uintptr_t tabHandle(uiControl *c)
static void tabPreferredSize(uiControl *c, uiSizing *d, intmax_t *width, intmax_t *height)
{
// TODO
struct tab *t = (struct tab *) c;
intmax_t maxwid, maxht;
intmax_t pagewid, pageht;
uiControl *page;
uintmax_t i;
RECT r;
maxwid = 0;
maxht = 0;
for (i = 0; i < t->pages->len; i++) {
page = ptrArrayIndex(t->pages, uiControl *, i);
uiControlPreferredSize(page, d, &pagewid, &pageht);
if (maxwid < pagewid)
maxwid = pagewid;
if (maxht < pageht)
maxht = pageht;
}
r.left = 0;
r.top = 0;
r.right = maxwid;
r.bottom = maxht;
// this also includes the tabs themselves
SendMessageW(t->hwnd, TCM_ADJUSTRECT, (WPARAM) TRUE, (LPARAM) (&r));
*width = r.right - r.left;
*height = r.bottom - r.top;
}
static void tabResize(uiControl *c, intmax_t x, intmax_t y, intmax_t width, intmax_t height, uiSizing *d)