VEX Engine
Retro looking game engine made in vulkan mostly because i wanted to understand it better.
Loading...
Searching...
No Matches
Layout.hpp
1#pragma once
2#include <vector>
3#include <cmath>
4#include <functional>
5#include <algorithm>
6
7namespace vex {
8
9class VexUI;
10
11enum class FlexDirection { Row, Column };
12enum class PositionType { Relative, Absolute };
13enum class Justify { FlexStart, Center, FlexEnd, SpaceBetween };
14enum class Align { Auto, FlexStart, Center, FlexEnd, Stretch, Baseline };
15enum class FlexWrap { NoWrap, Wrap, WrapReverse };
16
18struct FlexValue {
19 float v = NAN;
20 bool isPercent = false;
21
25 float resolve(float parent) const {
26 if (std::isnan(v)) return NAN;
27 return isPercent ? (v / 100.0f) * parent : v;
28 }
29
34 float resolveOr(float parent, float fallback) const {
35 float res = resolve(parent);
36 return std::isnan(res) ? fallback : res;
37 }
38};
39
41struct LayoutNode {
42 LayoutNode* parent = nullptr;
43 std::vector<LayoutNode*> children;
44 void* context = nullptr;
45
51
59
67
75
80
83 float flexGrow = 0.0f;
84 float flexShrink = 1.0f;
86
89 FlexDirection flexDirection = FlexDirection::Column;
90 PositionType positionType = PositionType::Relative;
91 Justify justifyContent = Justify::FlexStart;
92 Align alignItems = Align::Stretch;
93 Align alignSelf = Align::Auto;
94 FlexWrap flexWrap = FlexWrap::NoWrap;
96
98 std::function<void(LayoutNode*, float, float)> measureFunc = nullptr;
99
102 float computedLeft = 0.0f;
103 float computedTop = 0.0f;
104 float computedWidth = 0.0f;
105 float computedHeight = 0.0f;
107
111 void insertChild(LayoutNode* child, size_t index) {
112 child->parent = this;
113 children.insert(children.begin() + index, child);
114 }
115};
116
125void calculateLayout(LayoutNode* node, float parentWidth, float parentHeight, bool isRoot = false, const VexUI* ui = nullptr, float forcedW = NAN, float forcedH = NAN);
126} // namespace vex
Class defining VexUI, it initializes the UI system, loads, renders, converts ui data,...
Definition VexUI.hpp:139
void calculateLayout(LayoutNode *node, float parentWidth, float parentHeight, bool isRoot=false, const VexUI *ui=nullptr, float forcedW=NAN, float forcedH=NAN)
Calculate the layout of a node tree using flex layout algorithm.
Definition VexUI.cpp:16
Lightweight struct to hold parsed sizes safely away from VexUI dependencies.
Definition Layout.hpp:18
float v
Raw value.
Definition Layout.hpp:19
float resolve(float parent) const
Resolve the flex value to pixels based on parent dimension.
Definition Layout.hpp:25
float resolveOr(float parent, float fallback) const
Resolve the flex value to pixels, with a fallback if unspecified.
Definition Layout.hpp:34
bool isPercent
Whether value is a percentage.
Definition Layout.hpp:20
Layout node representing a single UI element in the layout tree.
Definition Layout.hpp:41
FlexValue paddingLeft
Left padding.
Definition Layout.hpp:70
FlexValue marginTop
Top margin.
Definition Layout.hpp:63
FlexValue marginRight
Right margin.
Definition Layout.hpp:64
FlexValue paddingBottom
Bottom padding.
Definition Layout.hpp:73
FlexValue left
Left position offset.
Definition Layout.hpp:54
void insertChild(LayoutNode *child, size_t index)
Insert a child node at a specific index.
Definition Layout.hpp:111
FlexValue height
Element height.
Definition Layout.hpp:49
void * context
Opaque context pointer for user data.
Definition Layout.hpp:44
FlexValue borderWidth
Border width.
Definition Layout.hpp:78
FlexValue top
Top position offset.
Definition Layout.hpp:55
std::vector< LayoutNode * > children
Child nodes.
Definition Layout.hpp:43
Justify justifyContent
Justify content alignment.
Definition Layout.hpp:91
FlexValue bottom
Bottom position offset.
Definition Layout.hpp:57
float computedHeight
Computed height.
Definition Layout.hpp:105
std::function< void(LayoutNode *, float, float)> measureFunc
Measure function for intrinsic sizing (e.g., text).
Definition Layout.hpp:98
FlexValue marginBottom
Bottom margin.
Definition Layout.hpp:65
float flexShrink
Flex shrink factor.
Definition Layout.hpp:84
float flexGrow
Flex grow factor.
Definition Layout.hpp:83
FlexValue width
Element width.
Definition Layout.hpp:48
FlexValue marginLeft
Left margin.
Definition Layout.hpp:62
float computedWidth
Computed width.
Definition Layout.hpp:104
float computedTop
Computed top position.
Definition Layout.hpp:103
Align alignSelf
Align self override.
Definition Layout.hpp:93
PositionType positionType
Position type (relative or absolute).
Definition Layout.hpp:90
FlexDirection flexDirection
Direction of flex layout.
Definition Layout.hpp:89
FlexValue paddingRight
Right padding.
Definition Layout.hpp:72
LayoutNode * parent
Parent node in the layout tree.
Definition Layout.hpp:42
float computedLeft
Computed left position.
Definition Layout.hpp:102
FlexWrap flexWrap
Flex wrap behavior.
Definition Layout.hpp:94
FlexValue right
Right position offset.
Definition Layout.hpp:56
FlexValue paddingTop
Top padding.
Definition Layout.hpp:71
Align alignItems
Align items cross-axis alignment.
Definition Layout.hpp:92