#include namespace psemek::ui::impl { size_constraints size_constraints::max() { return {{{ {0.f, infinity}, {0.f, infinity}, }}}; } size_constraints shift(size_constraints const & constraints, geom::vector const & delta) { return {constraints.box + delta}; } size_constraints scale(size_constraints const & constraints, float factor, int dimension) { auto result = constraints; result.box[dimension].min *= factor; result.box[dimension].max *= factor; return result; } float min(size_constraints const & constraints, int dimension) { return constraints.box[dimension].min; } size_constraints intersect(size_constraints const & constraints1, size_constraints const & constraints2) { return {constraints1.box & constraints2.box}; } geom::interval range(size_constraints const & constraints, int dimension) { return constraints.box[dimension]; } size_constraints cut(size_constraints const & constraints, int dimension, geom::interval const & range) { size_constraints result = constraints; result.box[dimension] &= range; return result; } size_constraints sum_along(size_constraints const & constraints1, size_constraints const & constraints2, int dimension) { size_constraints result; result.box[dimension].min = constraints1.box[dimension].min + constraints2.box[dimension].min; result.box[dimension].max = constraints1.box[dimension].max + constraints2.box[dimension].max; result.box[dimension ^ 1] = constraints1.box[dimension ^ 1] & constraints2.box[dimension ^ 1]; return result; } }