22class ResizableSplitBase :
public ComponentBase,
public ResizableSplitOption {
24 explicit ResizableSplitBase(ResizableSplitOption options)
25 : ResizableSplitOption(std::move(options)) {
26 switch (direction()) {
42 bool OnEvent(Event event)
final {
43 if (event.is_mouse()) {
44 return OnMouseEvent(std::move(event));
49 bool OnMouseEvent(Event event) {
51 captured_mouse_.reset();
57 separator_box_.Contain(event.mouse().x, event.mouse().y) &&
59 captured_mouse_ = CaptureMouse(event);
63 if (!captured_mouse_) {
67 switch (direction()) {
69 main_size() = std::max(0, event.mouse().x - box_.x_min);
72 main_size() = std::max(0, box_.x_max - event.mouse().x);
75 main_size() = std::max(0, event.mouse().y - box_.y_min);
78 main_size() = std::max(0, box_.y_max - event.mouse().y);
82 main_size() = std::clamp(main_size(), min(), max());
87 switch (direction()) {
95 return RenderBottom();
98 return text(
"unreacheable");
104 separator_func() |
reflect(separator_box_),
105 back->Render() |
xflex,
112 back->Render() |
xflex,
113 separator_func() |
reflect(separator_box_),
122 separator_func() |
reflect(separator_box_),
123 back->Render() |
yflex,
130 back->Render() |
yflex,
131 separator_func() |
reflect(separator_box_),
virtual bool OnEvent(Event)
Llamado en respuesta a un evento.
Component Horizontal(Components children)
Una lista de componentes, dibujados uno a uno horizontalmente y navegados horizontalmente usando las ...
Component ResizableSplitTop(Component main, Component back, int *main_size)
Una división vertical entre dos componentes, configurable usando el ratón.
Component Vertical(Components children)
Una lista de componentes, dibujados uno a uno verticalmente y navegados verticalmente usando las tecl...
Component ResizableSplitRight(Component main, Component back, int *main_size)
Una división horizontal entre dos componentes, configurable usando el ratón.
Component ResizableSplitBottom(Component main, Component back, int *main_size)
Una división vertical entre dos componentes, configurable usando el ratón.
Component ResizableSplitLeft(Component main, Component back, int *main_size)
Una división horizontal entre dos componentes, configurable usando el ratón.
Element xflex(Element)
Expandir/Minimizar si es posible/necesario en el eje X.
Decorator size(WidthOrHeight, Constraint, int value)
Aplica una restricción al tamaño de un elemento.
Element yflex(Element)
Expandir/Minimizar si es posible/necesario en el eje Y.
Element text(std::wstring text)
Muestra un fragmento de texto Unicode.
El espacio de nombres ftxui:: de FTXUI.
std::unique_ptr< CapturedMouseInterface > CapturedMouse
std::shared_ptr< T > Make(Args &&... args)
std::shared_ptr< Node > Element
Element hbox(Elements)
Un contenedor que muestra elementos horizontalmente uno por uno.
Component ResizableSplit(ResizableSplitOption options)
Una división entre dos componentes.
Decorator reflect(Box &box)
std::shared_ptr< ComponentBase > Component