psemek/libs/ui/source/impl/size_constraints.cpp

59 lines
1.6 KiB
C++

#include <psemek/ui/impl/size_constraints.hpp>
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<float, 2> 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<float> range(size_constraints const & constraints, int dimension)
{
return constraints.box[dimension];
}
size_constraints cut(size_constraints const & constraints, int dimension, geom::interval<float> 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;
}
}