diff --git a/libs/ui/include/psemek/ui/element.hpp b/libs/ui/include/psemek/ui/element.hpp index 7433b5fc..9acfae49 100644 --- a/libs/ui/include/psemek/ui/element.hpp +++ b/libs/ui/include/psemek/ui/element.hpp @@ -44,8 +44,15 @@ namespace psemek::ui virtual void reshape(geom::box const & bbox) = 0; virtual void reshape(); + // Constraints on the element's width & height, assuming unlimited available space virtual geom::box size_constraints() const; + // Constraints on the element's width, assuming fixed height + virtual geom::interval width_constraints(float height) const; + + // Constraints on the element's height, assuming fixed width + virtual geom::interval height_constraints(float width) const; + virtual bool enabled() const { return enabled_; } virtual void set_enabled(bool value) { enabled_ = value; } virtual void enable() { set_enabled(true); } diff --git a/libs/ui/include/psemek/ui/grid_layout.hpp b/libs/ui/include/psemek/ui/grid_layout.hpp index 37e24ade..3e194c14 100644 --- a/libs/ui/include/psemek/ui/grid_layout.hpp +++ b/libs/ui/include/psemek/ui/grid_layout.hpp @@ -40,8 +40,15 @@ namespace psemek::ui virtual void set_outer_margin(bool value); virtual bool outer_margin() const { return outer_margin_; } + virtual void set_width_first(bool value); + virtual bool width_first() const { return width_first_; } + geom::box size_constraints() const override; + geom::interval width_constraints(float height) const override; + + geom::interval height_constraints(float width) const override; + struct shape const & shape() const override { return shape_; } void reshape(geom::box const & bbox) override; @@ -61,6 +68,7 @@ namespace psemek::ui std::vector column_weight_; bool outer_margin_ = true; + bool width_first_ = true; box_shape shape_; }; diff --git a/libs/ui/include/psemek/ui/label.hpp b/libs/ui/include/psemek/ui/label.hpp index 66c8bf52..8bc5616d 100644 --- a/libs/ui/include/psemek/ui/label.hpp +++ b/libs/ui/include/psemek/ui/label.hpp @@ -69,6 +69,9 @@ namespace psemek::ui geom::box size_constraints() const override; + geom::interval width_constraints(float height) const override; + geom::interval height_constraints(float width) const override; + void style_updated() override; void own_style_updated() override; diff --git a/libs/ui/source/element.cpp b/libs/ui/source/element.cpp index 6a9aa1a0..22e862fa 100644 --- a/libs/ui/source/element.cpp +++ b/libs/ui/source/element.cpp @@ -61,6 +61,16 @@ namespace psemek::ui return {{{0.f, inf}, {0.f, inf}}}; } + geom::interval element::width_constraints(float) const + { + return size_constraints()[0]; + } + + geom::interval element::height_constraints(float) const + { + return size_constraints()[1]; + } + std::shared_ptr