载入中...
搜索中...
未找到
Layout.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "ui/UIHost.h"
6
7#include <vector>
8
9namespace eve::ui {
10
26 float basisMain = 0.f; // measured content size on main axis
27 float basisCross = 0.f; // measured content size on cross axis
28 float marginBefore = 0.f; // leading main-axis margin
29 float marginAfter = 0.f; // trailing main-axis margin
30 float marginCrossBefore = 0.f;
31 float marginCrossAfter = 0.f;
32 float flexGrow = 0.f;
33 float flexShrink = 1.f; // negative free space weight; 0 keeps basis fixed
34 float flexBasis = -1.f; // >=0 overrides measured basis before min/max
35 float aspectRatio = 0.f; // width / height; derives an automatic cross size
36 bool isSpacer = false; // default grow = 1
37 bool absolute = false; // excluded from flex flow
38 float anchorMain = 0.f; // 0..1 anchor point inside content box
39 float anchorCross = 0.f;
40 float posMain = 0.f; // offset from the anchored edge
41 float posCross = 0.f;
42 float percentMain = 0.f; // 0..1 of available main size; overrides basis
43 float percentCross = 0.f;
44 float minMain = 0.f;
45 float maxMain = 0.f;
46 float minCross = 0.f;
47 float maxCross = 0.f;
48 float explicitMain = 0.f; // >0 overrides basisMain (fixed size)
49 float explicitCross = 0.f; // >0 overrides basisCross
51 int alignSelf = -1;
52};
53
56struct FlexRect {
57 float x = 0.f;
58 float y = 0.f;
59 float w = 0.f;
60 float h = 0.f;
61};
62
64struct FlexResult {
65 std::vector<FlexRect> items; // one per non-absolute item, same order
66 float contentW = 0.f; // total outer extent on X
67 float contentH = 0.f; // total outer extent on Y
68 float overflowMain = 0.f; // unresolved main-axis deficit after shrink/min limits
69};
70
76EVENGINE_API_WORLD FlexResult flexArrange(bool row, float gap, float availMain, float availCross,
77 FlexAlign containerAlign, FlexJustify justify,
78 const std::vector<FlexItemSpec> &items, bool wrap = false,
79 float crossGap = -1.f);
80
83 float basisW = 0.f;
84 float basisH = 0.f;
85 float marginL = 0.f;
86 float marginT = 0.f;
87 float marginR = 0.f;
88 float marginB = 0.f;
89 float aspectRatio = 0.f;
90 int columnSpan = 1;
91};
92
94struct GridResult {
95 std::vector<FlexRect> items;
96 float contentW = 0.f;
97 float contentH = 0.f;
98 float overflowX = 0.f;
99};
100
102EVENGINE_API_WORLD GridResult gridArrange(int columns, float columnGap, float rowGap, float availWidth,
103 const std::vector<GridItemSpec> &items);
104
107void measureNode(UIHost::Tree &tree, int index);
108
112
115void measureFlowChildren(UIHost::Tree &tree, int firstChild, float *outW, float *outH);
116
117} // namespace eve::ui
float gap
#define EVENGINE_API_WORLD
Definition Export.h:109
int columns
uint32_t index
GridResult gridArrange(int columns, float columnGap, float rowGap, float availWidth, const std::vector< GridItemSpec > &items)
Places source-ordered items into equal-width fixed columns.
Definition Layout.cpp:276
void measureTree(UIHost::Tree &tree)
Measure tree.
Definition Layout.cpp:667
FlexJustify
Main-axis distribution of free space in a Flex container.
Definition UIHost.h:70
void measureNode(UIHost::Tree &tree, int index)
Measure node.
Definition Layout.cpp:369
WidgetDesc row(std::vector< WidgetDesc > children, std::string id)
Horizontal elastic layout row.
Definition Widget.cpp:679
FlexResult flexArrange(bool row, float gap, float availMain, float availCross, FlexAlign containerAlign, FlexJustify justify, const std::vector< FlexItemSpec > &items, bool wrap, float crossGap)
Flex arrange.
Definition Layout.cpp:201
FlexAlign
Cross-axis alignment of Flex children.
Definition UIHost.h:67
void measureFlowChildren(UIHost::Tree &tree, int firstChild, float *outW, float *outH)
Measure flow children.
Definition Layout.cpp:331
FlexItemSpec public API.
Definition Layout.h:25
float marginCrossBefore
Definition Layout.h:30
FlexRect public API.
Definition Layout.h:56
FlexResult public API.
Definition Layout.h:64
std::vector< FlexRect > items
Definition Layout.h:65
GridItemSpec public API.
Definition Layout.h:82
GridResult public API.
Definition Layout.h:94
std::vector< FlexRect > items
Definition Layout.h:95