FTXUI 6.1.9
C++ functional terminal UI.
载入中...
搜索中...
未找到
flexbox_config.hpp
浏览该文件的文档.
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/*
8
9 这复刻了 CSS 弹性盒子模型。
10
11 请参阅文档指南:
12
13 https://css-tricks.com/snippets/css/a-guide-to-flexbox/
14
15*/
16
17namespace ftxui {
18
19/// @brief FlexboxConfig 是一个配置结构体,定义了弹性盒子容器的布局属性。
20//
21/// 它允许您指定弹性项目的方向、是否应该换行、它们在主轴上如何对齐,以及它们在交叉轴上如何对齐。
22/// 它还包括弹性项目在主轴和交叉轴上间距的属性。
23/// 该结构体用于配置终端用户界面中弹性盒子容器的布局行为。
24///
25/// @ingroup dom
27 /// 这建立了主轴,从而定义了弹性项目在弹性容器中的放置方向。弹性盒子(除了换行)是单方向的
28 /// 布局概念。可以将弹性项目主要视为水平行或垂直列的布局。
29 enum class Direction {
30 Row, ///< 弹性项目按行排列。
31 RowInversed, ///< 弹性项目按行反向排列。
32 Column, ///< 弹性项目按列排列。
33 ColumnInversed ///< 弹性项目按列反向排列。
34 ///< 序。
35 };
37
38 /// 默认情况下,弹性项目将全部尝试适应一行。您可以通过此属性更改它,并允许项目根据需要换行。
39 enum class Wrap {
40 NoWrap, ///< 弹性项目将全部尝试适应一行。
41 Wrap, ///< 弹性项目将换行到多行。
42 WrapInversed, ///< 弹性项目将换行到多行,但顺序相反。
43 ///< order.
44 };
46
47 /// 这定义了沿主轴的对齐方式。当一行上的所有弹性项目都是不可伸缩的,
48 /// 或者它们是可伸缩的但已达到其最大大小时,它有助于分配剩余的额外可用空间。
49 /// 它还对项目溢出线时的对齐方式施加一些控制。
50 enum class JustifyContent {
51 /// 项目与弹性盒子方向的起始对齐。
53 /// 项目与弹性盒子方向的末尾对齐。
54 FlexEnd,
55 /// 项目沿线居中。
56 Center,
57 /// 项目拉伸以填充该行。
58 Stretch,
59 /// 项目在线上均匀分布;第一个项目在起始线,最后一个项目在结束线
60 // line, last item on the end line
62 /// 项目在线上均匀分布,周围有相等的空间。
63 /// 请注意,视觉上空间不相等,因为所有项目两侧都有相等的空间。
64 /// 第一个项目与容器边缘之间有一个单位的空间,但与下一个项目之间有两个单位的空间,
65 /// 因为下一个项目有其自己的间距。
67 /// 项目分布使得任意两个项目之间(以及到边缘的空间)的间距相等。
69 };
71
72 /// 这定义了弹性项目在当前行上沿交叉轴的默认布局行为。
73 /// 可以将其视为交叉轴(垂直于主轴)的 justify-content 版本。
74 enum class AlignItems {
75 FlexStart, ///< 项目放置在交叉轴的起始位置。
76 FlexEnd, ///< 项目放置在交叉轴的结束位置。
77 Center, ///< 项目沿交叉轴居中。
78 Stretch, ///< 项目拉伸以填充交叉轴。
79 };
81
82 // 这定义了弹性容器在交叉轴中有额外空间时,如何对齐其行,
83 // 类似于 justify-content 如何对齐主轴内的单个项目。
84 enum class AlignContent {
85 FlexStart, ///< 项目放置在交叉轴的起始位置。
86 FlexEnd, ///< 项目放置在交叉轴的结束位置。
87 Center, ///< 项目沿交叉轴居中。
88 Stretch, ///< 项目拉伸以填充交叉轴。
89 SpaceBetween, ///< 项目在交叉轴上均匀分布。
90 SpaceAround, ///< 项目均匀分布,每行周围有相等的空间。
91 ///< line.
92 SpaceEvenly, ///< 项目在交叉轴上均匀分布,周围有相等的空间。
93 ///< space around them.
94 };
96
97 int gap_x = 0;
98 int gap_y = 0;
99
100 // 构造函数模式。用于链式调用,例如:
101 // ```
102 // FlexboxConfig()
103 // .Set(FlexboxConfig::Direction::Row)
104 // .Set(FlexboxConfig::Wrap::Wrap);
105 // ```
111 FlexboxConfig& SetGap(int gap_x, int gap_y);
112};
113
114} // namespace ftxui
115
116#endif // FTXUI_DOM_FLEXBOX_CONFIG_HPP
@ FlexStart
项目放置在交叉轴的起始位置。
@ Column
弹性项目按列排列。
@ Row
弹性项目按行排列。
@ RowInversed
弹性项目按行反向排列。
Wrap
默认情况下,弹性项目将全部尝试适应一行。您可以通过此属性更改它,并允许项目根据需要换行。
@ NoWrap
弹性项目将全部尝试适应一行。
@ Wrap
弹性项目将换行到多行。
@ FlexStart
项目放置在交叉轴的起始位置。
FlexboxConfig & SetGap(int gap_x, int gap_y)
设置 flexbox flex direction。
@ SpaceEvenly
项目分布使得任意两个项目之间(以及到边缘的空间)的间距相等。
@ FlexStart
项目与弹性盒子方向的起始对齐。
@ FlexEnd
项目与弹性盒子方向的末尾对齐。
@ SpaceBetween
项目在线上均匀分布;第一个项目在起始线,最后一个项目在结束线
@ Stretch
项目拉伸以填充该行。
FlexboxConfig & Set(FlexboxConfig::Direction)
设置 flexbox 方向。
FlexboxConfig 是一个配置结构体,定义了弹性盒子容器的布局属性。
#include "ftxui/component/component_base.hpp" // 用于 ComponentBase