Fix ui::grid_layout size computation
This commit is contained in:
parent
4c726e2eef
commit
9942ab60a9
1 changed files with 21 additions and 4 deletions
|
|
@ -180,23 +180,40 @@ namespace psemek::ui
|
||||||
auto const & column_size = row_column_size.second;
|
auto const & column_size = row_column_size.second;
|
||||||
|
|
||||||
geom::box<float, 2> result{{{0.f, 0.f}, {0.f, 0.f}}};
|
geom::box<float, 2> result{{{0.f, 0.f}, {0.f, 0.f}}};
|
||||||
|
geom::box<float, 2> unit = geom::box<float, 2>::full();
|
||||||
|
|
||||||
|
float sum_row_weights = 0.f;
|
||||||
|
float sum_column_weights = 0.f;
|
||||||
|
|
||||||
for (std::size_t i = 0; i < row_count(); ++i)
|
for (std::size_t i = 0; i < row_count(); ++i)
|
||||||
{
|
{
|
||||||
bool const minimized = (row_weight_[i] == 0.f);
|
bool const minimized = (row_weight_[i] == 0.f);
|
||||||
|
|
||||||
result[1].min += row_size[i].min;
|
if (minimized)
|
||||||
result[1].max += minimized ? row_size[i].min : row_size[i].max;
|
result[1] += row_size[i].min;
|
||||||
|
else
|
||||||
|
unit[1] &= geom::interval<float>{row_size[i].min / row_weight_[i], row_size[i].max / row_weight_[i]};
|
||||||
|
|
||||||
|
sum_row_weights += row_weight_[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (std::size_t i = 0; i < column_count(); ++i)
|
for (std::size_t i = 0; i < column_count(); ++i)
|
||||||
{
|
{
|
||||||
bool const minimized = (column_weight_[i] == 0.f);
|
bool const minimized = (column_weight_[i] == 0.f);
|
||||||
|
|
||||||
result[0].min += column_size[i].min;
|
if (minimized)
|
||||||
result[0].max += minimized ? column_size[i].min : column_size[i].max;
|
result[0] += column_size[i].min;
|
||||||
|
else
|
||||||
|
unit[0] &= geom::interval<float>{column_size[i].min / column_weight_[i], column_size[i].max / column_weight_[i]};
|
||||||
|
|
||||||
|
sum_column_weights += column_weight_[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result[1].min += unit[1].min * sum_row_weights;
|
||||||
|
result[1].max += unit[1].max * sum_row_weights;
|
||||||
|
result[0].min += unit[0].min * sum_column_weights;
|
||||||
|
result[0].max += unit[0].max * sum_column_weights;
|
||||||
|
|
||||||
int const margin_row_count = (std::max<int>(1, row_count()) + (outer_margin_ ? 1 : -1));
|
int const margin_row_count = (std::max<int>(1, row_count()) + (outer_margin_ ? 1 : -1));
|
||||||
int const margin_column_count = (std::max<int>(1, column_count()) + (outer_margin_ ? 1 : -1));
|
int const margin_column_count = (std::max<int>(1, column_count()) + (outer_margin_ ? 1 : -1));
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue