FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
src/ftxui/dom/focus.cpp
Go to the documentation of this file.
1// Derechos de autor 2020 Arthur Sonzogni. Todos los derechos reservados.
2// El uso de este código fuente se rige por la licencia MIT que se puede encontrar en
3// el archivo LICENSE.
4#include <memory> // for make_shared
5#include <utility> // for move
6
7#include "ftxui/dom/elements.hpp" // for Decorator, Element, focusPosition, focusPositionRelative
8#include "ftxui/dom/node_decorator.hpp" // for NodeDecorator
9#include "ftxui/dom/requirement.hpp" // for Requirement, Requirement::NORMAL, Requirement::Selection
10#include "ftxui/screen/box.hpp" // for Box
11
12namespace ftxui {
13
14/// @brief Utilizado dentro de un `frame`, esto fuerza que la vista se desplace hacia
15/// una posición determinada. La posición se expresa en proporción del tamaño solicitado.
16///
17/// Por ejemplo:
18/// - (0, 0) significa que la vista se desplaza hacia la parte superior izquierda.
19/// - (1, 0) significa que la vista se desplaza hacia la parte superior derecha.
20/// - (0, 1) significa que la vista se desplaza hacia la parte inferior izquierda.
21/// @ingroup dom
22///
23/// ### Ejemplo
24///
25/// ```cpp
26/// Element document = huge_document()
27/// | focusPositionRelative(0.f, 1.f)
28/// | frame;
29/// ```
31 class Impl : public NodeDecorator {
32 public:
33 Impl(Element child, float x, float y)
34 : NodeDecorator(std::move(child)), x_(x), y_(y) {}
35
36 void ComputeRequirement() override {
37 NodeDecorator::ComputeRequirement();
38 requirement_.focused.enabled = true;
39 requirement_.focused.node = this;
40 requirement_.focused.box.x_min = int(float(requirement_.min_x) * x_);
41 requirement_.focused.box.y_min = int(float(requirement_.min_y) * y_);
42 requirement_.focused.box.x_max = int(float(requirement_.min_x) * x_);
43 requirement_.focused.box.y_max = int(float(requirement_.min_y) * y_);
44 }
45
46 private:
47 const float x_;
48 const float y_;
49 };
50
51 return [x, y](Element child) {
52 return std::make_shared<Impl>(std::move(child), x, y);
53 };
54}
55
56/// @brief Utilizado dentro de un `frame`, esto fuerza que la vista se desplace hacia
57/// una posición determinada. La posición se expresa en el número de celdas.
58///
59/// @ingroup dom
60///
61/// ### Ejemplo
62///
63/// ```cpp
64/// Element document = huge_document()
65/// | focusPosition(10, 10)
66/// | frame;
67/// ```
68Decorator focusPosition(int x, int y) {
69 class Impl : public NodeDecorator {
70 public:
71 Impl(Element child, int x, int y)
72 : NodeDecorator(std::move(child)), x_(x), y_(y) {}
73
74 void ComputeRequirement() override {
75 NodeDecorator::ComputeRequirement();
76 requirement_.focused.enabled = false;
77
78 Box& box = requirement_.focused.box;
79 box.x_min = x_;
80 box.y_min = y_;
81 box.x_max = x_;
82 box.y_max = y_;
83 }
84
85 private:
86 const int x_;
87 const int y_;
88 };
89
90 return [x, y](Element child) {
91 return std::make_shared<Impl>(std::move(child), x, y);
92 };
93}
94
95} // namespace ftxui
Decorator focusPositionRelative(float x, float y)
Utilizado dentro de un frame, esto fuerza que la vista se desplace hacia una posición determinada....
Decorator focusPosition(int x, int y)
Utilizado dentro de un frame, esto fuerza que la vista se desplace hacia una posición determinada....
int x_max
Definition box.hpp:18
int y_min
Definition box.hpp:19
int y_max
Definition box.hpp:20
int x_min
Definition box.hpp:17
Box es una estructura que representa un área rectangular en un espacio 2D.
Definition box.hpp:16
El espacio de nombres ftxui:: de FTXUI.
Definition animation.hpp:10
std::function< Element(Element)> Decorator
Definition elements.hpp:24
std::shared_ptr< Node > Element
Definition elements.hpp:22