FTXUI 6.1.9
C++ functional terminal UI.
Chargement...
Recherche...
Aucune correspondance
src/ftxui/dom/focus.cpp
Aller à la documentation de ce fichier.
1// Copyright 2020 Arthur Sonzogni. Tous droits réservés.
2// L'utilisation de ce code source est régie par la licence MIT que l'on peut trouver dans
3// le fichier 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 Utilisé à l'intérieur d'un `frame`, cela force la vue à être défilée vers une
15/// position donnée. La position est exprimée en proportion de la taille demandée.
16///
17/// Par exemple:
18/// - (0, 0) signifie que la vue est défilée vers le coin supérieur gauche.
19/// - (1, 0) signifie que la vue est défilée vers le coin supérieur droit.
20/// - (0, 1) signifie que la vue est défilée vers le coin inférieur gauche.
21/// @ingroup dom
22///
23/// ### Exemple
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 Utilisé à l'intérieur d'un `frame`, cela force la vue à être défilée vers une
57/// position donnée. La position est exprimée en nombre de cellules.
58///
59/// @ingroup dom
60///
61/// ### Exemple
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)
Utilisé à l'intérieur d'un frame, cela force la vue à être défilée vers une position donnée....
Decorator focusPosition(int x, int y)
Utilisé à l'intérieur d'un frame, cela force la vue à être défilée vers une position donnée....
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 est une structure qui représente une zone rectangulaire dans un espace 2D.
Definition box.hpp:16
L'espace de noms FTXUI ftxui::
Definition animation.hpp:10
std::function< Element(Element)> Decorator
Definition elements.hpp:24
std::shared_ptr< Node > Element
Definition elements.hpp:22