FTXUI 7.0.3
C++ functional terminal UI.
Loading...
Searching...
No Matches
flexbox_config.hpp
Go to the documentation of this file.
1// Copyright 2021 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.
4#ifndef FTXUI_DOM_FLEXBOX_CONFIG_HPP
5#define FTXUI_DOM_FLEXBOX_CONFIG_HPP
6
7#include <cstdint>
8
9#include "ftxui/util/export.hpp" // for FTXUI_EXPORT
10
11/*
12 這複製了 CSS flexbox 模型。
13 請參閱指南文件:
14 https://css-tricks.com/snippets/css/a-guide-to-flexbox/
15*/
16
17namespace ftxui {
18
19/// @brief FlexboxConfig 是一個配置結構,用於定義彈性盒容器的佈局屬性。
20//
21/// 它允許您指定彈性項目的方向、是否應該換行、它們在主軸上的對齊方式,以及
22/// 它們在交叉軸上的對齊方式。
23/// 它還包括彈性項目在主軸和交叉軸之間間距的屬性。
24/// 此結構用於配置終端使用者介面中彈性盒容器的佈局行為。
25///
26/// @ingroup dom
27struct FTXUI_EXPORT(DOM) FlexboxConfig {
28 /// 這決定了主軸,也就是彈性項目在彈性容器中
29 /// 排列的方向。除了換行外,Flexbox 是單方向的
30 /// 布局概念。可以將彈性項目想成主要以
31 /// 水平列或垂直欄的方式排列。
32 enum class Direction : uint8_t {
33 Row, ///< 彈性項目以列的方式排列。
34 RowInversed, ///< 彈性項目以列的方式排列,但順序相反。
35 Column, ///< 彈性項目以欄的方式排列。
36 ColumnInversed ///< 彈性項目以欄的方式排列,但順序
37 ///< 相反。
38 };
39 Direction direction = Direction::Row;
40
41 /// 預設情況下,彈性項目都會嘗試放入同一行。你可以透過此屬性
42 /// 改變此行為,讓項目視需要換行。
43 enum class Wrap : uint8_t {
44 NoWrap, ///< 彈性項目都會嘗試放入同一行。
45 Wrap, ///< 彈性項目會換行到多行。
46 WrapInversed, ///< 彈性項目會換行到多行,但順序
47 ///< 相反。
48 };
49 Wrap wrap = Wrap::Wrap;
50
51 /// 這定義了沿主軸的對齊方式。它有助於分配
52 /// 當一行中所有彈性項目都是不可彈性的,或雖可彈性但已達最大
53 /// 大小時,剩餘的額外可用空間。它也在項目
54 /// 超出該行時對對齊方式有一定的控制。
55 enum class JustifyContent : uint8_t {
56 /// 項目對齊到 flexbox 方向的起始處。
57 FlexStart,
58 /// 項目對齊到 flexbox 方向的結束處。
59 FlexEnd,
60 /// 項目沿著該行置中對齊。
61 Center,
62 /// 項目被拉伸以填滿該行。
63 Stretch,
64 /// 項目在該行中平均分佈;第一個項目在起始
65 // 行,最後一個項目在結束行
66 SpaceBetween,
67 /// 項目在該行中平均分佈,項目周圍留有相等的空間。
68 /// 注意在視覺上這些空間並不相等,因為所有項目
69 /// 在兩側都留有相等的空間。第一個項目相對於容器邊緣
70 /// 只有一個單位的空間,但與下一個項目之間卻有兩個單位的
71 /// 空間,因為下一個項目也套用了自己的間距。
72 SpaceAround,
73 /// 項目分佈的方式,使任意兩個項目之間(以及與邊緣之間)
74 /// 的間距都相等。
75 SpaceEvenly,
76 };
77 JustifyContent justify_content = JustifyContent::FlexStart;
78
79 /// 這定義了彈性項目在當前行上沿交叉軸佈局的預設行為。
80 /// 將其視為交叉軸(垂直於主軸)的 justify-content 版本。
81 enum class AlignItems : uint8_t {
82 FlexStart, ///< 項目放置在交叉軸的起始處。
83 FlexEnd, ///< 項目放置在交叉軸的結束處。
84 Center, ///< 項目沿著交叉軸置中對齊。
85 Stretch, ///< 項目被拉伸以填滿交叉軸。
86 };
87 AlignItems align_items = AlignItems::FlexStart;
88
89 // 這會在交叉軸有額外空間時對齊彈性容器的線,
90 // 類似於 justify-content 在主軸內對齊單個項目。
91 enum class AlignContent : uint8_t {
92 FlexStart, ///< 項目放置在交叉軸的起始處。
93 FlexEnd, ///< 項目放置在交叉軸的結束處。
94 Center, ///< 項目沿著交叉軸置中對齊。
95 Stretch, ///< 項目被拉伸以填滿交叉軸。
96 SpaceBetween, ///< 項目在交叉軸上平均分佈。
97 SpaceAround, ///< 項目平均分佈,每一行周圍留有
98 ///< 相等的空間。
99 SpaceEvenly, ///< 項目在交叉軸上平均分佈,項目周圍
100 ///< 留有相等的空間。
101 };
102 AlignContent align_content = AlignContent::FlexStart;
103
104 int gap_x = 0;
105 int gap_y = 0;
106
107 // 建構子模式。用於鏈式使用,例如:
108 // ```
109 // FlexboxConfig()
110 // .Set(FlexboxConfig::Direction::Row)
111 // .Set(FlexboxConfig::Wrap::Wrap);
112 // ```
113 FlexboxConfig& Set(FlexboxConfig::Direction);
114 FlexboxConfig& Set(FlexboxConfig::Wrap);
115 FlexboxConfig& Set(FlexboxConfig::JustifyContent);
116 FlexboxConfig& Set(FlexboxConfig::AlignItems);
117 FlexboxConfig& Set(FlexboxConfig::AlignContent);
118 FlexboxConfig& SetGap(int gap_x, int gap_y);
119};
120
121} // namespace ftxui
122
123#endif // FTXUI_DOM_FLEXBOX_CONFIG_HPP
Component Wrap(std::string name, Component component)
Definition gallery.cpp:18
Direction
Direction 是一個列舉,表示四個主要方向。
Definition direction.hpp:14
FTXUI ftxui:: 命名空間
Definition animation.hpp:11
Direction direction
Definition elements.hpp:80