Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions common/control.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,18 @@ void uiControlDisable(uiControl *c)
(*(c->Disable))(c);
}

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)
Expand All @@ -67,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;
}

Expand Down
6 changes: 6 additions & 0 deletions ui.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ struct uiControl {
int (*Enabled)(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))
Expand All @@ -105,6 +109,8 @@ _UI_EXTERN void uiControlHide(uiControl *);
_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 *);
Expand Down
14 changes: 14 additions & 0 deletions ui_unix.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,16 @@ _UI_EXTERN void uiUnixControlSetContainer(uiUnixControl *, GtkContainer *, gbool
{ \
gtk_widget_set_sensitive(type(c)->widget, FALSE); \
}
#define uiUnixControlDefaultSetFocus(type) \
static void type ## SetFocus(uiControl *c) \
{ \
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) \
Expand Down Expand Up @@ -110,6 +120,8 @@ _UI_EXTERN void uiUnixControlSetContainer(uiUnixControl *, GtkContainer *, gbool
uiUnixControlDefaultEnabled(type) \
uiUnixControlDefaultEnable(type) \
uiUnixControlDefaultDisable(type) \
uiUnixControlDefaultSetFocus(type) \
uiUnixControlDefaultSetMinSize(type) \
uiUnixControlDefaultSetContainer(type)

#define uiUnixControlAllDefaults(type) \
Expand All @@ -130,6 +142,8 @@ _UI_EXTERN void uiUnixControlSetContainer(uiUnixControl *, GtkContainer *, gbool
uiControl(var)->Enabled = type ## Enabled; \
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);
Expand Down
13 changes: 13 additions & 0 deletions ui_windows.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,15 @@ _UI_EXTERN void uiWindowsControlChildVisibilityChanged(uiWindowsControl *);
uiWindowsControl(c)->enabled = 0; \
uiWindowsControlSyncEnableState(uiWindowsControl(c), uiControlEnabledToUser(c)); \
}
#define uiWindowsControlDefaultSetFocus(type) \
static void type ## SetFocus(uiControl *c) \
{ \
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) \
{ \
Expand Down Expand Up @@ -152,6 +161,8 @@ _UI_EXTERN void uiWindowsControlChildVisibilityChanged(uiWindowsControl *);
uiWindowsControlDefaultEnabled(type) \
uiWindowsControlDefaultEnable(type) \
uiWindowsControlDefaultDisable(type) \
uiWindowsControlDefaultSetFocus(type) \
uiWindowsControlDefaultSetMinSize(type) \
uiWindowsControlDefaultSyncEnableState(type) \
uiWindowsControlDefaultSetParentHWND(type) \
uiWindowsControlDefaultMinimumSizeChanged(type) \
Expand All @@ -177,6 +188,8 @@ _UI_EXTERN void uiWindowsControlChildVisibilityChanged(uiWindowsControl *);
uiControl(var)->Enabled = type ## Enabled; \
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; \
Expand Down
2 changes: 2 additions & 0 deletions unix/button.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
24 changes: 24 additions & 0 deletions unix/window.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ struct uiWindow {
uiControl *child;
int margined;

int width;
int height;

int (*onClosing)(uiWindow *, void *);
void *onClosingData;
void (*onContentSizeChanged)(uiWindow *, void *);
Expand Down Expand Up @@ -101,17 +104,36 @@ 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)
uiUnixControlDefaultEnabled(uiWindow)
uiUnixControlDefaultEnable(uiWindow)
uiUnixControlDefaultDisable(uiWindow)
uiUnixControlDefaultSetFocus(uiWindow)
uiUnixControlDefaultSetMinSize(uiWindow)
// TODO?
uiUnixControlDefaultSetContainer(uiWindow)

Expand Down Expand Up @@ -252,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);
Expand Down
8 changes: 5 additions & 3 deletions windows/area.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
10 changes: 7 additions & 3 deletions windows/box.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ static void boxRelayout(uiBox *b)
int i;
int minimumWidth, minimumHeight;
int nVisible;
uiWindowsSizing *d;

if (b->controls->size() == 0)
return;
Expand Down Expand Up @@ -143,6 +142,7 @@ uiWindowsControlDefaultHide(uiBox)
uiWindowsControlDefaultEnabled(uiBox)
uiWindowsControlDefaultEnable(uiBox)
uiWindowsControlDefaultDisable(uiBox)
uiWindowsControlDefaultSetFocus(uiBox)

static void uiBoxSyncEnableState(uiWindowsControl *c, int enabled)
{
Expand All @@ -164,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;
Expand Down Expand Up @@ -234,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)

Expand Down
3 changes: 3 additions & 0 deletions windows/button.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -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;
}
Expand All @@ -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);
Expand Down
1 change: 0 additions & 1 deletion windows/colordialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
7 changes: 7 additions & 0 deletions windows/form.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ uiWindowsControlDefaultHide(uiForm)
uiWindowsControlDefaultEnabled(uiForm)
uiWindowsControlDefaultEnable(uiForm)
uiWindowsControlDefaultDisable(uiForm)
uiWindowsControlDefaultSetFocus(uiForm)

static void uiFormSyncEnableState(uiWindowsControl *c, int enabled)
{
Expand Down Expand Up @@ -231,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)

Expand Down
7 changes: 7 additions & 0 deletions windows/grid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,7 @@ uiWindowsControlDefaultHide(uiGrid)
uiWindowsControlDefaultEnabled(uiGrid)
uiWindowsControlDefaultEnable(uiGrid)
uiWindowsControlDefaultDisable(uiGrid)
uiWindowsControlDefaultSetFocus(uiGrid)

static void uiGridSyncEnableState(uiWindowsControl *c, int enabled)
{
Expand Down Expand Up @@ -515,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)

Expand Down
7 changes: 7 additions & 0 deletions windows/group.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ uiWindowsControlDefaultHide(uiGroup)
uiWindowsControlDefaultEnabled(uiGroup)
uiWindowsControlDefaultEnable(uiGroup)
uiWindowsControlDefaultDisable(uiGroup)
uiWindowsControlDefaultSetFocus(uiGroup)

static void uiGroupSyncEnableState(uiWindowsControl *c, int enabled)
{
Expand Down Expand Up @@ -118,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)

Expand Down
7 changes: 7 additions & 0 deletions windows/tab.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ uiWindowsControlDefaultHide(uiTab)
uiWindowsControlDefaultEnabled(uiTab)
uiWindowsControlDefaultEnable(uiTab)
uiWindowsControlDefaultDisable(uiTab)
uiWindowsControlDefaultSetFocus(uiTab)

static void uiTabSyncEnableState(uiWindowsControl *c, int enabled)
{
Expand Down Expand Up @@ -163,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)

Expand Down
6 changes: 6 additions & 0 deletions windows/window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ static void uiWindowHide(uiControl *c)
uiWindowsControlDefaultEnabled(uiWindow)
uiWindowsControlDefaultEnable(uiWindow)
uiWindowsControlDefaultDisable(uiWindow)
uiWindowsControlDefaultSetFocus(uiWindow)
// TODO we need to do something about undocumented fields in the OS control types
uiWindowsControlDefaultSyncEnableState(uiWindow)
// TODO
Expand Down Expand Up @@ -273,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)
Expand Down