diff --git a/libs/ui/include/psemek/ui/frame.hpp b/libs/ui/include/psemek/ui/frame.hpp index af8b0a2a..83a7f238 100644 --- a/libs/ui/include/psemek/ui/frame.hpp +++ b/libs/ui/include/psemek/ui/frame.hpp @@ -18,6 +18,8 @@ namespace psemek::ui struct shape const & shape() const override; void reshape(geom::box const & box) override; geom::box size_constraints() const override; + geom::interval width_constraints(float height) const override; + geom::interval height_constraints(float width) const override; void draw(painter &) const override {} diff --git a/libs/ui/source/frame.cpp b/libs/ui/source/frame.cpp index da7c456d..05417022 100644 --- a/libs/ui/source/frame.cpp +++ b/libs/ui/source/frame.cpp @@ -58,4 +58,34 @@ namespace psemek::ui return sc; } + geom::interval frame::width_constraints(float height) const + { + auto wc = element::width_constraints(height); + if (child_) + wc = child_->width_constraints(height); + + if (min_size_) + wc.min = std::max(wc.min, (*min_size_)[0]); + + if (max_size_) + wc.max = std::min(wc.max, (*max_size_)[0]); + + return wc; + } + + geom::interval frame::height_constraints(float width) const + { + auto wc = element::height_constraints(width); + if (child_) + wc = child_->height_constraints(width); + + if (min_size_) + wc.min = std::max(wc.min, (*min_size_)[1]); + + if (max_size_) + wc.max = std::min(wc.max, (*max_size_)[1]); + + return wc; + } + }