diff -r f5ddce392617 -r 7b5ba65b246f ui/cocoa/GridLayout.m --- a/ui/cocoa/GridLayout.m Mon Oct 06 19:29:41 2025 +0200 +++ b/ui/cocoa/GridLayout.m Tue Oct 07 14:59:11 2025 +0200 @@ -58,6 +58,9 @@ } */ +- (BOOL)isFlipped { + return YES; +} - (void) layout { int ncols = _cols+1; @@ -66,7 +69,8 @@ GridDef *cols = calloc(ncols, sizeof(GridDef)); GridDef *rows = calloc(nrows, sizeof(GridDef)); - NSRect viewFrame = self.frame; + //NSRect viewFrame = self.frame; + NSRect viewFrame = self.bounds; int colspacing = _columnspacing; int rowspacing = _rowspacing; @@ -249,7 +253,6 @@ GridDef *col = &cols[elm->x]; GridDef *row = &rows[elm->y]; - NSEdgeInsets alignment = elm->view.alignmentRectInsets; NSRect frame; if(elm->hfill) { if(elm->colspan > 1) { @@ -266,12 +269,12 @@ if(real_span > 0) { cwidth += (real_span-1) * colspacing; } - frame.size.width = cwidth + alignment.left + alignment.right; + frame.size.width = cwidth; } else { - frame.size.width = col->size + alignment.left + alignment.right; + frame.size.width = col->size; } } else { - frame.size.width = elm->preferred_width + alignment.left + alignment.right; + frame.size.width = elm->preferred_width; } frame.size.width -= elm->margin.left + elm->margin.right; if(elm->vfill) { @@ -295,11 +298,11 @@ } else { frame.size.height = elm->preferred_height; } - 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 - elm->margin.top - frame.size.height; - elm->view.frame = frame; + + frame.origin.x = col->pos + elm->margin.left; + frame.origin.y = row->pos + elm->margin.top; + NSRect viewFrame = [elm->view frameForAlignmentRect:frame]; + elm->view.frame = viewFrame; } free(cols);