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// このソースコードの使用は、LICENSEファイルにあるMITライセンスによって管理されています。
5#include <string>
6
7using namespace ftxui;
8
10 class Impl : public ComponentBase {
11 private:
12 float scroll_x = 0.1;
13 float scroll_y = 0.1;
14
15 public:
16 Impl() {
17 auto content = Renderer([=] {
18 const std::string lorem =
19 "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed "
20 "do eiusmod tempor incididunt ut labore et dolore magna "
21 "aliqua. Ut enim ad minim veniam, quis nostrud exercitation "
22 "ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis "
23 "aute irure dolor in reprehenderit in voluptate velit esse "
24 "cillum dolore eu fugiat nulla pariatur. Excepteur sint "
25 "occaecat cupidatat non proident, sunt in culpa qui officia "
26 "deserunt mollit anim id est laborum.";
27 return vbox({
28 text(lorem.substr(0, -1)), text(lorem.substr(5, -1)), text(""),
29 text(lorem.substr(10, -1)), text(lorem.substr(15, -1)), text(""),
30 text(lorem.substr(20, -1)), text(lorem.substr(25, -1)), text(""),
31 text(lorem.substr(30, -1)), text(lorem.substr(35, -1)), text(""),
32 text(lorem.substr(40, -1)), text(lorem.substr(45, -1)), text(""),
33 text(lorem.substr(50, -1)), text(lorem.substr(55, -1)), text(""),
34 text(lorem.substr(60, -1)), text(lorem.substr(65, -1)), text(""),
35 text(lorem.substr(70, -1)), text(lorem.substr(75, -1)), text(""),
36 text(lorem.substr(80, -1)), text(lorem.substr(85, -1)), text(""),
37 text(lorem.substr(90, -1)), text(lorem.substr(95, -1)), text(""),
38 text(lorem.substr(100, -1)), text(lorem.substr(105, -1)), text(""),
39 text(lorem.substr(110, -1)), text(lorem.substr(115, -1)), text(""),
40 text(lorem.substr(120, -1)), text(lorem.substr(125, -1)), text(""),
41 text(lorem.substr(130, -1)), text(lorem.substr(135, -1)), text(""),
42 text(lorem.substr(140, -1)),
43 });
44 });
45
46 auto scrollable_content = Renderer(content, [&, content] {
47 return content->Render() | focusPositionRelative(scroll_x, scroll_y) |
48 frame | flex;
49 });
50
51 SliderOption<float> option_x;
52 option_x.value = &scroll_x;
53 option_x.min = 0.f;
54 option_x.max = 1.f;
55 option_x.increment = 0.1f;
56 option_x.direction = Direction::Right;
57 option_x.color_active = Color::Blue;
58 option_x.color_inactive = Color::BlueLight;
59 auto scrollbar_x = Slider(option_x);
60
61 SliderOption<float> option_y;
62 option_y.value = &scroll_y;
63 option_y.min = 0.f;
64 option_y.max = 1.f;
65 option_y.increment = 0.1f;
66 option_y.direction = Direction::Down;
67 option_y.color_active = Color::Yellow;
69 auto scrollbar_y = Slider(option_y);
70
71 Add(Container::Vertical({
73 scrollable_content,
74 scrollbar_y,
75 }) | flex,
76 Container::Horizontal({
77 scrollbar_x,
78 Renderer([] { return text(L"x"); }),
79 }),
80 }));
81 }
82 };
83 return Make<Impl>();
84}
85
86int main() {
87 auto window_1 = Window({
88 .inner = DummyWindowContent(),
89 .title = "First window",
90 .width = 80,
91 .height = 30,
92 });
93
94 auto window_2 = Window({
95 .inner = DummyWindowContent(),
96 .title = "My window",
97 .left = 40,
98 .top = 20,
99 .width = 80,
100 .height = 30,
101 });
102
103 auto window_container = Container::Stacked({
104 window_1,
105 window_2,
106 });
107
108 auto screen = ScreenInteractive::Fullscreen();
109 screen.Loop(window_container);
110
111 return EXIT_SUCCESS;
112}
void Add(Component children)
子を追加します。 @param child 添付する子。
Definition component.cpp:69
static ScreenInteractive Fullscreen()
ftxui::Elementとして自身のレンダリングを実装します。ftxui::Eventに応答してキーボードナビゲーションを実装します。
Component Horizontal(Components children)
コンポーネントのリスト。水平方向に1つずつ描画され、左右の矢印キーまたは'h'/'l'キーを使用して水平方向にナビゲートされます。
Component Renderer(Component child, std::function< Element()>)
|child|に似ていますが、|render|をComponentRender()イベントとして使用する新しいコンポーネントを返します。
Component Window(WindowOptions option)
ドラッグ可能/サイズ変更可能なウィンドウ。複数のウィンドウを使用するには、それらを Container::Stacked({...})コンポーネントを使用してスタックする必要があります。
Decorator focusPositionRelative(float x, float y)
frame内で使用され、ビューを特定の位置にスクロールさせます。位置は要求されたサイズの割合で表されます。
Element flex(Element)
子要素をコンテナに残されたスペースに比例して拡大させます。
Definition flex.cpp:120
Element text(std::wstring text)
ユニコードテキストを表示します。
Definition text.cpp:160
Element vbox(Elements)
要素を縦に一つずつ表示するコンテナ。
Definition vbox.cpp:94
FTXUI ftxui:: 名前空間
Definition animation.hpp:9
std::shared_ptr< T > Make(Args &&... args)
Definition component.hpp:26
Component Slider(SliderOption< T > options)
どの方向にも対応するスライダー。
std::shared_ptr< ComponentBase > Component
Component DummyWindowContent()
Definition scrollbar.cpp:9
int main()
Definition scrollbar.cpp:86