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:
|
||||
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::value<struct size_constraints> size_constraints_;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -8,12 +8,15 @@ namespace psemek::ui::impl
|
|||
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>
|
||||
size_constraints compute_size_constraints(std::vector<box_layout::size_policy> const & size_policies,
|
||||
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 weight_unit = minimized;
|
||||
float weight_sum = 0.f;
|
||||
|
|
@ -93,14 +96,14 @@ namespace psemek::ui::impl
|
|||
template <int Dimension>
|
||||
box_layout_base<Dimension>::box_layout_base()
|
||||
: padding_(0.f)
|
||||
, size_policies_({})
|
||||
, size_policies_(std::vector<react::value<box_layout::size_policy>>{})
|
||||
, children_size_constraints_()
|
||||
, size_constraints_(
|
||||
react::map(
|
||||
[](auto const & size_policies, auto const & children_size_constraints, auto const & 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(padding_)
|
||||
)
|
||||
|
|
@ -117,7 +120,7 @@ namespace psemek::ui::impl
|
|||
|
||||
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;
|
||||
for (std::size_t i = 0; i < children().size(); ++i)
|
||||
|
|
@ -167,13 +170,13 @@ namespace psemek::ui::impl
|
|||
template <int Dimension>
|
||||
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;
|
||||
size_policies.reserve(children.size());
|
||||
for (auto const & child : children)
|
||||
size_policies.push_back(child.policy);
|
||||
return size_policies;
|
||||
}, box_layout.children);
|
||||
}, box_layout.children));
|
||||
|
||||
padding_.set(box_layout.padding);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue