Distribute remaining pixel to expanding childs of GridContainer
This commit is contained in:
parent
1ec40a94d5
commit
6b3207644b
|
@ -139,13 +139,47 @@ void GridContainer::_notification(int p_what) {
|
|||
}
|
||||
|
||||
// Finally, fit the nodes.
|
||||
int col_expand = col_expanded.size() > 0 ? remaining_space.width / col_expanded.size() : 0;
|
||||
int row_expand = row_expanded.size() > 0 ? remaining_space.height / row_expanded.size() : 0;
|
||||
int col_remaining_pixel = 0;
|
||||
int col_expand = 0;
|
||||
if (col_expanded.size() > 0) {
|
||||
col_expand = remaining_space.width / col_expanded.size();
|
||||
col_remaining_pixel = remaining_space.width - col_expanded.size() * col_expand;
|
||||
}
|
||||
|
||||
int row_remaining_pixel = 0;
|
||||
int row_expand = 0;
|
||||
if (row_expanded.size() > 0) {
|
||||
row_expand = remaining_space.height / row_expanded.size();
|
||||
row_remaining_pixel = remaining_space.height - row_expanded.size() * row_expand;
|
||||
}
|
||||
|
||||
bool rtl = is_layout_rtl();
|
||||
|
||||
int col_ofs = 0;
|
||||
int row_ofs = 0;
|
||||
|
||||
// Calculate the index of rows and columns that receive the remaining pixel.
|
||||
int col_remaining_pixel_index = 0;
|
||||
for (int i = 0; i < max_col; i++) {
|
||||
if (col_remaining_pixel == 0) {
|
||||
break;
|
||||
}
|
||||
if (col_expanded.has(i)) {
|
||||
col_remaining_pixel_index = i + 1;
|
||||
col_remaining_pixel--;
|
||||
}
|
||||
}
|
||||
int row_remaining_pixel_index = 0;
|
||||
for (int i = 0; i < max_row; i++) {
|
||||
if (row_remaining_pixel == 0) {
|
||||
break;
|
||||
}
|
||||
if (row_expanded.has(i)) {
|
||||
row_remaining_pixel_index = i + 1;
|
||||
row_remaining_pixel--;
|
||||
}
|
||||
}
|
||||
|
||||
valid_controls_index = 0;
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
|
@ -164,17 +198,30 @@ void GridContainer::_notification(int p_what) {
|
|||
}
|
||||
if (row > 0) {
|
||||
row_ofs += (row_expanded.has(row - 1) ? row_expand : row_minh[row - 1]) + vsep;
|
||||
|
||||
if (row_expanded.has(row - 1) && row - 1 < row_remaining_pixel_index) {
|
||||
// Apply the remaining pixel of the previous row.
|
||||
row_ofs++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Size2 s(col_expanded.has(col) ? col_expand : col_minw[col], row_expanded.has(row) ? row_expand : row_minh[row]);
|
||||
|
||||
// Add the remaining pixel to the expanding columns and rows, starting from left and top.
|
||||
if (col_expanded.has(col) && col < col_remaining_pixel_index) {
|
||||
s.x++;
|
||||
}
|
||||
if (row_expanded.has(row) && row < row_remaining_pixel_index) {
|
||||
s.y++;
|
||||
}
|
||||
|
||||
if (rtl) {
|
||||
Size2 s(col_expanded.has(col) ? col_expand : col_minw[col], row_expanded.has(row) ? row_expand : row_minh[row]);
|
||||
Point2 p(col_ofs - s.width, row_ofs);
|
||||
fit_child_in_rect(c, Rect2(p, s));
|
||||
col_ofs -= s.width + hsep;
|
||||
} else {
|
||||
Point2 p(col_ofs, row_ofs);
|
||||
Size2 s(col_expanded.has(col) ? col_expand : col_minw[col], row_expanded.has(row) ? row_expand : row_minh[row]);
|
||||
fit_child_in_rect(c, Rect2(p, s));
|
||||
col_ofs += s.width + hsep;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue