--- a/ui/win32/container.c Sun Oct 12 09:17:37 2025 +0200 +++ b/ui/win32/container.c Sun Oct 12 12:01:03 2025 +0200 @@ -31,6 +31,16 @@ #include "../common/context.h" #include "../common/container.h" +#include "../motif/container.h" + + +static W32WidgetClass grid_layout_widget_class = { + .eventproc = NULL, + .enable = NULL, + .show = w32_widget_default_show, + .get_preferred_size = ui_grid_layout_get_preferred_size, + .destroy = w32_widget_default_destroy +}; UiContainerPrivate* ui_obj_container(UiObject *obj) { return (UiContainerPrivate*)obj->container_end; @@ -52,6 +62,14 @@ ctn->container.newline = FALSE; } +W32Size ui_grid_layout_get_preferred_size(W32Widget *widget) { + UiGridLayout *grid = widget->layoutmanager; + W32Size size; + size.width = grid->preferred_width; + size.height = grid->preferred_height; + return size; +} + /* ---------------------------- Box Container ---------------------------- */ @@ -106,7 +124,35 @@ /* ---------------------------- Grid Container ---------------------------- */ UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) { - return NULL; + HINSTANCE hInstance = GetModuleHandle(NULL); + UiContainerPrivate *container = ui_obj_container(obj); + HWND parent = ui_container_get_parent(container); + UiLayout layout = UI_ARGS2LAYOUT(args); + + HWND hwnd = CreateWindowEx( + 0, + TEXT("STATIC"), + NULL, + WS_CHILD | WS_VISIBLE | WS_BORDER, + 0, 0, 100, 100, + parent, + NULL, + hInstance, + NULL); + + W32Widget *widget = w32_widget_new(&grid_layout_widget_class, hwnd); + ui_container_add(container, widget, &layout); + + UiContainerX *gridContainer = ui_grid_container_create(obj, hwnd, args->columnspacing, args->rowspacing, INSETS_ZERO); + uic_object_push_container(obj, gridContainer); + + UiGridLayoutContainer *grid = (UiGridLayoutContainer*)gridContainer; + widget->layout = (W32LayoutFunc)ui_grid_layout; + widget->layoutmanager = grid->layout; + grid->layout->preferred_width = 200; + grid->layout->preferred_height = 200; + + return widget; } UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short columnspacing, short rowspacing, GridEdgeInsets padding) { @@ -139,3 +185,20 @@ grid->x++; } + + +/* ---------------------------- Container Helper ---------------------------- */ + +void ui_container_begin_close(UiObject *obj) { + UiContainerX *ct = obj->container_end; + ct->close = 1; +} + +int ui_container_finish(UiObject *obj) { + UiContainerX *ct = obj->container_end; + if(ct->close) { + ui_end_new(obj); + return 0; + } + return 1; +} \ No newline at end of file