commit - ce5cff68317a7e6bcdb306fb3e3b90522fa4aa17
commit + fc23a23235265e1be44aaef99f0de5fa1c2fd6dc
blob - 00cb7edb8b62653cdc08c56db41e34eb1717f758
blob + fbb8bb7084e2803bef965e8d4a7caa3015a23f38
--- aui.h
+++ aui.h
unsigned int row;
unsigned int columnspan;
unsigned int rowspan;
+#define AUI_STICKY_NONE 0
+#define AUI_STICKY_N 1
+#define AUI_STICKY_E 2
+#define AUI_STICKY_S 4
+#define AUI_STICKY_W 8
+ unsigned char sticky;
};
struct aui_gridconfigure {
blob - aa382cf73f012f687df1b1dd50c3bb81e0bf7a90
blob + 8ba115519e8858ea39f30c5e4efc9db0e44e8070
--- examples/acalc/acalc.c
+++ examples/acalc/acalc.c
{ 255, 255, 255, 255 },
};
+static const unsigned char s = AUI_STICKY_N | AUI_STICKY_S | AUI_STICKY_E | AUI_STICKY_W;
+
static struct binfo binfo[] = {
- { CLASS_CLR, { .text = "C", .foreground = theme[0] }, { .row = 0, .columnspan = 3 } },
- { CLASS_DIV, { .text = "/", .foreground = theme[0] }, { .row = 0, .column = 3 } },
+ { CLASS_CLR, { .text = "C", .foreground = theme[0] }, { .row = 0, .columnspan = 3, .sticky = s } },
+ { CLASS_DIV, { .text = "/", .foreground = theme[0] }, { .row = 0, .column = 3, .sticky = s } },
- { CLASS_DGT, { .text = "7", .foreground = theme[0] }, { .row = 1, .column = 0 } },
- { CLASS_DGT, { .text = "8", .foreground = theme[0] }, { .row = 1, .column = 1 } },
- { CLASS_DGT, { .text = "9", .foreground = theme[0] }, { .row = 1, .column = 2 } },
- { CLASS_MUL, { .text = "*", .foreground = theme[0] }, { .row = 1, .column = 3 } },
+ { CLASS_DGT, { .text = "7", .foreground = theme[0] }, { .row = 1, .column = 0, .sticky = s } },
+ { CLASS_DGT, { .text = "8", .foreground = theme[0] }, { .row = 1, .column = 1, .sticky = s } },
+ { CLASS_DGT, { .text = "9", .foreground = theme[0] }, { .row = 1, .column = 2, .sticky = s } },
+ { CLASS_MUL, { .text = "*", .foreground = theme[0] }, { .row = 1, .column = 3, .sticky = s } },
- { CLASS_DGT, { .text = "4", .foreground = theme[0] }, { .row = 2, .column = 0 } },
- { CLASS_DGT, { .text = "5", .foreground = theme[0] }, { .row = 2, .column = 1 } },
- { CLASS_DGT, { .text = "6", .foreground = theme[0] }, { .row = 2, .column = 2 } },
- { CLASS_SUB, { .text = "-", .foreground = theme[0] }, { .row = 2, .column = 3 } },
+ { CLASS_DGT, { .text = "4", .foreground = theme[0] }, { .row = 2, .column = 0, .sticky = s } },
+ { CLASS_DGT, { .text = "5", .foreground = theme[0] }, { .row = 2, .column = 1, .sticky = s } },
+ { CLASS_DGT, { .text = "6", .foreground = theme[0] }, { .row = 2, .column = 2, .sticky = s } },
+ { CLASS_SUB, { .text = "-", .foreground = theme[0] }, { .row = 2, .column = 3, .sticky = s } },
- { CLASS_DGT, { .text = "1", .foreground = theme[0] }, { .row = 3, .column = 0 } },
- { CLASS_DGT, { .text = "2", .foreground = theme[0] }, { .row = 3, .column = 1 } },
- { CLASS_DGT, { .text = "3", .foreground = theme[0] }, { .row = 3, .column = 2 } },
- { CLASS_ADD, { .text = "+", .foreground = theme[0] }, { .row = 3, .column = 3 } },
+ { CLASS_DGT, { .text = "1", .foreground = theme[0] }, { .row = 3, .column = 0, .sticky = s } },
+ { CLASS_DGT, { .text = "2", .foreground = theme[0] }, { .row = 3, .column = 1, .sticky = s } },
+ { CLASS_DGT, { .text = "3", .foreground = theme[0] }, { .row = 3, .column = 2, .sticky = s } },
+ { CLASS_ADD, { .text = "+", .foreground = theme[0] }, { .row = 3, .column = 3, .sticky = s } },
- { CLASS_DGT, { .text = "0", .foreground = theme[0] }, { .row = 4, .columnspan = 3 } },
- { CLASS_EQU, { .text = "=", .foreground = theme[0] }, { .row = 4, .column = 3 } },
+ { CLASS_DGT, { .text = "0", .foreground = theme[0] }, { .row = 4, .columnspan = 3, .sticky = s } },
+ { CLASS_EQU, { .text = "=", .foreground = theme[0] }, { .row = 4, .column = 3, .sticky = s } },
};
void
aui_grid(AUI_WIDGET(btn), &binfo[i].par);
}
- for (int i = 0; i < 5; i++) {
+ for (int i = 0; i < 4; i++) {
struct aui_gridconfigure config = { .weight = 1 };
aui_columnconfigure(AUI_WIDGET(buttons_frame), i, &config);
}
blob - b8f5646351c9899a8c49e7317a9657dce12e57eb
blob + 6e27a689d7b8b7658aa07e81d7bc962f14ced7f2
--- layout.c
+++ layout.c
unsigned int cspan = child->gridpar.columnspan;
unsigned int rspan = child->gridpar.rowspan;
unsigned int column = child->gridpar.column;
+ unsigned char sticky = child->gridpar.sticky;
unsigned int row = child->gridpar.row;
- struct aui_geometry geom;
+ struct aui_geometry geom, dims;
geom.width = csize[column];
geom.height = rsize[row];
geom.x = widget->geom.x + cpos[column + cspan - 1] - geom.width;
geom.y = widget->geom.y + rpos[row + rspan - 1] - geom.height;
- child->ops->set_geometry(child, &geom);
+ dims = child->ops->get_min_size(child);
+ dims.x = geom.x;
+ dims.y = geom.y;
+
+ if (dims.width > geom.width || ((sticky & AUI_STICKY_E) && (sticky & AUI_STICKY_W)))
+ dims.width = geom.width;
+
+ if (dims.height > geom.height || ((sticky & AUI_STICKY_N) && (sticky & AUI_STICKY_S)))
+ dims.height = geom.height;
+
+ if (sticky & AUI_STICKY_S)
+ dims.y = geom.y + geom.height - dims.height;
+
+ if (sticky & AUI_STICKY_E)
+ dims.x = geom.x + geom.width - dims.width;
+
+ child->ops->set_geometry(child, &dims);
}
TAILQ_FOREACH(child, &widget->queue, entries) {