14 using FlexFunction = void (*)(Requirement&);
16 void function_flex_grow(Requirement& r) {
21 void function_xflex_grow(Requirement& r) {
25 void function_yflex_grow(Requirement& r) {
29 void function_flex_shrink(Requirement& r) {
34 void function_xflex_shrink(Requirement& r) {
38 void function_yflex_shrink(Requirement& r) {
42 void function_flex(Requirement& r) {
49 void function_xflex(Requirement& r) {
54 void function_yflex(Requirement& r) {
59 void function_not_flex(Requirement& r) {
68 class Flex :
public Node {
70 Flex(FlexFunction f) : f_(f) {}
71 Flex(FlexFunction f,
Element child) :
Node(unpack(std::move(child))), f_(f) {}
72 void ComputeRequirement()
override {
82 void SetBox(Box box)
override {
95 return std::make_shared<Flex>(function_flex);
120 return std::make_shared<Flex>(function_flex, std::move(child));
126 return std::make_shared<Flex>(function_xflex, std::move(child));
132 return std::make_shared<Flex>(function_yflex, std::move(child));
138 return std::make_shared<Flex>(function_flex_grow, std::move(child));
144 return std::make_shared<Flex>(function_xflex_grow, std::move(child));
150 return std::make_shared<Flex>(function_yflex_grow, std::move(child));
156 return std::make_shared<Flex>(function_flex_shrink, std::move(child));
162 return std::make_shared<Flex>(function_xflex_shrink, std::move(child));
168 return std::make_shared<Flex>(function_yflex_shrink, std::move(child));
174 return std::make_shared<Flex>(function_not_flex, std::move(child));