ui/motif/Grid.c

changeset 901
884d70e847a3
parent 900
6e1485d5451a
child 913
3012ec57d84a
--- a/ui/motif/Grid.c	Mon Nov 17 08:27:03 2025 +0100
+++ b/ui/motif/Grid.c	Mon Nov 17 11:28:47 2025 +0100
@@ -75,12 +75,42 @@
         (XtPointer) 0
     },
     {
-        gridMargin,
-        gridMargin,
+        gridPaddingLeft,
+        gridPaddingLeft,
+        XmRDimension,
+        sizeof (Dimension),
+        XtOffsetOf( GridRec,
+                   mywidget.padding_left),
+        XmRImmediate,
+        (XtPointer) 0
+    },
+    {
+        gridPaddingRight,
+        gridPaddingRight,
         XmRDimension,
         sizeof (Dimension),
         XtOffsetOf( GridRec,
-                   mywidget.margin),
+                   mywidget.padding_right),
+        XmRImmediate,
+        (XtPointer) 0
+    },
+    {
+        gridPaddingTop,
+        gridPaddingTop,
+        XmRDimension,
+        sizeof (Dimension),
+        XtOffsetOf( GridRec,
+                   mywidget.padding_top),
+        XmRImmediate,
+        (XtPointer) 0
+    },
+    {
+        gridPaddingBottom,
+        gridPaddingBottom,
+        XmRDimension,
+        sizeof (Dimension),
+        XtOffsetOf( GridRec,
+                   mywidget.padding_bottom),
         XmRImmediate,
         (XtPointer) 0
     }
@@ -406,8 +436,8 @@
     GridDef *rows = calloc(nrows, sizeof(GridDef));
     int num_cols_expanding = 0;
     int num_rows_expanding = 0;
-    int req_width = 0;
-    int req_height = 0;
+    int req_width = w->mywidget.padding_left + w->mywidget.padding_right;
+    int req_height = w->mywidget.padding_top + w->mywidget.padding_bottom;
     
     //printf("container width: %d\n", (int)w->core.width);
     
@@ -428,6 +458,8 @@
             if(constraints->grid.pref_width < constraints->grid.min_width) {
                 constraints->grid.pref_width = constraints->grid.min_width;
             }
+            int elm_width = constraints->grid.pref_width + constraints->grid.margin_left + constraints->grid.margin_right;
+            int elm_height = constraints->grid.pref_height + constraints->grid.margin_top + constraints->grid.margin_bottom;
             
             if(constraints->grid.colspan > span_max || constraints->grid.rowspan > span_max) {
                 continue;
@@ -489,12 +521,12 @@
                     span_width = last_col->size;
                     
                 }
-                int diff = constraints->grid.pref_width - span_width;
+                int diff = elm_width - span_width;
                 if(diff > 0) {
                     last_col->size += diff; 
                 }
-            } else if(constraints->grid.pref_width > col->size) {
-                col->size = constraints->grid.pref_width;
+            } else if(elm_width > col->size) {
+                col->size = elm_width;
             }
             // row size
             if(constraints->grid.rowspan > 1) {
@@ -505,12 +537,12 @@
                     span_height = last_row->size;
                     
                 }
-                int diff = constraints->grid.pref_height - span_height;
+                int diff = elm_height - span_height;
                 if(diff > 0) {
                     last_row->size += diff; 
                 }
-            } else if(constraints->grid.pref_height > row->size) {
-                row->size = constraints->grid.pref_height;
+            } else if(elm_height > row->size) {
+                row->size = elm_height;
             }
         }
         span_max = 50000; // not sure if this is unreasonable low or high
@@ -574,7 +606,7 @@
         hexpand = width_diff / num_cols_expanding;
         hexpand2 = width_diff-hexpand*num_cols_expanding;
     }
-    int x = 0;
+    int x = w->mywidget.padding_left;
     for(int i=0;i<ncols;i++) {
         cols[i].pos = x;
         if(cols[i].expand) {
@@ -592,7 +624,7 @@
         vexpand = height_diff / num_rows_expanding;
         vexpand2 = height_diff-vexpand*num_rows_expanding;
     }
-    int y = 0;
+    int y = w->mywidget.padding_bottom;
     for(int i=0;i<nrows;i++) {
         rows[i].pos = y;
         if(rows[i].expand) {
@@ -608,8 +640,8 @@
         GridConstraintRec *constraints = child->core.constraints;
         GridDef c = cols[constraints->grid.x];
         GridDef r = rows[constraints->grid.y];
-        int x = c.pos;
-        int y = r.pos;
+        int x = c.pos + constraints->grid.margin_left;
+        int y = r.pos + constraints->grid.margin_top;
         int width = constraints->grid.pref_width;
         int height = constraints->grid.pref_height;
         if(constraints->grid.hfill) {

mercurial