FTXUI 7.0.3
C++ functional terminal UI.
Loading...
Searching...
No Matches
src/ftxui/dom/focus.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
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/// ```
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....
El espacio de nombres ftxui:: de FTXUI.
Definition animation.hpp:11
std::shared_ptr< Node > Element
Definition elements.hpp:25
std::function< Element(Element)> Decorator
Definition elements.hpp:27
int y
Definition elements.hpp:134