FTXUI 7.0.3
C++ functional terminal UI.
Loading...
Searching...
No Matches
flex.cpp
Go to the documentation of this file.
1// Copyright 2020 Arthur Sonzogni. All rights reserved.
2// Use of this source code is governed by the MIT license that can be found in
3// the LICENSE file.
4#include <memory> // for make_shared, __shared_ptr_access
5#include <utility> // for move
6
7#include "ftxui/dom/elements.hpp" // for Element, unpack, filler, flex, flex_grow, flex_shrink, notflex, xflex, xflex_grow, xflex_shrink, yflex, yflex_grow, yflex_shrink
8#include "ftxui/dom/node.hpp" // for Elements, Node
9#include "ftxui/dom/requirement.hpp" // for Requirement
10#include "ftxui/screen/box.hpp" // for Box
11
12namespace ftxui {
13
14namespace {
15
16class Flex : public Node {
17 public:
18 Flex(int grow_x, int grow_y, int shrink_x, int shrink_y)
19 : grow_x_(grow_x),
20 grow_y_(grow_y),
21 shrink_x_(shrink_x),
22 shrink_y_(shrink_y) {}
23 Flex(Element child, int grow_x, int grow_y, int shrink_x, int shrink_y)
24 : Node(unpack(std::move(child))),
25 grow_x_(grow_x),
26 grow_y_(grow_y),
27 shrink_x_(shrink_x),
28 shrink_y_(shrink_y) {}
29
30 void ComputeRequirement() override {
31 requirement_.min_x = 0;
32 requirement_.min_y = 0;
33 if (!children_.empty()) {
34 children_[0]->ComputeRequirement();
35 requirement_ = children_[0]->requirement();
36 }
37 if (grow_x_ != -1) {
38 requirement_.flex_grow_x = grow_x_;
39 }
40 if (grow_y_ != -1) {
41 requirement_.flex_grow_y = grow_y_;
42 }
43 if (shrink_x_ != -1) {
44 requirement_.flex_shrink_x = shrink_x_;
45 }
46 if (shrink_y_ != -1) {
47 requirement_.flex_shrink_y = shrink_y_;
48 }
49 }
50
51 void SetBox(Box box) override {
52 Node::SetBox(box);
53 if (children_.empty()) {
54 return;
55 }
56 children_[0]->SetBox(box);
57 }
58
63};
64
65} // namespace
66
67/// @brief コンテナ内の残りのスペースに比例して拡大する要素。
68/// @ingroup dom
70 return std::make_shared<Flex>(1, 1, 1, 1);
71}
72
73/// @brief 子要素をコンテナに残されたスペースに比例して拡大させます。
74/// @ingroup dom
75///
76/// #### Examples:
77///
78/// ~~~cpp
79/// hbox({
80/// text("left") | border ,
81/// text("middle") | border | flex,
82/// text("right") | border,
83/// });
84/// ~~~
85///
86/// #### Output:
87///
88/// ~~~bash
89/// ┌────┐┌─────────────────────────────────────────────────────────┐┌─────┐
90/// │left││middle ││right│
91/// └────┘└─────────────────────────────────────────────────────────┘└─────┘
92/// ~~~
94 return std::make_shared<Flex>(std::move(child), 1, 1, 1, 1);
95}
96
97/// @brief 必要に応じてX軸上で拡大・縮小します。
98/// @ingroup dom
100 return std::make_shared<Flex>(std::move(child), 1, -1, 1, -1);
101}
102
103/// @brief 必要に応じてY軸上で拡大・縮小します。
104/// @ingroup dom
106 return std::make_shared<Flex>(std::move(child), -1, 1, -1, 1);
107}
108
109/// @brief 可能であれば拡大します。
110/// @ingroup dom
112 return std::make_shared<Flex>(std::move(child), 1, 1, -1, -1);
113}
114
115/// @brief 可能であればX軸上で拡大します。
116/// @ingroup dom
118 return std::make_shared<Flex>(std::move(child), 1, -1, -1, -1);
119}
120
121/// @brief 可能であればY軸上で拡大します。
122/// @ingroup dom
124 return std::make_shared<Flex>(std::move(child), -1, 1, -1, -1);
125}
126
127/// @brief 必要であれば最小化します。
128/// @ingroup dom
130 return std::make_shared<Flex>(std::move(child), -1, -1, 1, 1);
131}
132
133/// @brief 必要であればX軸上で最小化します。
134/// @ingroup dom
136 return std::make_shared<Flex>(std::move(child), -1, -1, 1, -1);
137}
138
139/// @brief 必要であればY軸上で最小化します。
140/// @ingroup dom
142 return std::make_shared<Flex>(std::move(child), -1, -1, -1, 1);
143}
144
145/// @brief 要素を柔軟にしないようにします。
146/// @ingroup dom
148 return std::make_shared<Flex>(std::move(child), 0, 0, 0, 0);
149}
150
152 return [grow, shrink](Element child) {
153 return std::make_shared<Flex>(std::move(child), grow, grow, shrink, shrink);
154 };
155}
156
158 return [grow](Element child) {
159 return std::make_shared<Flex>(std::move(child), grow, grow, -1, -1);
160 };
161}
162
164 return [shrink](Element child) {
165 return std::make_shared<Flex>(std::move(child), -1, -1, shrink, shrink);
166 };
167}
168
170 return [grow, shrink](Element child) {
171 return std::make_shared<Flex>(std::move(child), grow, -1, shrink, -1);
172 };
173}
174
176 return [grow](Element child) {
177 return std::make_shared<Flex>(std::move(child), grow, -1, -1, -1);
178 };
179}
180
182 return [shrink](Element child) {
183 return std::make_shared<Flex>(std::move(child), -1, -1, shrink, -1);
184 };
185}
186
188 return [grow, shrink](Element child) {
189 return std::make_shared<Flex>(std::move(child), -1, grow, -1, shrink);
190 };
191}
192
194 return [grow](Element child) {
195 return std::make_shared<Flex>(std::move(child), -1, grow, -1, -1);
196 };
197}
198
200 return [shrink](Element child) {
201 return std::make_shared<Flex>(std::move(child), -1, -1, -1, shrink);
202 };
203}
204
205} // namespace ftxui
int grow_y_
Definition flex.cpp:60
int shrink_y_
Definition flex.cpp:62
int shrink_x_
Definition flex.cpp:61
int grow_x_
Definition flex.cpp:59
Element xflex(Element)
必要に応じてX軸上で拡大・縮小します。
Definition flex.cpp:99
Element xflex_grow(Element)
可能であればX軸上で拡大します。
Definition flex.cpp:117
Element flex(Element child)
子要素をコンテナに残されたスペースに比例して拡大させます。
Definition flex.cpp:93
Element yflex(Element)
必要に応じてY軸上で拡大・縮小します。
Definition flex.cpp:105
Element flex_shrink(Element child)
必要であれば最小化します。
Definition flex.cpp:129
Element yflex_grow(Element)
可能であればY軸上で拡大します。
Definition flex.cpp:123
Element flex_grow(Element child)
可能であれば拡大します。
Definition flex.cpp:111
Element notflex(Element child)
要素を柔軟にしないようにします。
Definition flex.cpp:147
Element xflex_shrink(Element)
必要であればX軸上で最小化します。
Definition flex.cpp:135
Element filler()
コンテナ内の残りのスペースに比例して拡大する要素。
Definition flex.cpp:69
Element yflex_shrink(Element)
必要であればY軸上で最小化します。
Definition flex.cpp:141
FTXUI ftxui::名前空間
Definition animation.hpp:11
Decorator yflex_shrink_factor(int shrink)
Definition flex.cpp:199
std::shared_ptr< Node > Element
Definition elements.hpp:25
Decorator xflex_grow_factor(int grow)
Definition flex.cpp:175
Decorator yflex_grow_factor(int grow)
Definition flex.cpp:193
Decorator yflex_factor(int grow, int shrink)
Definition flex.cpp:187
std::function< Element(Element)> Decorator
Definition elements.hpp:27
Decorator flex_shrink_factor(int shrink)
Definition flex.cpp:163
Decorator flex_grow_factor(int grow)
Definition flex.cpp:157
int shrink
Definition elements.hpp:162
Decorator xflex_shrink_factor(int shrink)
Definition flex.cpp:181
Decorator xflex_factor(int grow, int shrink)
Definition flex.cpp:169
Decorator flex_factor(int grow, int shrink)
Definition flex.cpp:151