18class Focus :
public Node {
20 explicit Focus(
Elements children) : Node(std::move(children)) {}
22 void ComputeRequirement()
override {
24 requirement_ = children_[0]->requirement();
25 requirement_.focused.enabled =
true;
26 requirement_.focused.node =
this;
27 requirement_.focused.box.x_min = 0;
28 requirement_.focused.box.y_min = 0;
29 requirement_.focused.box.x_max = requirement_.min_x - 1;
30 requirement_.focused.box.y_max = requirement_.min_y - 1;
33 void SetBox(Box box)
override {
35 children_[0]->SetBox(box);
39class Frame :
public Node {
41 Frame(
Elements children,
bool x_frame,
bool y_frame)
42 : Node(std::move(children)), x_frame_(x_frame), y_frame_(y_frame) {}
44 void SetBox(Box box)
override {
46 auto& focused_box = requirement_.focused.box;
47 Box children_box = box;
50 const int external_dimx = box.x_max - box.x_min;
51 const int internal_dimx = std::max(requirement_.min_x, external_dimx);
52 const int focused_dimx = focused_box.x_max - focused_box.x_min;
53 int dx = focused_box.x_min - external_dimx / 2 + focused_dimx / 2;
54 dx = std::max(0, std::min(internal_dimx - external_dimx - 1, dx));
55 children_box.x_min = box.x_min - dx;
56 children_box.x_max = box.x_min + internal_dimx - dx;
60 const int external_dimy = box.y_max - box.y_min;
61 const int internal_dimy = std::max(requirement_.min_y, external_dimy);
62 const int focused_dimy = focused_box.y_max - focused_box.y_min;
63 int dy = focused_box.y_min - external_dimy / 2 + focused_dimy / 2;
64 dy = std::max(0, std::min(internal_dimy - external_dimy - 1, dy));
65 children_box.y_min = box.y_min - dy;
66 children_box.y_max = box.y_min + internal_dimy - dy;
69 children_[0]->SetBox(children_box);
73 const AutoReset<Box> stencil(&
screen.stencil,
75 children_[0]->Render(
screen);
83class FocusCursor :
public Focus {
86 : Focus(std::move(children)), shape_(shape) {}
89 void ComputeRequirement()
override {
90 Focus::ComputeRequirement();
91 requirement_.focused.cursor_shape = shape_;
102 return std::make_shared<Focus>(unpack(std::move(child)));
109 return focus(std::move(child));
119 return std::make_shared<Frame>(unpack(std::move(child)),
true,
true);
127 return std::make_shared<Frame>(unpack(std::move(child)),
true,
false);
135 return std::make_shared<Frame>(unpack(std::move(child)),
false,
true);
148 return std::make_shared<FocusCursor>(unpack(std::move(child)),
162 return std::make_shared<FocusCursor>(unpack(std::move(child)),
176 return std::make_shared<FocusCursor>(unpack(std::move(child)),
190 return std::make_shared<FocusCursor>(unpack(std::move(child)),
204 return std::make_shared<FocusCursor>(unpack(std::move(child)),
218 return std::make_shared<FocusCursor>(unpack(std::move(child)),
virtual void SetBox(Box box)
Asigna una posición y una dimensión a un elemento para dibujarlo.
virtual void ComputeRequirement()
Calcula cuánto espacio necesita un elemento.
Element focusCursorBarBlinking(Element)
Igual que focus, pero establece la forma del cursor como una barra parpadeante.
Element focusCursorUnderlineBlinking(Element)
Igual que focus, pero establece la forma del cursor como un subrayado parpadeante.
Element focusCursorBar(Element)
Igual que focus, pero establece la forma del cursor como un bloque fijo.
Element focusCursorBlock(Element)
Igual que focus, pero establece la forma del cursor como un bloque fijo.
Element focusCursorUnderline(Element)
Igual que focus, pero establece la forma del cursor como un subrayado fijo.
Element focus(Element)
Establece que child sea el elemento enfocado entre sus hermanos.
void Render(Screen &screen, const Element &element)
Muestra un elemento en un ftxui::Screen.
Element focusCursorBlockBlinking(Element)
Igual que focus, pero establece la forma del cursor como un bloque parpadeante.
static auto Intersection(Box a, Box b) -> Box
El espacio de nombres ftxui:: de FTXUI.
std::shared_ptr< Node > Element
Element xframe(Element)
Igual que frame, pero solo en el eje x.
std::vector< Element > Elements
Element yframe(Element)
Igual que frame, pero solo en el eje y.
Element select(Element e)
Establece que child sea el elemento enfocado entre sus hermanos.
Element frame(Element)
Permite que un elemento se muestre dentro de un área 'virtual'. Su tamaño puede ser mayor que su cont...