Sun, 05 Oct 2025 13:30:19 +0200
add new margin widget args and implement margin in the cocoa gridlayout
| make/xcode/toolkit/toolkit/main.m | file | annotate | diff | comparison | revisions | |
| ui/cocoa/GridLayout.m | file | annotate | diff | comparison | revisions | |
| ui/cocoa/container.h | file | annotate | diff | comparison | revisions | |
| ui/cocoa/container.m | file | annotate | diff | comparison | revisions | |
| ui/cocoa/toolkit.m | file | annotate | diff | comparison | revisions | |
| ui/ui/button.h | file | annotate | diff | comparison | revisions | |
| ui/ui/container.h | file | annotate | diff | comparison | revisions | |
| ui/ui/display.h | file | annotate | diff | comparison | revisions | |
| ui/ui/entry.h | file | annotate | diff | comparison | revisions | |
| ui/ui/image.h | file | annotate | diff | comparison | revisions | |
| ui/ui/text.h | file | annotate | diff | comparison | revisions | |
| ui/ui/tree.h | file | annotate | diff | comparison | revisions | |
| ui/ui/webview.h | file | annotate | diff | comparison | revisions | |
| ui/ui/widget.h | file | annotate | diff | comparison | revisions |
--- a/make/xcode/toolkit/toolkit/main.m Sun Oct 05 12:34:42 2025 +0200 +++ b/make/xcode/toolkit/toolkit/main.m Sun Oct 05 13:30:19 2025 +0200 @@ -131,9 +131,22 @@ } //*/ + ui_grid(obj, .fill = TRUE, .margin = 10, .columnspacing = 10, .rowspacing = 10) { + ui_button(obj, .label = "Button 1"); + ui_button(obj, .label = "Button 2"); + ui_button(obj, .label = "Button 3", .hfill = TRUE, .hexpand = TRUE); + ui_newline(obj); + + ui_button(obj, .label = "Button X2", .colspan = 3, .hfill = TRUE); + ui_newline(obj); + + ui_textarea(obj, .varname = "text", .fill = TRUE, .colspan = 3); + } + + /* ui_button(obj, .label = "HBox Button 1"); ui_button(obj, .label = "HBox Button 2"); - ui_grid(obj, .fill = TRUE, .columnspacing = 20, .rowspacing = 10) { + ui_grid(obj, .fill = TRUE, .columnspacing = 20, .rowspacing = 10, .margin = 50) { ui_hbox(obj, .spacing = 8, .colspan = 1) { ui_button(obj, .label = "HBox Button 1"); ui_button(obj, .label = "HBox Button 2"); @@ -149,6 +162,7 @@ ui_button(obj, .label = "textfield", .hfill = TRUE); } ui_button(obj, .label = "HBox Button 3"); + */ /* ui_grid(obj, .spacing = 0, .fill = TRUE) {
--- a/ui/cocoa/GridLayout.m Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/cocoa/GridLayout.m Sun Oct 05 13:30:19 2025 +0200 @@ -80,6 +80,10 @@ GridDef *col = &cols[x]; GridDef *row = &rows[y]; + if(elm->margin.left + elm->margin.right > 0) { + printf(""); // break + } + NSSize size = elm->view.intrinsicContentSize; NSSize size2 = elm->view.fittingSize; if(size.width == NSViewNoIntrinsicMetric) { @@ -89,21 +93,21 @@ size.height = size2.height; } if(size.width != NSViewNoIntrinsicMetric) { - CGFloat width = size.width; + CGFloat width = size.width + elm->margin.left + elm->margin.right; if(width > cols[elm->x].preferred_size && elm->colspan <= 1 && span_max == 1) { cols[elm->x].preferred_size = width; } elm->preferred_width = width; } if(size.height != NSViewNoIntrinsicMetric) { - CGFloat height = size.height; - //CGFloat height = size.height; + CGFloat height = size.height + elm->margin.top + elm->margin.bottom; if(height > rows[elm->y].preferred_size && elm->rowspan <= 1 && span_max == 1) { rows[elm->y].preferred_size = height; } elm->preferred_height = height; } + if(elm->rowspan > span_max || elm->colspan > span_max) { continue; } @@ -254,16 +258,22 @@ if(end_col > ncols) { end_col = ncols; } + int real_span = 0; for(int c=elm->x;c<end_col;c++) { cwidth += cols[c].size; + real_span++; } - frame.size.width = cwidth + + alignment.left + alignment.right; + if(real_span > 0) { + cwidth += (real_span-1) * colspacing; + } + frame.size.width = cwidth + alignment.left + alignment.right; } else { frame.size.width = col->size + alignment.left + alignment.right; } } else { frame.size.width = elm->preferred_width + alignment.left + alignment.right; } + frame.size.width -= elm->margin.left + elm->margin.right; if(elm->vfill) { if(elm->rowspan > 1) { int rheight = 0; @@ -271,8 +281,13 @@ if(end_row > nrows) { end_row = nrows; } + int real_span = 0; for(int r=elm->y;r<end_row;r++) { rheight += rows[r].size; + real_span++; + } + if(real_span > 0) { + rheight += (real_span-1) * rowspacing; } frame.size.height = rheight; } @@ -280,9 +295,10 @@ } else { frame.size.height = elm->preferred_height; } - frame.origin.x = col->pos - (alignment.left+alignment.right)/2; + frame.size.height -= elm->margin.top + elm->margin.bottom; + frame.origin.x = col->pos + elm->margin.left - (alignment.left+alignment.right)/2; //frame.origin.y = viewFrame.size.height - row->pos - frame.size.height + ((alignment.top+alignment.right)/2); - frame.origin.y = viewFrame.size.height - row->pos - frame.size.height; + frame.origin.y = viewFrame.size.height - row->pos - elm->margin.top - frame.size.height; elm->view.frame = frame; }
--- a/ui/cocoa/container.h Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/cocoa/container.h Sun Oct 05 13:30:19 2025 +0200 @@ -51,6 +51,11 @@ UiBool hfill; UiBool vfill; //int width; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; }; @@ -61,6 +66,11 @@ .vexpand = args->vexpand, \ .hfill = args->hfill, \ .vfill = args->vfill, \ + .margin = args->margin, \ + .margin_left = args->margin_left, \ + .margin_right = args->margin_right, \ + .margin_top = args->margin_top, \ + .margin_bottom = args->margin_bottom, \ .colspan = args->colspan, \ .rowspan = args->rowspan }
--- a/ui/cocoa/container.m Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/cocoa/container.m Sun Oct 05 13:30:19 2025 +0200 @@ -162,7 +162,18 @@ UiContainerX *ctn = obj->container_end; id<Container> container = (__bridge id<Container>)ctn->container; container.uilayout = *layout; - NSEdgeInsets margin = {0}; // TODO + NSEdgeInsets margin = {0}; + if(layout->margin > 0) { + margin.left = layout->margin; + margin.right = layout->margin; + margin.top = layout->margin; + margin.bottom = layout->margin; + } else { + margin.left = layout->margin_left; + margin.right = layout->margin_right; + margin.top = layout->margin_top; + margin.bottom = layout->margin_bottom; + } [container addView:view margin:margin]; }
--- a/ui/cocoa/toolkit.m Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/cocoa/toolkit.m Sun Oct 05 13:30:19 2025 +0200 @@ -64,7 +64,6 @@ uic_init_global_context(); - uic_docmgr_init(); uic_menu_init(); uic_toolbar_init();
--- a/ui/ui/button.h Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/ui/button.h Sun Oct 05 13:30:19 2025 +0200 @@ -48,6 +48,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name; @@ -70,6 +75,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name; @@ -95,6 +105,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name;
--- a/ui/ui/container.h Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/ui/container.h Sun Oct 05 13:30:19 2025 +0200 @@ -65,12 +65,16 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name; const char *style_class; - int margin; int spacing; int columnspacing; int rowspacing; @@ -87,6 +91,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name; @@ -94,7 +103,6 @@ UiSubContainerType subcontainer; - int margin; int spacing; int columnspacing; int rowspacing; @@ -110,6 +118,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name; @@ -124,7 +137,6 @@ UiInteger *value; const char* varname; - int margin; int spacing; int columnspacing; int rowspacing; @@ -153,6 +165,10 @@ const char *name; const char *style_class; int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int spacing; } UiSidebarArgs; @@ -163,12 +179,16 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name; const char *style_class; - int margin; int spacing; int columnspacing; int rowspacing; @@ -187,12 +207,16 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name; const char *style_class; - int margin; int spacing; int sub_margin; @@ -339,7 +363,7 @@ UIEXPORT int ui_container_finish(UiObject *obj); #define UI_APPLY_LAYOUT1(obj, args) \ - if(args.fill != UI_DEFAULT) ui_layout_fill(obj, args.fill == UI_ON ? 1 : 0 ); \ + if(args.fill) ui_layout_fill(obj, 1); \ if(args.hexpand) ui_layout_hexpand(obj, 1); \ if(args.vexpand) ui_layout_vexpand(obj, 1); \ if(args.hfill) ui_layout_hfill(obj, 1); \ @@ -350,7 +374,7 @@ /*force caller to add ';'*/(void)0 #define UI_APPLY_LAYOUT2(obj, args) \ - if(args->fill != UI_DEFAULT) ui_layout_fill(obj, args->fill == UI_ON ? 1 : 0 ); \ + if(args->fill) ui_layout_fill(obj, 1); \ if(args->hexpand) ui_layout_hexpand(obj, 1); \ if(args->vexpand) ui_layout_vexpand(obj, 1); \ if(args->hfill) ui_layout_hfill(obj, 1); \
--- a/ui/ui/display.h Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/ui/display.h Sun Oct 05 13:30:19 2025 +0200 @@ -56,6 +56,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name; @@ -75,6 +80,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; int width; @@ -94,6 +104,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name;
--- a/ui/ui/entry.h Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/ui/entry.h Sun Oct 05 13:30:19 2025 +0200 @@ -43,6 +43,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; int width;
--- a/ui/ui/image.h Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/ui/image.h Sun Oct 05 13:30:19 2025 +0200 @@ -51,6 +51,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name;
--- a/ui/ui/text.h Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/ui/text.h Sun Oct 05 13:30:19 2025 +0200 @@ -42,9 +42,15 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; int width; + int height; const char *name; const char *style_class; @@ -63,6 +69,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; int width; @@ -97,6 +108,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name;
--- a/ui/ui/tree.h Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/ui/tree.h Sun Oct 05 13:30:19 2025 +0200 @@ -118,6 +118,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name; @@ -191,6 +196,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name;
--- a/ui/ui/webview.h Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/ui/webview.h Sun Oct 05 13:30:19 2025 +0200 @@ -39,12 +39,17 @@ #define UI_WEBVIEW_OBJECT_TYPE "webview" typedef struct UiWebviewArgs { - UiTri fill; + UiBool fill; UiBool hexpand; UiBool vexpand; UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name;
--- a/ui/ui/widget.h Sun Oct 05 12:34:42 2025 +0200 +++ b/ui/ui/widget.h Sun Oct 05 13:30:19 2025 +0200 @@ -41,6 +41,11 @@ UiBool hfill; UiBool vfill; UiBool override_defaults; + int margin; + int margin_left; + int margin_right; + int margin_top; + int margin_bottom; int colspan; int rowspan; const char *name;