15class ResizableSplitLeftBase :
public ComponentBase {
18 : main_(std::move(main)),
19 child_(std::move(child)),
20 main_size_(main_size) {
27 bool OnEvent(Event event)
final {
28 if (event.is_mouse()) {
29 return OnMouseEvent(std::move(event));
34 bool OnMouseEvent(Event event) {
36 captured_mouse_.reset();
42 separator_box_.Contain(event.mouse().x, event.mouse().y) &&
44 captured_mouse_ = CaptureMouse(event);
48 if (captured_mouse_) {
49 *main_size_ =
event.mouse().x - box_.x_min;
60 child_->Render() |
xflex,
68 int*
const main_size_;
74class ResizableSplitRightBase :
public ComponentBase {
77 : main_(std::move(main)),
78 child_(std::move(child)),
79 main_size_(main_size) {
86 bool OnEvent(Event event)
final {
87 if (event.is_mouse()) {
88 return OnMouseEvent(std::move(event));
93 bool OnMouseEvent(Event event) {
95 captured_mouse_.reset();
101 separator_box_.Contain(event.mouse().x, event.mouse().y) &&
103 captured_mouse_ = CaptureMouse(event);
107 if (captured_mouse_) {
108 *main_size_ = box_.x_max -
event.mouse().x;
117 child_->Render() |
xflex,
127 int*
const main_size_;
133class ResizableSplitTopBase :
public ComponentBase {
136 : main_(std::move(main)),
137 child_(std::move(child)),
138 main_size_(main_size) {
145 bool OnEvent(Event event)
final {
146 if (event.is_mouse()) {
147 return OnMouseEvent(std::move(event));
152 bool OnMouseEvent(Event event) {
154 captured_mouse_.reset();
160 separator_box_.Contain(event.mouse().x, event.mouse().y) &&
162 captured_mouse_ = CaptureMouse(event);
166 if (captured_mouse_) {
167 *main_size_ =
event.mouse().y - box_.y_min;
178 child_->Render() |
yflex,
186 int*
const main_size_;
192class ResizableSplitBottomBase :
public ComponentBase {
195 : main_(std::move(main)),
196 child_(std::move(child)),
197 main_size_(main_size) {
204 bool OnEvent(Event event)
final {
205 if (event.is_mouse()) {
206 return OnMouseEvent(std::move(event));
211 bool OnMouseEvent(Event event) {
213 captured_mouse_.reset();
219 separator_box_.Contain(event.mouse().x, event.mouse().y) &&
221 captured_mouse_ = CaptureMouse(event);
225 if (captured_mouse_) {
226 *main_size_ = box_.y_max -
event.mouse().y;
235 child_->Render() |
yflex,
245 int*
const main_size_;
virtual bool OnEvent(Event)
Called in response to an event.
Component Horizontal(Components children)
A list of components, drawn one by one horizontally and navigated horizontally using left/right arrow...
Component Vertical(Components children)
A list of components, drawn one by one vertically and navigated vertically using up/down arrow key or...
Element xflex(Element)
Expand/Minimize if possible/needed on the X axis.
Component ResizableSplitTop(Component main, Component back, int *main_size)
An vertical split in between two components, configurable using the mouse.
std::unique_ptr< CapturedMouseInterface > CapturedMouse
std::shared_ptr< T > Make(Args &&... args)
std::shared_ptr< Node > Element
Element yflex(Element)
Expand/Minimize if possible/needed on the Y axis.
Element hbox(Elements)
A container displaying elements horizontally one by one.
Component ResizableSplitRight(Component main, Component back, int *main_size)
An horizontal split in between two components, configurable using the mouse.
Decorator reflect(Box &box)
Element separator()
Draw a vertical or horizontal separation in between two other elements.
Component ResizableSplitBottom(Component main, Component back, int *main_size)
An vertical split in between two components, configurable using the mouse.
void Render(Screen &screen, const Element &element)
Display an element on a ftxui::Screen.
Decorator size(Direction, Constraint, int value)
Apply a constraint on the size of an element.
Component ResizableSplitLeft(Component main, Component back, int *main_size)
An horizontal split in between two components, configurable using the mouse.
std::shared_ptr< ComponentBase > Component
Element vbox(Elements)
A container displaying elements vertically one by one.