aboutsummaryrefslogtreecommitdiff
path: root/src/libui_sdl
diff options
context:
space:
mode:
authorStapleButter <thetotalworm@gmail.com>2017-10-02 01:58:09 +0200
committerStapleButter <thetotalworm@gmail.com>2017-10-02 01:58:09 +0200
commit09920126ddcc84d98e333287566d8483ad3410a8 (patch)
treeede915edf24788c3998cdfc7adef5249f47a7e7a /src/libui_sdl
parentce592a1d80db2eb1de0dc5ac55c2270e3a6befb3 (diff)
add support for setting an explicit min size for libui controls. for now only supported by uiArea.
Diffstat (limited to 'src/libui_sdl')
-rw-r--r--src/libui_sdl/libui/common/control.c12
-rw-r--r--src/libui_sdl/libui/ui.h3
-rw-r--r--src/libui_sdl/libui/windows/area.cpp8
-rw-r--r--src/libui_sdl/main.cpp1
4 files changed, 21 insertions, 3 deletions
diff --git a/src/libui_sdl/libui/common/control.c b/src/libui_sdl/libui/common/control.c
index 771a29d..f811728 100644
--- a/src/libui_sdl/libui/common/control.c
+++ b/src/libui_sdl/libui/common/control.c
@@ -62,6 +62,14 @@ void uiControlSetFocus(uiControl *c)
(*(c->SetFocus))(c);
}
+void uiControlSetMinSize(uiControl *c, int w, int h)
+{
+ c->MinWidth = w;
+ c->MinHeight = h;
+
+ // TODO: resize if needed
+}
+
#define uiControlSignature 0x7569436F
uiControl *uiAllocControl(size_t size, uint32_t OSsig, uint32_t typesig, const char *typenamestr)
@@ -72,6 +80,10 @@ uiControl *uiAllocControl(size_t size, uint32_t OSsig, uint32_t typesig, const c
c->Signature = uiControlSignature;
c->OSSignature = OSsig;
c->TypeSignature = typesig;
+
+ c->MinWidth = -1;
+ c->MinHeight = -1;
+
return c;
}
diff --git a/src/libui_sdl/libui/ui.h b/src/libui_sdl/libui/ui.h
index d072ac2..f1937e2 100644
--- a/src/libui_sdl/libui/ui.h
+++ b/src/libui_sdl/libui/ui.h
@@ -73,6 +73,8 @@ struct uiControl {
void (*Enable)(uiControl *);
void (*Disable)(uiControl *);
void (*SetFocus)(uiControl *);
+
+ int MinWidth, MinHeight;
};
// TOOD add argument names to all arguments
#define uiControl(this) ((uiControl *) (this))
@@ -88,6 +90,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 *);
diff --git a/src/libui_sdl/libui/windows/area.cpp b/src/libui_sdl/libui/windows/area.cpp
index 3257631..74fe768 100644
--- a/src/libui_sdl/libui/windows/area.cpp
+++ b/src/libui_sdl/libui/windows/area.cpp
@@ -55,9 +55,11 @@ uiWindowsControlAllDefaults(uiArea)
static void uiAreaMinimumSize(uiWindowsControl *c, int *width, int *height)
{
- // TODO
- *width = 1;
- *height = 1;
+ *width = c->c.MinWidth;
+ if (*width < 1) *width = 1;
+
+ *height = c->c.MinHeight;
+ if (*height < 1) *height = 1;
}
ATOM registerAreaClass(HICON hDefaultIcon, HCURSOR hDefaultCursor)
diff --git a/src/libui_sdl/main.cpp b/src/libui_sdl/main.cpp
index 241d9b7..1d5fcae 100644
--- a/src/libui_sdl/main.cpp
+++ b/src/libui_sdl/main.cpp
@@ -592,6 +592,7 @@ int main(int argc, char** argv)
MainDrawArea = uiNewArea(&areahandler);
uiWindowSetChild(MainWindow, uiControl(MainDrawArea));
+ uiControlSetMinSize(uiControl(MainDrawArea), 256, 384);
EmuRunning = 2;
RunningSomething = false;