14bool GeneratorBool(
const char*& data,
size_t& size) {
18 auto out = bool(data[0] % 2);
24std::string GeneratorString(
const char*& data,
size_t& size) {
26 while (index < size && data[index]) {
29 auto out = std::string(data, data + index);
41int GeneratorInt(
const char*& data,
size_t& size) {
45 auto out = int(data[0]);
51float GeneratorFloat(
const char*& data,
size_t& size) {
55 auto out = float(data[0]) / 255.0f;
61Elements GeneratorElements(
const char*& data,
size_t& size,
int depth);
63Element GeneratorElement(
const char*& data,
size_t& size,
int depth) {
65 int value = GeneratorInt(data, size);
67 int base_choice =
value % 5;
68 if (base_choice == 0) {
69 return text(GeneratorString(data, size));
71 if (base_choice == 1) {
72 return paragraph(GeneratorString(data, size));
74 if (base_choice == 2) {
77 if (base_choice == 3) {
78 return gauge(GeneratorFloat(data, size));
83 constexpr int value_max = 20;
84 value = (
value % value_max + value_max) % value_max;
87 return text(GeneratorString(data, size));
89 return paragraph(GeneratorString(data, size));
93 return gauge(GeneratorFloat(data, size));
95 return border(GeneratorElement(data, size, depth));
99 return window(
text(GeneratorString(data, size)),
100 GeneratorElement(data, size, depth));
102 return vbox(GeneratorElements(data, size, depth));
104 return hbox(GeneratorElements(data, size, depth));
106 return dbox(GeneratorElements(data, size, depth));
108 return flexbox(GeneratorElements(data, size, depth));
110 return bold(GeneratorElement(data, size, depth));
112 return dim(GeneratorElement(data, size, depth));
114 return italic(GeneratorElement(data, size, depth));
116 return inverted(GeneratorElement(data, size, depth));
118 return underlined(GeneratorElement(data, size, depth));
120 return blink(GeneratorElement(data, size, depth));
124 return flex(GeneratorElement(data, size, depth));
132Elements GeneratorElements(
const char*& data,
size_t& size,
int depth) {
135 while (size && (GeneratorInt(data, size) % 2)) {
136 out.push_back(GeneratorElement(data, size, depth - 1));
149 int width = GeneratorInt(data, size);
150 int height = GeneratorInt(data, size);
152 width = (width % 200) + 1;
153 height = (height % 200) + 1;
156 auto element = GeneratorElement(data, size, depth);
159 Screen::Create(Dimension::Fixed(width), Dimension::Fixed(height));
int LLVMFuzzerTestOneInput(const char *data, size_t size)
Element window(Element title, Element content, BorderStyle border=ROUNDED)
繪製帶有標題和邊框的視窗。
Element text(std::string_view text)
顯示一段 UTF8 編碼的 Unicode 文字。
Element flex(Element child)
讓子元素依比例擴展以填滿容器中剩餘的空間。
Element bold(Element child)
使用粗體字型,用於需要更多強調的元素。
Element borderRounded(Element child)
在元素周圍繪製圓角邊框。
Element underlined(Element child)
為給定元素加上底線。
Element inverted(Element child)
添加一個濾鏡,它將反轉前景和背景 顏色。
Element strikethrough(Element child)
對文字應用刪除線。
Element italic(Element child)
對文字應用雙底線。
Element dbox(Elements children_)
將多個元素堆疊在一起。
Element paragraph(std::string_view the_text)
回傳一個在多行上繪製段落的元素。
Element separator()
在兩個元素之間繪製垂直或水平分隔線。
Element filler()
一個會依照容器中剩餘空間 按比例擴展的元素。
Element dim(Element child)
使用淺色字體,適用於不那麼強調的元素。
Element blink(Element child)
繪製的文字在可見和隱藏之間交替。
Element gauge(float progress)
繪製一個高解析度進度條。
Element border(Element child)
在元素周圍繪製邊框。
Element vbox(Elements children)
一個垂直一個接一個顯示元素的容器。
Element flexbox(Elements, FlexboxConfig config=FlexboxConfig())
一個容器,用於在行/列中顯示元素,並在滿時能夠換行到下一列/行。
std::shared_ptr< Node > Element
Element hbox(Elements children)
一個逐一水平顯示元素的容器。
std::vector< Element > Elements
FTXUI_EXPORT(SCREEN) std FTXUI_EXPORT(SCREEN) std std::wstring to_wstring(T s)
void Render(Screen &screen, Node *node, Selection &selection)