22class ResizableSplitBase :
public ComponentBase,
public ResizableSplitOption {
24 explicit ResizableSplitBase(ResizableSplitOption options)
25 : ResizableSplitOption(std::move(options)) {
42 bool OnEvent(Event event)
final {
43 if (event.is_mouse()) {
44 return OnMouseEvent(std::move(event));
46 return ComponentBase::OnEvent(std::move(event));
49 bool OnMouseEvent(Event event) {
50 if (captured_mouse_ && event.mouse().motion == Mouse::Released) {
51 captured_mouse_.reset();
55 if (event.mouse().button == Mouse::Left &&
56 event.mouse().motion == Mouse::Pressed &&
57 separator_box_.Contain(event.mouse().x, event.mouse().y) &&
59 captured_mouse_ = CaptureMouse(event);
63 if (!captured_mouse_) {
64 return ComponentBase::OnEvent(event);
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());
95 return RenderBottom();
98 return text(
"unreachable");
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_),
Component ResizableSplitTop(Component main, Component back, int *main_size)
Une division verticale entre deux composants, configurable en utilisant la souris.
Component Horizontal(Components children, int *selector)
Une liste de composants, dessinés un par un horizontalement et navigués horizontalement en utilisant ...
Component Vertical(Components children)
Une liste de composants, dessinés un par un verticalement et navigués verticalement en utilisant les ...
Component ResizableSplitRight(Component main, Component back, int *main_size)
Une division horizontale entre deux composants, configurable en utilisant la souris.
Component ResizableSplitBottom(Component main, Component back, int *main_size)
Une division verticale entre deux composants, configurable en utilisant la souris.
Component ResizableSplitLeft(Component main, Component back, int *main_size)
Une division horizontale entre deux composants, configurable en utilisant la souris.
Element text(std::string_view text)
Affiche un morceau de texte unicode encodé en UTF8.
Element xflex(Element)
Développer/Réduire si possible/nécessaire sur l'axe X.
Decorator size(WidthOrHeight direction, Constraint constraint, int value)
Applique une contrainte sur la taille d'un élément.
Element yflex(Element)
Développer/Réduire si possible/nécessaire sur l'axe Y.
Element vbox(Elements children)
Un conteneur affichant les éléments verticalement un par un.
L'espace de noms FTXUI ftxui::
std::unique_ptr< CapturedMouseInterface > CapturedMouse
std::shared_ptr< T > Make(Args &&... args)
std::shared_ptr< Node > Element
Element hbox(Elements children)
Un conteneur affichant les éléments horizontalement un par un.
Component ResizableSplit(ResizableSplitOption options)
Une séparation entre deux composants.
Decorator reflect(Box &box)
std::shared_ptr< ComponentBase > Component