[melonDS] uiControlSetMinSize
This commit is contained in:
parent
0de1a8ec30
commit
d5d8b7c9f2
|
@ -62,6 +62,13 @@ void uiControlSetFocus(uiControl *c)
|
|||
(*(c->SetFocus))(c);
|
||||
}
|
||||
|
||||
void uiControlSetMinSize(uiControl *c, int w, int h)
|
||||
{
|
||||
c->MinWidth = w;
|
||||
c->MinHeight = h;
|
||||
(*(c->SetMinSize))(c, w, h);
|
||||
}
|
||||
|
||||
#define uiprivControlSignature 0x7569436F
|
||||
|
||||
uiControl *uiAllocControl(size_t size, uint32_t OSsig, uint32_t typesig, const char *typenamestr)
|
||||
|
@ -72,6 +79,10 @@ uiControl *uiAllocControl(size_t size, uint32_t OSsig, uint32_t typesig, const c
|
|||
c->Signature = uiprivControlSignature;
|
||||
c->OSSignature = OSsig;
|
||||
c->TypeSignature = typesig;
|
||||
|
||||
c->MinWidth = -1;
|
||||
c->MinHeight = -1;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
|
4
ui.h
4
ui.h
|
@ -92,6 +92,9 @@ struct uiControl {
|
|||
void (*Enable)(uiControl *);
|
||||
void (*Disable)(uiControl *);
|
||||
void (*SetFocus)(uiControl *);
|
||||
void (*SetMinSize)(uiControl*, int, int);
|
||||
|
||||
int MinWidth, MinHeight;
|
||||
};
|
||||
// TOOD add argument names to all arguments
|
||||
#define uiControl(this) ((uiControl *) (this))
|
||||
|
@ -107,6 +110,7 @@ _UI_EXTERN int uiControlEnabled(uiControl *);
|
|||
_UI_EXTERN void uiControlEnable(uiControl *);
|
||||
_UI_EXTERN void uiControlDisable(uiControl *);
|
||||
_UI_EXTERN void uiControlSetFocus(uiControl *);
|
||||
_UI_EXTERN void uiControlSetMinSize(uiControl *, int w, int h); // -1 = no minimum
|
||||
|
||||
_UI_EXTERN uiControl *uiAllocControl(size_t n, uint32_t OSsig, uint32_t typesig, const char *typenamestr);
|
||||
_UI_EXTERN void uiFreeControl(uiControl *);
|
||||
|
|
|
@ -88,6 +88,11 @@ _UI_EXTERN void uiUnixControlSetContainer(uiUnixControl *, GtkContainer *, gbool
|
|||
{ \
|
||||
gtk_widget_grab_focus(type(c)->widget); \
|
||||
}
|
||||
#define uiUnixControlDefaultSetMinSize(type) \
|
||||
static void type ## SetMinSize(uiControl *c, int w, int h) \
|
||||
{ \
|
||||
gtk_widget_set_size_request(type(c)->widget, w, h); \
|
||||
}
|
||||
// TODO this whole addedBefore stuff is a MASSIVE HACK.
|
||||
#define uiUnixControlDefaultSetContainer(type) \
|
||||
static void type ## SetContainer(uiUnixControl *c, GtkContainer *container, gboolean remove) \
|
||||
|
@ -116,6 +121,7 @@ _UI_EXTERN void uiUnixControlSetContainer(uiUnixControl *, GtkContainer *, gbool
|
|||
uiUnixControlDefaultEnable(type) \
|
||||
uiUnixControlDefaultDisable(type) \
|
||||
uiUnixControlDefaultSetFocus(type) \
|
||||
uiUnixControlDefaultSetMinSize(type) \
|
||||
uiUnixControlDefaultSetContainer(type)
|
||||
|
||||
#define uiUnixControlAllDefaults(type) \
|
||||
|
@ -137,6 +143,7 @@ _UI_EXTERN void uiUnixControlSetContainer(uiUnixControl *, GtkContainer *, gbool
|
|||
uiControl(var)->Enable = type ## Enable; \
|
||||
uiControl(var)->Disable = type ## Disable; \
|
||||
uiControl(var)->SetFocus = type ## SetFocus; \
|
||||
uiControl(var)->SetMinSize = type ## SetMinSize; \
|
||||
uiUnixControl(var)->SetContainer = type ## SetContainer;
|
||||
// TODO document
|
||||
_UI_EXTERN uiUnixControl *uiUnixAllocControl(size_t n, uint32_t typesig, const char *typenamestr);
|
||||
|
|
|
@ -107,6 +107,10 @@ _UI_EXTERN void uiWindowsControlChildVisibilityChanged(uiWindowsControl *);
|
|||
{ \
|
||||
SetFocus(type(c)->hwnd); \
|
||||
}
|
||||
#define uiWindowsControlDefaultSetMinSize(type) \
|
||||
static void type ## SetMinSize(uiControl *c, int w, int h) \
|
||||
{ \
|
||||
}
|
||||
#define uiWindowsControlDefaultSyncEnableState(type) \
|
||||
static void type ## SyncEnableState(uiWindowsControl *c, int enabled) \
|
||||
{ \
|
||||
|
@ -158,6 +162,7 @@ _UI_EXTERN void uiWindowsControlChildVisibilityChanged(uiWindowsControl *);
|
|||
uiWindowsControlDefaultEnable(type) \
|
||||
uiWindowsControlDefaultDisable(type) \
|
||||
uiWindowsControlDefaultSetFocus(type) \
|
||||
uiWindowsControlDefaultSetMinSize(type) \
|
||||
uiWindowsControlDefaultSyncEnableState(type) \
|
||||
uiWindowsControlDefaultSetParentHWND(type) \
|
||||
uiWindowsControlDefaultMinimumSizeChanged(type) \
|
||||
|
@ -184,6 +189,7 @@ _UI_EXTERN void uiWindowsControlChildVisibilityChanged(uiWindowsControl *);
|
|||
uiControl(var)->Enable = type ## Enable; \
|
||||
uiControl(var)->Disable = type ## Disable; \
|
||||
uiControl(var)->SetFocus = type ## SetFocus; \
|
||||
uiControl(var)->SetMinSize = type ## SetMinSize; \
|
||||
uiWindowsControl(var)->SyncEnableState = type ## SyncEnableState; \
|
||||
uiWindowsControl(var)->SetParentHWND = type ## SetParentHWND; \
|
||||
uiWindowsControl(var)->MinimumSize = type ## MinimumSize; \
|
||||
|
|
|
@ -51,5 +51,7 @@ uiButton *uiNewButton(const char *text)
|
|||
g_signal_connect(b->widget, "clicked", G_CALLBACK(onClicked), b);
|
||||
uiButtonOnClicked(b, defaultOnClicked, NULL);
|
||||
|
||||
gtk_widget_set_size_request(b->widget, 64, 1);
|
||||
|
||||
return b;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,9 @@ struct uiWindow {
|
|||
uiControl *child;
|
||||
int margined;
|
||||
|
||||
int width;
|
||||
int height;
|
||||
|
||||
int (*onClosing)(uiWindow *, void *);
|
||||
void *onClosingData;
|
||||
void (*onContentSizeChanged)(uiWindow *, void *);
|
||||
|
@ -101,11 +104,28 @@ uiUnixControlDefaultVisible(uiWindow)
|
|||
static void uiWindowShow(uiControl *c)
|
||||
{
|
||||
uiWindow *w = uiWindow(c);
|
||||
int width;
|
||||
int height;
|
||||
|
||||
// don't use gtk_widget_show_all() as that will show all children, regardless of user settings
|
||||
// don't use gtk_widget_show(); that doesn't bring to front or give keyboard focus
|
||||
// (gtk_window_present() does call gtk_widget_show() though)
|
||||
gtk_window_present(w->window);
|
||||
|
||||
// set the size properly
|
||||
width = w->width;
|
||||
height = w->height;
|
||||
if (w->menubar) {
|
||||
GtkRequisition min, nat;
|
||||
int menuheight;
|
||||
|
||||
gtk_widget_get_preferred_size(w->menubar, &min, &nat);
|
||||
menuheight = min.height;
|
||||
if (nat.height > menuheight)
|
||||
menuheight = nat.height;
|
||||
height += menuheight;
|
||||
}
|
||||
gtk_window_resize(w->window, width, height);
|
||||
}
|
||||
|
||||
uiUnixControlDefaultHide(uiWindow)
|
||||
|
@ -113,6 +133,7 @@ uiUnixControlDefaultEnabled(uiWindow)
|
|||
uiUnixControlDefaultEnable(uiWindow)
|
||||
uiUnixControlDefaultDisable(uiWindow)
|
||||
uiUnixControlDefaultSetFocus(uiWindow)
|
||||
uiUnixControlDefaultSetMinSize(uiWindow)
|
||||
// TODO?
|
||||
uiUnixControlDefaultSetContainer(uiWindow)
|
||||
|
||||
|
@ -253,6 +274,8 @@ uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar)
|
|||
if (hasMenubar) {
|
||||
w->menubar = uiprivMakeMenubar(uiWindow(w));
|
||||
gtk_container_add(w->vboxContainer, w->menubar);
|
||||
} else {
|
||||
w->menubar = NULL;
|
||||
}
|
||||
|
||||
w->childHolderWidget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
|
||||
|
|
|
@ -55,9 +55,11 @@ uiWindowsControlAllDefaults(uiArea)
|
|||
|
||||
static void uiAreaMinimumSize(uiWindowsControl *c, int *width, int *height)
|
||||
{
|
||||
// TODO
|
||||
*width = 0;
|
||||
*height = 0;
|
||||
*width = c->c.MinWidth;
|
||||
if (*width < 1) *width = 1;
|
||||
|
||||
*height = c->c.MinHeight;
|
||||
if (*height < 1) *height = 1;
|
||||
}
|
||||
|
||||
ATOM registerAreaClass(HICON hDefaultIcon, HCURSOR hDefaultCursor)
|
||||
|
|
|
@ -38,7 +38,6 @@ static void boxRelayout(uiBox *b)
|
|||
int i;
|
||||
int minimumWidth, minimumHeight;
|
||||
int nVisible;
|
||||
uiWindowsSizing *d;
|
||||
|
||||
if (b->controls->size() == 0)
|
||||
return;
|
||||
|
@ -165,10 +164,8 @@ static void uiBoxMinimumSize(uiWindowsControl *c, int *width, int *height)
|
|||
// these two contain the largest minimum width and height of all stretchy controls in the box
|
||||
// all stretchy controls will use this value to determine the final minimum size
|
||||
int maxStretchyWidth, maxStretchyHeight;
|
||||
int i;
|
||||
int minimumWidth, minimumHeight;
|
||||
int nVisible;
|
||||
uiWindowsSizing sizing;
|
||||
|
||||
*width = 0;
|
||||
*height = 0;
|
||||
|
@ -235,6 +232,12 @@ static void uiBoxMinimumSizeChanged(uiWindowsControl *c)
|
|||
boxRelayout(b);
|
||||
}
|
||||
|
||||
static void uiBoxSetMinSize(uiControl *c, int w, int h)
|
||||
{
|
||||
// checkme
|
||||
uiBoxMinimumSizeChanged(uiWindowsControl(c));
|
||||
}
|
||||
|
||||
uiWindowsControlDefaultLayoutRect(uiBox)
|
||||
uiWindowsControlDefaultAssignControlIDZOrder(uiBox)
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ uiWindowsControlAllDefaultsExceptDestroy(uiButton)
|
|||
|
||||
// from http://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx#sizingandspacing
|
||||
#define buttonHeight 14
|
||||
#define buttonMinWidth 64
|
||||
|
||||
static void uiButtonMinimumSize(uiWindowsControl *c, int *width, int *height)
|
||||
{
|
||||
|
@ -45,6 +46,7 @@ static void uiButtonMinimumSize(uiWindowsControl *c, int *width, int *height)
|
|||
size.cy = 0;
|
||||
if (SendMessageW(b->hwnd, BCM_GETIDEALSIZE, 0, (LPARAM) (&size)) != FALSE) {
|
||||
*width = size.cx;
|
||||
if (*width < buttonMinWidth) *width = buttonMinWidth;
|
||||
*height = size.cy;
|
||||
return;
|
||||
}
|
||||
|
@ -53,6 +55,7 @@ static void uiButtonMinimumSize(uiWindowsControl *c, int *width, int *height)
|
|||
// Microsoft says to use a fixed width for all buttons; this isn't good enough
|
||||
// use the text width instead, with some edge padding
|
||||
*width = uiWindowsWindowTextWidth(b->hwnd) + (2 * GetSystemMetrics(SM_CXEDGE));
|
||||
if (*width < buttonMinWidth) *width = buttonMinWidth;
|
||||
y = buttonHeight;
|
||||
uiWindowsGetSizing(b->hwnd, &sizing);
|
||||
uiWindowsSizingDlgUnitsToPixels(&sizing, NULL, &y);
|
||||
|
|
|
@ -87,7 +87,6 @@ static void hsv2RGB(double h, double s, double v, double *r, double *g, double *
|
|||
int h60;
|
||||
double x;
|
||||
double m;
|
||||
double c1, c2;
|
||||
|
||||
c = v * s;
|
||||
hPrime = h * 6;
|
||||
|
|
|
@ -232,6 +232,12 @@ static void uiFormMinimumSizeChanged(uiWindowsControl *c)
|
|||
formRelayout(f);
|
||||
}
|
||||
|
||||
static void uiFormSetMinSize(uiControl *c, int w, int h)
|
||||
{
|
||||
// checkme
|
||||
uiFormMinimumSizeChanged(uiWindowsControl(c));
|
||||
}
|
||||
|
||||
uiWindowsControlDefaultLayoutRect(uiForm)
|
||||
uiWindowsControlDefaultAssignControlIDZOrder(uiForm)
|
||||
|
||||
|
|
|
@ -516,6 +516,12 @@ static void uiGridMinimumSizeChanged(uiWindowsControl *c)
|
|||
gridRelayout(g);
|
||||
}
|
||||
|
||||
static void uiGridSetMinSize(uiControl *c, int w, int h)
|
||||
{
|
||||
// checkme
|
||||
uiGridMinimumSizeChanged(uiWindowsControl(c));
|
||||
}
|
||||
|
||||
uiWindowsControlDefaultLayoutRect(uiGrid)
|
||||
uiWindowsControlDefaultAssignControlIDZOrder(uiGrid)
|
||||
|
||||
|
|
|
@ -119,6 +119,12 @@ static void uiGroupMinimumSizeChanged(uiWindowsControl *c)
|
|||
groupRelayout(g);
|
||||
}
|
||||
|
||||
static void uiGroupSetMinSize(uiControl *c, int w, int h)
|
||||
{
|
||||
// checkme
|
||||
uiGroupMinimumSizeChanged(uiWindowsControl(c));
|
||||
}
|
||||
|
||||
uiWindowsControlDefaultLayoutRect(uiGroup)
|
||||
uiWindowsControlDefaultAssignControlIDZOrder(uiGroup)
|
||||
|
||||
|
|
|
@ -164,6 +164,12 @@ static void uiTabMinimumSizeChanged(uiWindowsControl *c)
|
|||
tabRelayout(t);
|
||||
}
|
||||
|
||||
static void uiTabSetMinSize(uiControl *c, int w, int h)
|
||||
{
|
||||
// checkme
|
||||
uiTabMinimumSizeChanged(uiWindowsControl(c));
|
||||
}
|
||||
|
||||
uiWindowsControlDefaultLayoutRect(uiTab)
|
||||
uiWindowsControlDefaultAssignControlIDZOrder(uiTab)
|
||||
|
||||
|
|
|
@ -274,6 +274,11 @@ static void uiWindowLayoutRect(uiWindowsControl *c, RECT *r)
|
|||
uiWindowsEnsureGetClientRect(w->hwnd, r);
|
||||
}
|
||||
|
||||
static void uiWindowSetMinSize(uiControl *c, int w, int h)
|
||||
{
|
||||
// TODO: relayout, eventually
|
||||
}
|
||||
|
||||
uiWindowsControlDefaultAssignControlIDZOrder(uiWindow)
|
||||
|
||||
static void uiWindowChildVisibilityChanged(uiWindowsControl *c)
|
||||
|
|
Loading…
Reference in New Issue