ui/win32/grid.c

Sun, 07 Dec 2025 20:00:33 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 07 Dec 2025 20:00:33 +0100
changeset 114
3da24640513a
parent 112
c3f2f16fa4b8
permissions
-rw-r--r--

fix settings dialog doesn't open when there is no .dav/config.xml file

108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2025 Olaf Wintermann. All rights reserved.
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include "grid.h"
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include "../../ucx/cx/array_list.h"
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 #include "../common/context.h"
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33
112
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
34 #include <stdio.h>
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
35 #include <stdlib.h>
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
36
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
37 UiGridLayout* ui_grid_layout_create(const CxAllocator *a, short columnspacing, short rowspacing) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
38 UiGridLayout *grid = cxZalloc(a, sizeof(UiGridLayout));
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
39 grid->widgets = cxArrayListCreate(a, NULL, sizeof(GridElm), 32);
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 grid->columnspacing = columnspacing;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 grid->rowspacing = rowspacing;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 return grid;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 }
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 void ui_grid_add_widget(
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 UiGridLayout *grid,
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 short x,
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 short y,
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 W32Widget *widget,
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 GridLayoutInfo *layout)
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 {
112
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
52 // add the widget
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 GridElm elm;
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 elm.widget = widget;
112
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
55 elm.gridx = x;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
56 elm.gridy = y;
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 elm.layout = *layout;
112
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
58 cxListAdd(grid->widgets, &elm);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
59
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
60 // adjust max col/row count
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
61 if (x > grid->max_column) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
62 grid->max_column = x;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
63 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
64 if (y > grid->max_row) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
65 grid->max_row = y;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
66 }
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 }
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68
112
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
69 void ui_grid_layout(UiGridLayout *grid, int width, int height) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
70 if (width == 0 || height == 0) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
71 return;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
72 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
73
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
74 int ncols = grid->max_column+1;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
75 int nrows = grid->max_row+1;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
76
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
77 GridDef *cols = calloc(ncols, sizeof(GridDef));
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
78 GridDef *rows = calloc(nrows, sizeof(GridDef));
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
79
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
80 int colspacing = grid->columnspacing;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
81 int rowspacing = grid->rowspacing;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
82
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
83 int span_max = 1;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
84 for(int r=0;r<2;r++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
85 CxIterator i = cxListIterator(grid->widgets);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
86 cx_foreach(GridElm *, elm, i) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
87 int x = elm->gridx;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
88 int y = elm->gridy;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
89 GridDef *col = &cols[x];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
90 GridDef *row = &rows[y];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
91
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
92 W32Size size = w32_widget_get_preferred_size(elm->widget);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
93 elm->layout.preferred_width = size.width;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
94 elm->layout.preferred_height = size.height;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
95
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
96 int elm_width = size.width + elm->layout.margin.left + elm->layout.margin.right;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
97 if(elm_width > cols[elm->gridx].preferred_size && elm->layout.colspan <= 1 && span_max == 1) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
98 cols[elm->gridx].preferred_size = elm_width;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
99 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
100 int elm_height = size.height + elm->layout.margin.top + elm->layout.margin.bottom;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
101 if(elm_height > rows[elm->gridy].preferred_size && elm->layout.rowspan <= 1 && span_max == 1) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
102 rows[elm->gridy].preferred_size = elm_height;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
103 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
104
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
105 if(elm->layout.rowspan > span_max || elm->layout.colspan > span_max) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
106 continue;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
107 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
108
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
109 int end_col = x+elm->layout.colspan;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
110 if(end_col > ncols) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
111 end_col = ncols;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
112 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
113 int end_row = y+elm->layout.rowspan;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
114 if(end_row > nrows) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
115 end_row = nrows;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
116 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
117
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
118 // are all columns in the span > preferred_width?
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
119 if(elm->layout.colspan > 1) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
120 int span_width = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
121 GridDef *last_col = col;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
122 for(int c=x;c<end_col;c++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
123 span_width += cols[c].size;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
124 last_col = &cols[c];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
125 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
126 if(span_width < elm->layout.preferred_width) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
127 last_col->size += elm->layout.preferred_width - span_width;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
128 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
129 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
130
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
131 // are all rows in the span > preferred_height?
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
132 if(elm->layout.rowspan > 1) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
133 int span_height = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
134 GridDef *last_row = row;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
135 for(int c=x;c<end_row;c++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
136 span_height += rows[c].size;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
137 last_row = &rows[c];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
138 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
139 if(span_height < elm->layout.preferred_height) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
140 last_row->size += elm->layout.preferred_height - span_height;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
141 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
142 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
143
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
144 if(elm->layout.hexpand) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
145 if(elm->layout.colspan > 1) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
146 // check if any column in the span is expanding
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
147 // if not, make the last column expanding
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
148 GridDef *last_col = col;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
149 for(int c=x;c<end_col;c++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
150 last_col = &cols[c];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
151 if(last_col->expand) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
152 break;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
153 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
154 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
155 last_col->expand = TRUE;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
156 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
157 col->expand = TRUE;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
158 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
159 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
160 if(elm->layout.vexpand) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
161 if(elm->layout.rowspan > 1) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
162 // same as colspan
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
163 GridDef *last_row = row;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
164 for(int c=x;c<nrows;c++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
165 last_row = &rows[c];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
166 if(last_row->expand) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
167 break;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
168 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
169 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
170 last_row->expand = TRUE;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
171 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
172 row->expand = TRUE;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
173 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
174 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
175 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
176 span_max = 50000; // not sure if this is unreasonable low or high
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
177 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
178
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
179 int col_ext = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
180 int row_ext = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
181
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
182 int preferred_width = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
183 int preferred_height = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
184 for(int j=0;j<ncols;j++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
185 preferred_width += cols[j].preferred_size;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
186 if(cols[j].expand) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
187 col_ext++;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
188 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
189 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
190 for(int j=0;j<nrows;j++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
191 preferred_height += rows[j].preferred_size;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
192 if(rows[j].expand) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
193 row_ext++;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
194 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
195 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
196 if(ncols > 0) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
197 preferred_width += (ncols-1) * colspacing;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
198 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
199 if(nrows > 0) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
200 preferred_height += (nrows-1) * rowspacing;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
201 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
202
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
203 grid->preferred_width = preferred_width;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
204 grid->preferred_height = preferred_height;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
205
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
206 int hremaining = width - preferred_width;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
207 int vremaining = height - preferred_height;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
208 int hext = col_ext > 0 ? hremaining/col_ext : 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
209 int vext = row_ext > 0 ? vremaining/row_ext : 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
210
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
211 for(int j=0;j<ncols;j++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
212 GridDef *col = &cols[j];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
213 if(col->expand) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
214 col->size = col->preferred_size + hext;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
215 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
216 col->size = col->preferred_size;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
217 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
218 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
219 for(int j=0;j<nrows;j++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
220 GridDef *row = &rows[j];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
221 if(row->expand) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
222 row->size = row->preferred_size + vext;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
223 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
224 row->size = row->preferred_size;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
225 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
226 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
227
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
228 int pos = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
229 for(int j=0;j<ncols;j++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
230 cols[j].pos = pos;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
231 pos += cols[j].size + colspacing;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
232 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
233 pos = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
234 for(int j=0;j<nrows;j++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
235 rows[j].pos = pos;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
236 pos += rows[j].size + rowspacing;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
237 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
238
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
239 CxIterator i = cxListIterator(grid->widgets);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
240 cx_foreach(GridElm *, elm, i) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
241 GridDef *col = &cols[elm->gridx];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
242 GridDef *row = &rows[elm->gridy];
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
243
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
244 int child_width = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
245 int child_height = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
246 int child_x = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
247 int child_y = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
248 if(elm->layout.hfill) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
249 if(elm->layout.colspan > 1) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
250 int cwidth = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
251 int end_col = elm->gridx + elm->layout.colspan;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
252 if(end_col > ncols) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
253 end_col = ncols;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
254 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
255 int real_span = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
256 for(int c=elm->gridx;c<end_col;c++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
257 cwidth += cols[c].size;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
258 real_span++;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
259 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
260 if(real_span > 0) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
261 cwidth += (real_span-1) * colspacing;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
262 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
263 child_width = cwidth;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
264 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
265 child_width = col->size;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
266 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
267 child_width -= elm->layout.margin.left + elm->layout.margin.right;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
268 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
269 child_width = elm->layout.preferred_width;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
270 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
271
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
272 if(elm->layout.vfill) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
273 if(elm->layout.rowspan > 1) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
274 int rheight = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
275 int end_row = elm->gridy + elm->layout.rowspan;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
276 if(end_row > nrows) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
277 end_row = nrows;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
278 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
279 int real_span = 0;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
280 for(int r=elm->gridy;r<end_row;r++) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
281 rheight += rows[r].size;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
282 real_span++;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
283 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
284 if(real_span > 0) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
285 rheight += (real_span-1) * rowspacing;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
286 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
287 child_height = rheight;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
288 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
289 child_height = row->size - elm->layout.margin.top - elm->layout.margin.bottom;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
290 } else {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
291 child_height = elm->layout.preferred_height;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
292 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
293
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
294 child_x = col->pos + elm->layout.margin.left;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
295 child_y = row->pos + elm->layout.margin.top;
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
296 SetWindowPos(elm->widget->hwnd, NULL, child_x, child_y, child_width, child_height, SWP_NOZORDER);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
297 if (elm->widget->layout) {
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
298 elm->widget->layout(elm->widget->layoutmanager, child_width, child_height);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
299 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
300 }
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
301
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
302 free(cols);
c3f2f16fa4b8 update toolkit
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 108
diff changeset
303 free(rows);
108
77254bd6dccb update toolkit, adjust UI code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
304 }

mercurial