ui/win32/container.c

changeset 818
8185cd761897
parent 815
7ddf5fb7ec2a
child 841
651cf2c59dd9
--- a/ui/win32/container.c	Wed Oct 08 15:54:33 2025 +0200
+++ b/ui/win32/container.c	Wed Oct 08 16:09:54 2025 +0200
@@ -69,6 +69,39 @@
     return box_create(obj, args, UI_BOX_HORIZONTAL);
 }
 
+UiContainerX* ui_box_container_create(UiObject *obj, HWND hwnd, UiBoxOrientation orientation, short spacing, GridEdgeInsets padding) {
+    UiBoxContainer *container = cxZalloc(obj->ctx->allocator, sizeof(UiBoxContainer));
+    container->container.hwnd = hwnd;
+    container->container.add = ui_box_container_add;
+    container->layout = ui_grid_layout_create(obj->ctx->allocator, spacing, spacing);
+    container->layout->padding = padding;
+    container->orientation = orientation;
+    return (UiContainerX*)container;
+}
+
+void ui_box_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout) {
+    UiBoxContainer *box = (UiBoxContainer*)ctn;
+    GridLayoutInfo gridLayout = (GridLayoutInfo) {
+        .margin = (GridEdgeInsets) { layout->margin_top, layout->margin_bottom, layout->margin_left, layout->margin_right },
+    };
+    if (box->orientation == UI_BOX_HORIZONTAL) {
+        gridLayout.vexpand = TRUE;
+        gridLayout.vfill = TRUE;
+        gridLayout.hexpand = layout->fill;
+        gridLayout.hfill = layout->fill;
+    } else {
+        gridLayout.hexpand = TRUE;
+        gridLayout.hfill = TRUE;
+        gridLayout.vexpand = layout->fill;
+        gridLayout.vfill = layout->fill;
+    }
+    ui_grid_add_widget(box->layout, box->x, box->y, widget, &gridLayout);
+    if (box->orientation == UI_BOX_HORIZONTAL) {
+        box->x++;
+    } else {
+        box->y++;
+    }
+}
 
 /* ---------------------------- Grid Container ---------------------------- */
 
@@ -80,7 +113,7 @@
     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 = ui_grid_layout_create(obj->ctx->allocator, columnspacing, rowspacing);
     container->layout->padding = padding;
     return (UiContainerX*)container;
 }

mercurial