--- a/ui/win32/container.c Wed Oct 08 10:41:35 2025 +0200 +++ b/ui/win32/container.c Wed Oct 08 12:36:16 2025 +0200 @@ -27,8 +27,10 @@ */ #include "container.h" +#include "grid.h" #include "../common/context.h" +#include "../common/container.h" UiContainerPrivate* ui_obj_container(UiObject *obj) { return (UiContainerPrivate*)obj->container_end; @@ -39,7 +41,14 @@ } void ui_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout) { - ctn->add(ctn, widget, layout); + UiLayout layout2 = *layout; + if (layout2.margin > 0) { + layout2.margin_left = layout2.margin; + layout2.margin_right = layout2.margin; + layout2.margin_top = layout2.margin; + layout2.margin_bottom = layout2.margin; + } + ctn->add(ctn, widget, &layout2); ctn->container.newline = FALSE; } @@ -67,13 +76,33 @@ return NULL; } -UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short padding_top, short padding_bottom, short padding_left, short padding_right) { +UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short columnspacing, short rowspacing, GridEdgeInsets padding) { UiGridLayoutContainer *container = cxZalloc(obj->ctx->allocator, sizeof(UiGridLayoutContainer)); container->container.hwnd = hwnd; container->container.add = ui_grid_container_add; + container->layout = ui_grid_layout_create(obj->ctx->allocator, hwnd, columnspacing, rowspacing); + container->layout->padding = padding; return (UiContainerX*)container; } void ui_grid_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout) { - // TODO + UiGridLayoutContainer *grid = (UiGridLayoutContainer*)ctn; + if (ctn->container.newline) { + grid->y++; + grid->x = 0; + } + + uic_layout_setup_expand_fill(layout, grid->def_hexpand, grid->def_vexpand, grid->def_hfill, grid->def_vfill); + GridLayoutInfo gridLayout = (GridLayoutInfo) { + .margin = (GridEdgeInsets) { layout->margin_top, layout->margin_bottom, layout->margin_left, layout->margin_right }, + .colspan = layout->colspan, + .rowspan = layout->rowspan, + .hexpand = layout->hexpand, + .vexpand = layout->vexpand, + .hfill = layout->hfill, + .vfill = layout->vfill, + }; + ui_grid_add_widget(grid->layout, grid->x, grid->y, widget, &gridLayout); + + grid->x++; }