12bool GeneratorBool(
const char*& data,
size_t& size) {
17 auto out = bool(data[0] % 2);
23std::string GeneratorString(
const char*& data,
size_t& size) {
25 while (index < size && data[index]) {
29 auto out = std::string(data, data + index);
39 return std::move(out);
42int GeneratorInt(
const char* data,
size_t size) {
46 auto out = int(data[0]);
52Color GeneratorColor(
const char* data,
size_t size) {
53 return Color::RGB(GeneratorInt(data, size), GeneratorInt(data, size),
54 GeneratorInt(data, size));
60 option.
enabled = GeneratorBool(data, size);
61 option.
inactive = GeneratorColor(data, size);
62 option.
active = GeneratorColor(data, size);
63 option.
duration = std::chrono::milliseconds(GeneratorInt(data, size));
70 option.
background = GeneratorAnimatedColorOption(data, size);
71 option.
foreground = GeneratorAnimatedColorOption(data, size);
75ButtonOption GeneratorButtonOption(
const char* data,
size_t size) {
81UnderlineOption GeneratorUnderlineOption(
const char* data,
size_t size) {
83 option.
enabled = GeneratorBool(data, size);
86 option.
leader_duration = std::chrono::milliseconds(GeneratorInt(data, size));
88 std::chrono::milliseconds(GeneratorInt(data, size));
89 option.
leader_delay = std::chrono::milliseconds(GeneratorInt(data, size));
90 option.
follower_delay = std::chrono::milliseconds(GeneratorInt(data, size));
94MenuEntryOption GeneratorMenuEntryOption(
const char* data,
size_t size) {
100MenuOption GeneratorMenuOption(
const char* data,
size_t size) {
102 option.
underline = GeneratorUnderlineOption(data, size);
110std::vector<std::string> g_list;
112Components GeneratorComponents(
const char*& data,
size_t& size,
int depth);
114Component GeneratorComponent(
const char*& data,
size_t& size,
int depth) {
116 int value = GeneratorInt(data, size);
118 return Button(GeneratorString(data, size), [] {});
121 constexpr int value_max = 19;
122 value = (value % value_max + value_max) % value_max;
126 GeneratorString(data, size), [] {},
127 GeneratorButtonOption(data, size));
129 return Checkbox(GeneratorString(data, size), &g_bool);
131 return Input(GeneratorString(data, size), GeneratorString(data, size));
133 return Menu(&g_list, &g_int, GeneratorMenuOption(data, size));
137 return Toggle(&g_list, &g_int);
139 return Slider(GeneratorString(data, size), &g_int,
140 GeneratorInt(data, size), GeneratorInt(data, size),
141 GeneratorInt(data, size));
144 GeneratorComponent(data, size, depth - 1),
148 GeneratorComponent(data, size, depth - 1),
152 GeneratorComponent(data, size, depth - 1),
156 GeneratorComponent(data, size, depth - 1),
159 return Container::Vertical(GeneratorComponents(data, size, depth - 1));
162 return Container::Vertical(GeneratorComponents(data, size, depth - 1),
166 return Container::Horizontal(GeneratorComponents(data, size, depth - 1));
168 return Container::Horizontal(GeneratorComponents(data, size, depth - 1),
171 return Container::Tab(GeneratorComponents(data, size, depth - 1), &g_int);
173 return Maybe(GeneratorComponent(data, size, depth - 1), &g_bool);
178 GeneratorComponent(data, size, depth - 1),
179 GeneratorBool(data, size));
185Components GeneratorComponents(
const char*& data,
size_t& size,
int depth) {
188 while (size && GeneratorInt(data, size) % 2) {
189 out.push_back(GeneratorComponent(data, size, depth - 1));
192 return std::move(out);
197 g_bool = GeneratorBool(data, size);
198 g_int = GeneratorInt(data, size);
200 "test_1",
"test_2",
"test_3",
"test_4",
"test_5",
204 auto component = GeneratorComponent(data, size, depth);
206 int width = GeneratorInt(data, size);
207 int height = GeneratorInt(data, size);
216 Screen::Create(Dimension::Fixed(width), Dimension::Fixed(height));
219 std::vector<Event> events;
223 for (
size_t i = 0; i <
size; ++i) {
227 for (
const auto& event : events) {
228 component->OnEvent(event);
229 auto document = component->Render();
int LLVMFuzzerTestOneInput(const char *data, size_t size)
animation::Duration follower_duration
MenuEntryOption entries_option
animation::Duration follower_delay
UnderlineOption underline
animation::Duration leader_duration
animation::Duration duration
AnimatedColorsOption animated_colors
animation::Duration leader_delay
Component Maybe(Component, const bool *show)
コンポーネント|child|を装飾します。|show|がtrueの場合にのみ表示されます。
Component ResizableSplitTop(Component main, Component back, int *main_size)
2つのコンポーネント間の垂直分割。マウスで設定可能。
Component Menu(MenuOption options)
テキストのリスト。フォーカスされた要素が選択されます。
Component Toggle(ConstStringListRef entries, int *selected)
要素の水平リスト。ユーザーはこれらを操作できます。
Component Radiobox(RadioboxOption options)
1つだけ選択できる要素のリスト。
Component Button(ButtonOption options)
Draw a button. Execute a function when clicked. (ja: ボタンを描画します。クリックされたときに機能を実行します。)
Component ResizableSplitRight(Component main, Component back, int *main_size)
2つのコンポーネント間の水平分割。マウスで設定可能。
Component Dropdown(ConstStringListRef entries, int *selected)
ドロップダウンメニュー。
Component ResizableSplitBottom(Component main, Component back, int *main_size)
2つのコンポーネント間の垂直分割。マウスで設定可能。
Component Checkbox(CheckboxOption options)
チェック可能な要素を描画します。
Component ResizableSplitLeft(Component main, Component back, int *main_size)
2つのコンポーネント間の水平分割。マウスで設定可能。
アニメーション化された可能性のある色に関するオプション。
イベントを表します。キープレスイベント、ターミナルのリサイズなど、さまざまなイベントがあります。
Direction
Directionは、東西南北の4つの基本方向を表す列挙型です。
void Render(Screen &screen, const Element &element)
要素をftxui::Screenに表示します。
static Screen Create(Dimensions dimension)
指定された次元を持つスクリーンを作成します。
static Color RGB(uint8_t red, uint8_t green, uint8_t blue)
RGB表現から色を構築します。 https://en.wikipedia.org/wiki/RGB_color_model.
Colorは、ターミナルユーザーインターフェースにおける色を表すクラスです。
std::vector< Component > Components
std::wstring to_wstring(const std::string &s)
Component Collapsible(ConstStringRef label, Component child, Ref< bool > show=false)
折りたたみ可能なコンポーネント。矢印付きのチェックボックスを表示します。アクティブ化されると、子が 表示されます。
Component Input(InputOption options={})
Component Slider(SliderOption< T > options)
どの方向にも対応するスライダー。
std::shared_ptr< ComponentBase > Component
AnimatedColorOption foreground
AnimatedColorOption background