#include #include #include #include namespace psemek::ui::impl { single_container_base::single_container_base(react::value> margin) : margin_(margin) , child_size_constraints_(default_size_constraints()) , size_constraints_(react::map([](size_polygon const & child_constraints, geom::vector const & margin){ return shift(child_constraints, margin); }, react::join(child_size_constraints_), margin)) {} void single_container_base::reshape(geom::box const & new_shape) { single_container::reshape(new_shape); if (child()) child()->reshape(geom::shrink(new_shape, *margin_)); } react::value single_container_base::size_constraints() const { return size_constraints_; } void single_container_base::set_child(std::unique_ptr child) { single_container::set_child(std::move(child)); child_size_constraints_.set(this->child() ? this->child()->size_constraints() : default_size_constraints()); } std::unique_ptr single_container_base::release_child() { auto child = single_container::release_child(); child_size_constraints_.set(default_size_constraints()); return child; } }