diff --git a/libs/ui/source/default_element_factory.cpp b/libs/ui/source/default_element_factory.cpp index a19e6274..3aa4f117 100644 --- a/libs/ui/source/default_element_factory.cpp +++ b/libs/ui/source/default_element_factory.cpp @@ -128,35 +128,45 @@ namespace psemek::ui geom::box size_constraints() const override { - geom::box r = element::size_constraints(); - - for (auto c : children()) - if (c) - r = c->size_constraints(); + geom::box 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 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 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