63 lines
1.7 KiB
C++
63 lines
1.7 KiB
C++
#include <psemek/ui/impl/size_constraints.hpp>
|
|
|
|
#include <limits>
|
|
|
|
namespace psemek::ui::impl
|
|
{
|
|
|
|
size_constraints size_constraints::max()
|
|
{
|
|
static constexpr float infinity = std::numeric_limits<float>::infinity();
|
|
|
|
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;
|
|
}
|
|
|
|
}
|