Implement width/height_constraints for default ui::frame implementation
This commit is contained in:
parent
83559aba51
commit
83cb71d2c0
1 changed files with 26 additions and 16 deletions
|
|
@ -128,35 +128,45 @@ namespace psemek::ui
|
|||
|
||||
geom::box<float, 2> size_constraints() const override
|
||||
{
|
||||
geom::box<float, 2> r = element::size_constraints();
|
||||
|
||||
for (auto c : children())
|
||||
if (c)
|
||||
r = c->size_constraints();
|
||||
geom::box<float, 2> sc = frame::size_constraints();
|
||||
|
||||
auto st = merged_own_style();
|
||||
if (st)
|
||||
{
|
||||
float extra = 2.f * (*st->border_width + *st->bevel_width + *st->outer_margin);
|
||||
r[0] += extra;
|
||||
r[1] += extra;
|
||||
sc[0] += extra;
|
||||
sc[1] += extra;
|
||||
}
|
||||
|
||||
if (min_size())
|
||||
return sc;
|
||||
}
|
||||
|
||||
geom::interval<float> width_constraints(float height) const override
|
||||
{
|
||||
auto wc = frame::width_constraints(height);
|
||||
|
||||
auto st = merged_own_style();
|
||||
if (st)
|
||||
{
|
||||
auto s = *min_size();
|
||||
r[0].min = std::max(r[0].min, s[0]);
|
||||
r[1].min = std::max(r[1].min, s[1]);
|
||||
float extra = 2.f * (*st->border_width + *st->bevel_width + *st->outer_margin);
|
||||
wc += extra;
|
||||
}
|
||||
|
||||
if (max_size())
|
||||
return wc;
|
||||
}
|
||||
|
||||
geom::interval<float> height_constraints(float width) const override
|
||||
{
|
||||
auto hc = frame::height_constraints(width);
|
||||
|
||||
auto st = merged_own_style();
|
||||
if (st)
|
||||
{
|
||||
auto s = *max_size();
|
||||
r[0].max = std::min(r[0].max, s[0]);
|
||||
r[1].max = std::min(r[1].max, s[1]);
|
||||
float extra = 2.f * (*st->border_width + *st->bevel_width + *st->outer_margin);
|
||||
hc += extra;
|
||||
}
|
||||
|
||||
return r;
|
||||
return hc;
|
||||
}
|
||||
|
||||
void draw(painter & p) const override
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue