FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
scrollbar.cpp
Go to the documentation of this file.
1// Copyright 2023 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.
6#include <string>
7
8using namespace ftxui;
9
11 class Impl : public ComponentBase {
12 private:
13 float scroll_x = 0.1;
14 float scroll_y = 0.1;
15
16 public:
17 Impl() {
18 auto content = Renderer([=] {
19 const std::string lorem =
20 "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed "
21 "do eiusmod tempor incididunt ut labore et dolore magna "
22 "aliqua. Ut enim ad minim veniam, quis nostrud exercitation "
23 "ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis "
24 "aute irure dolor in reprehenderit in voluptate velit esse "
25 "cillum dolore eu fugiat nulla pariatur. Excepteur sint "
26 "occaecat cupidatat non proident, sunt in culpa qui officia "
27 "deserunt mollit anim id est laborum.";
28 return vbox({
29 text(lorem.substr(0, -1)), text(lorem.substr(5, -1)), text(""),
30 text(lorem.substr(10, -1)), text(lorem.substr(15, -1)), text(""),
31 text(lorem.substr(20, -1)), text(lorem.substr(25, -1)), text(""),
32 text(lorem.substr(30, -1)), text(lorem.substr(35, -1)), text(""),
33 text(lorem.substr(40, -1)), text(lorem.substr(45, -1)), text(""),
34 text(lorem.substr(50, -1)), text(lorem.substr(55, -1)), text(""),
35 text(lorem.substr(60, -1)), text(lorem.substr(65, -1)), text(""),
36 text(lorem.substr(70, -1)), text(lorem.substr(75, -1)), text(""),
37 text(lorem.substr(80, -1)), text(lorem.substr(85, -1)), text(""),
38 text(lorem.substr(90, -1)), text(lorem.substr(95, -1)), text(""),
39 text(lorem.substr(100, -1)), text(lorem.substr(105, -1)), text(""),
40 text(lorem.substr(110, -1)), text(lorem.substr(115, -1)), text(""),
41 text(lorem.substr(120, -1)), text(lorem.substr(125, -1)), text(""),
42 text(lorem.substr(130, -1)), text(lorem.substr(135, -1)), text(""),
43 text(lorem.substr(140, -1)),
44 });
45 });
46
47 auto scrollable_content = Renderer(content, [&, content] {
48 return content->Render() | focusPositionRelative(scroll_x, scroll_y) |
49 frame | flex;
50 });
51
52 SliderOption<float> option_x;
53 option_x.value = &scroll_x;
54 option_x.min = 0.f;
55 option_x.max = 1.f;
56 option_x.increment = 0.1f;
57 option_x.direction = Direction::Right;
58 option_x.color_active = Color::Blue;
59 option_x.color_inactive = Color::BlueLight;
60 auto scrollbar_x = Slider(option_x);
61
62 SliderOption<float> option_y;
63 option_y.value = &scroll_y;
64 option_y.min = 0.f;
65 option_y.max = 1.f;
66 option_y.increment = 0.1f;
67 option_y.direction = Direction::Down;
68 option_y.color_active = Color::Yellow;
70 auto scrollbar_y = Slider(option_y);
71
72 Add(Container::Vertical({
74 scrollable_content,
75 scrollbar_y,
76 }) | flex,
77 Container::Horizontal({
78 scrollbar_x,
79 Renderer([] { return text(L"x"); }),
80 }),
81 }));
82 }
83 };
84 return Make<Impl>();
85}
86
87int main() {
88 auto window_1 = Window({
89 .inner = DummyWindowContent(),
90 .title = "First window",
91 .width = 80,
92 .height = 30,
93 });
94
95 auto window_2 = Window({
96 .inner = DummyWindowContent(),
97 .title = "My window",
98 .left = 40,
99 .top = 20,
100 .width = 80,
101 .height = 30,
102 });
103
104 auto window_container = Container::Stacked({
105 window_1,
106 window_2,
107 });
108
110 screen.Loop(window_container);
111
112 return EXIT_SUCCESS;
113}
auto screen
void Add(Component children)
Agrega un hijo. @param child El hijo a adjuntar.
Definition component.cpp:70
static ScreenInteractive Fullscreen()
Implementa el renderizado de sí mismo como ftxui::Element. Implementa la navegación por teclado respo...
Component Horizontal(Components children)
Una lista de componentes, dibujados uno a uno horizontalmente y navegados horizontalmente usando las ...
Component Renderer(Component child, std::function< Element()>)
Retorna un nuevo Componente, similar a |child|, pero usando |render| como el evento Component::Render...
Component Window(WindowOptions option)
Una ventana arrastrable y redimensionable. Para usar varias, deben apilarse usando el componente Cont...
Decorator focusPositionRelative(float x, float y)
Utilizado dentro de un frame, esto fuerza que la vista se desplace hacia una posición determinada....
Element flex(Element)
Hace que un elemento hijo se expanda proporcionalmente al espacio restante en un contenedor.
Definition flex.cpp:123
Element text(std::wstring text)
Muestra un fragmento de texto Unicode.
Definition text.cpp:160
El espacio de nombres ftxui:: de FTXUI.
Definition animation.hpp:10
std::shared_ptr< T > Make(Args &&... args)
Definition component.hpp:27
Element vbox(Elements)
Component Slider(SliderOption< T > options)
Un deslizador en cualquier dirección.
std::shared_ptr< ComponentBase > Component
Component DummyWindowContent()
Definition scrollbar.cpp:10
int main()
Definition scrollbar.cpp:87