Fix updating size policies in ui::impl::box_layout_base
This commit is contained in:
parent
b32a891183
commit
d7b68e44a8
2 changed files with 10 additions and 7 deletions
|
|
@ -46,7 +46,7 @@ namespace psemek::ui::impl
|
||||||
|
|
||||||
private:
|
private:
|
||||||
react::source<react::value<float>> padding_;
|
react::source<react::value<float>> padding_;
|
||||||
react::value<std::vector<react::value<box_layout::size_policy>>> size_policies_;
|
react::source<react::value<std::vector<react::value<box_layout::size_policy>>>> size_policies_;
|
||||||
react::source<std::vector<react::value<struct size_constraints>>> children_size_constraints_;
|
react::source<std::vector<react::value<struct size_constraints>>> children_size_constraints_;
|
||||||
react::value<struct size_constraints> size_constraints_;
|
react::value<struct size_constraints> size_constraints_;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,15 @@ namespace psemek::ui::impl
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
static constexpr box_layout::size_policy default_policy = box_layout::weight{};
|
static constexpr box_layout::size_policy default_policy = box_layout::minimized{};
|
||||||
|
|
||||||
template <int Dimension>
|
template <int Dimension>
|
||||||
size_constraints compute_size_constraints(std::vector<box_layout::size_policy> const & size_policies,
|
size_constraints compute_size_constraints(std::vector<box_layout::size_policy> const & size_policies,
|
||||||
std::vector<size_constraints> const & children_size_constraints, float padding)
|
std::vector<size_constraints> const & children_size_constraints, float padding)
|
||||||
{
|
{
|
||||||
|
if (size_policies.size() != children_size_constraints.size())
|
||||||
|
return size_constraints::max();
|
||||||
|
|
||||||
size_constraints minimized = size_constraints::max();
|
size_constraints minimized = size_constraints::max();
|
||||||
size_constraints weight_unit = minimized;
|
size_constraints weight_unit = minimized;
|
||||||
float weight_sum = 0.f;
|
float weight_sum = 0.f;
|
||||||
|
|
@ -93,14 +96,14 @@ namespace psemek::ui::impl
|
||||||
template <int Dimension>
|
template <int Dimension>
|
||||||
box_layout_base<Dimension>::box_layout_base()
|
box_layout_base<Dimension>::box_layout_base()
|
||||||
: padding_(0.f)
|
: padding_(0.f)
|
||||||
, size_policies_({})
|
, size_policies_(std::vector<react::value<box_layout::size_policy>>{})
|
||||||
, children_size_constraints_()
|
, children_size_constraints_()
|
||||||
, size_constraints_(
|
, size_constraints_(
|
||||||
react::map(
|
react::map(
|
||||||
[](auto const & size_policies, auto const & children_size_constraints, auto const & padding){
|
[](auto const & size_policies, auto const & children_size_constraints, auto const & padding){
|
||||||
return compute_size_constraints<Dimension>(size_policies, children_size_constraints, padding);
|
return compute_size_constraints<Dimension>(size_policies, children_size_constraints, padding);
|
||||||
},
|
},
|
||||||
react::join(react::map(react::unpack_with_default(default_policy), size_policies_)),
|
react::join(react::map(react::unpack_with_default(default_policy), react::join(size_policies_))),
|
||||||
react::join(react::map(react::unpack, children_size_constraints_)),
|
react::join(react::map(react::unpack, children_size_constraints_)),
|
||||||
react::join(padding_)
|
react::join(padding_)
|
||||||
)
|
)
|
||||||
|
|
@ -117,7 +120,7 @@ namespace psemek::ui::impl
|
||||||
|
|
||||||
auto padding = **padding_;
|
auto padding = **padding_;
|
||||||
|
|
||||||
auto sizes = allocate<Dimension>(new_shape[Dimension].length(), *size_policies_, children(), padding);
|
auto sizes = allocate<Dimension>(new_shape[Dimension].length(), **size_policies_, children(), padding);
|
||||||
|
|
||||||
float pen = new_shape[Dimension].min;
|
float pen = new_shape[Dimension].min;
|
||||||
for (std::size_t i = 0; i < children().size(); ++i)
|
for (std::size_t i = 0; i < children().size(); ++i)
|
||||||
|
|
@ -167,13 +170,13 @@ namespace psemek::ui::impl
|
||||||
template <int Dimension>
|
template <int Dimension>
|
||||||
void box_layout_base<Dimension>::update(typename detail::box_layout_type<Dimension>::type const & box_layout)
|
void box_layout_base<Dimension>::update(typename detail::box_layout_type<Dimension>::type const & box_layout)
|
||||||
{
|
{
|
||||||
size_policies_ = react::map([](auto const & children){
|
size_policies_.set(react::map([](auto const & children){
|
||||||
std::vector<react::value<box_layout::size_policy>> size_policies;
|
std::vector<react::value<box_layout::size_policy>> size_policies;
|
||||||
size_policies.reserve(children.size());
|
size_policies.reserve(children.size());
|
||||||
for (auto const & child : children)
|
for (auto const & child : children)
|
||||||
size_policies.push_back(child.policy);
|
size_policies.push_back(child.policy);
|
||||||
return size_policies;
|
return size_policies;
|
||||||
}, box_layout.children);
|
}, box_layout.children));
|
||||||
|
|
||||||
padding_.set(box_layout.padding);
|
padding_.set(box_layout.padding);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue