Migrated tab.cpp to the new system and fixed a few bugs.
This commit is contained in:
parent
447aa75dc6
commit
9f12fbff89
|
@ -38,27 +38,16 @@ static void tabPageRect(uiTab *t, RECT *r)
|
||||||
mapWindowRect(NULL, t->hwnd, &r);
|
mapWindowRect(NULL, t->hwnd, &r);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL tabNeedsGrowing(uiTab *t)
|
|
||||||
{
|
|
||||||
intmax_t pageMinWidth, pageMinHeight;
|
|
||||||
RECT r;
|
|
||||||
|
|
||||||
if (t->pages()->size() == 0)
|
|
||||||
return FALSE;
|
|
||||||
tabPageMinimumSize(tabPage(t, curpage(t)), &pageMinWidth, &pageMinHeight);
|
|
||||||
tabPageRect(t, &r);
|
|
||||||
if ((r.right - r.left) < pageMinWidth)
|
|
||||||
return TRUE;
|
|
||||||
if ((r.bottom - r.top) < pageMinHeight)
|
|
||||||
return TRUE;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void tabRelayout(uiTab *t)
|
static void tabRelayout(uiTab *t)
|
||||||
{
|
{
|
||||||
struct tabPage *page;
|
struct tabPage *page;
|
||||||
RECT r;
|
RECT r;
|
||||||
|
|
||||||
|
// first move the tab control itself
|
||||||
|
uiWindowsEnsureGetClientRect(t->hwnd, &r);
|
||||||
|
uiWindowsEnsureMoveWindowDuringResize(t->tabHWND, r.left, r.top, r.right - r.left, r.bottom - r.top);
|
||||||
|
|
||||||
|
// then the current page
|
||||||
if (t->pages->size() == 0)
|
if (t->pages->size() == 0)
|
||||||
return;
|
return;
|
||||||
page = tabPage(t, curpage(t));
|
page = tabPage(t, curpage(t));
|
||||||
|
@ -78,12 +67,7 @@ static void showHidePage(uiTab *t, LRESULT which, int hide)
|
||||||
else {
|
else {
|
||||||
ShowWindow(page->hwnd, SW_SHOW);
|
ShowWindow(page->hwnd, SW_SHOW);
|
||||||
// we only resize the current page, so we have to resize it; before we can do that, we need to make sure we are of the right size
|
// we only resize the current page, so we have to resize it; before we can do that, we need to make sure we are of the right size
|
||||||
if (tabNeedsGrowing(t))
|
uiWindowsControlMinimumSizeChanged(uiWindowsControl(t));
|
||||||
// it will be laid out as a result of the following
|
|
||||||
uiWindowsControlNotifyMinimumSizeChanged(uiWindowsControl(t));
|
|
||||||
else // it can fit; just do it in place
|
|
||||||
// TODO DuringResize semantics
|
|
||||||
tabRelayout(t);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,11 +160,15 @@ static void uiTabChildMinimumSizeChanged(uiWindowsControl *c)
|
||||||
{
|
{
|
||||||
uiTab *t = uiTab(c);
|
uiTab *t = uiTab(c);
|
||||||
|
|
||||||
if (tabNeedsGrowing(t))
|
if (uiWindowsControlTooSmall(uiWindowsControl(t))) {
|
||||||
uiWindowsControlNotifyMinimumSizeChanged(uiWindowsControl(t));
|
uiWindowsControlContinueMinimumSizeChanged(uiWindowsControl(t));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tabRelayout(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
uiWindowsDefaultAssignControlIDZorder(uiTab)
|
uiWindowsControlDefaultLayoutRect(uiTab)
|
||||||
|
uiWindowsControlDefaultAssignControlIDZorder(uiTab)
|
||||||
|
|
||||||
static void tabArrangePages(uiTab *t)
|
static void tabArrangePages(uiTab *t)
|
||||||
{
|
{
|
||||||
|
@ -270,9 +258,9 @@ void uiTabSetMargined(uiTab *t, uintmax_t n, int margined)
|
||||||
uiWindowsControlChildMinimumSizeChanged(uiWindowsControl(t));
|
uiWindowsControlChildMinimumSizeChanged(uiWindowsControl(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void onResize(void *data)
|
static void onResize(uiWindowsControl *c)
|
||||||
{
|
{
|
||||||
tabRelayout(uiTab(data));
|
tabRelayout(uiTab(c));
|
||||||
}
|
}
|
||||||
|
|
||||||
uiTab *uiNewTab(void)
|
uiTab *uiNewTab(void)
|
||||||
|
@ -281,7 +269,7 @@ uiTab *uiNewTab(void)
|
||||||
|
|
||||||
uiWindowsNewControl(uiTab, t);
|
uiWindowsNewControl(uiTab, t);
|
||||||
|
|
||||||
t->hwnd = uiWindowsMakeContainer(onResize, t);
|
t->hwnd = uiWindowsMakeContainer(uiWindowsControl(t), onResize);
|
||||||
|
|
||||||
t->tabHWND = uiWindowsEnsureCreateControlHWND(0,
|
t->tabHWND = uiWindowsEnsureCreateControlHWND(0,
|
||||||
WC_TABCONTROLW, L"",
|
WC_TABCONTROLW, L"",
|
||||||
|
|
Loading…
Reference in New Issue