libui/redo/windows/child.c

87 lines
1.6 KiB
C
Raw Normal View History

2015-08-30 17:45:45 -05:00
// 28 august 2015
#include "uipriv_windows.h"
// This file contains helpers for managing child controls.
struct child {
uiControl *c;
HWND hwnd;
HWND parent;
// This flag is for users of these functions.
// For uiBox, this is "spaced".
// For uiTab, this is "margined". (uiGroup and uiWindow have to maintain their margined state themselves, since the margined state is independent of whether there is a child for those two.)
int flag;
};
struct child *newChild(uiControl *child, uiControl *parent, HWND parentHWND)
{
struct child *c;
if (child == NULL)
return NULL;
c = uiNew(struct child);
c->c = child;
c->hwnd = (HWND) uiControlHandle(c->c);
uiControlSetParent(c->c, parent);
uiWindowsEnsureSetParent(c->hwnd, parentHWND);
c->parent = parentHWND;
return c;
}
void childRemove(struct child *c)
{
uiWindowsEnsureSetParent(c->hwnd, utilwin);
uiControlSetParent(c->c, NULL);
uiFree(c);
}
void childDestroy(struct child *c)
{
uiControl *child;
child = c->c;
childRemove(c);
uiControlDestroy(child);
}
HWND childHWND(struct child *c)
{
return c->hwnd;
}
void childMinimumSize(struct child *c, uiWindowsSizing *d, intmax_t *width, intmax_t *height)
{
uiWindowsControl *wc;
wc = uiWindowsControl(c->c);
(*(wc->MinimumSize))(wc, d, width, height);
}
void childRelayout(struct child *c, intmax_t x, intmax_t y, intmax_t width, intmax_t height)
{
uiWindowsControl *wc;
wc = uiWindowsControl(c->c);
(*(wc->Relayout))(wc, x, y, width, height);
}
void childUpdateState(struct child *c)
{
controlUpdateState(c->c);
}
int childFlag(struct child *c)
{
return c->flag;
}
void childSetFlag(struct child *c, int flag)
{
c->flag = flag;
}