Add rest of justify flags to flex box
This commit is contained in:
@@ -27,13 +27,14 @@ typedef struct BzUINode {
|
||||
BzUIStyle style;
|
||||
BzUIFlags flags;
|
||||
const char *string;
|
||||
BzUISize semanticSize[BZ_UI_AXIS_COUNT];
|
||||
f32 padding[BZ_UI_AXIS_COUNT * 2];
|
||||
f32 margin[BZ_UI_AXIS_COUNT * 2];
|
||||
|
||||
BzUISize semanticSize[BZ_UI_AXIS_COUNT];
|
||||
f32 padding[BZ_UI_AXIS_COUNT * 2];
|
||||
f32 margin[BZ_UI_AXIS_COUNT * 2];
|
||||
|
||||
// recomputed every frame
|
||||
f32 computedPosition[BZ_UI_AXIS_COUNT];
|
||||
f32 computedSize[BZ_UI_AXIS_COUNT];
|
||||
f32 computedPosition[BZ_UI_AXIS_COUNT];
|
||||
f32 computedSize[BZ_UI_AXIS_COUNT];
|
||||
|
||||
BzUIInteraction interaction;
|
||||
} BzUINode;
|
||||
@@ -188,27 +189,38 @@ static void calculatePositionsFlexBox(BzUINode *node) {
|
||||
BzUIFlags flags = node->layout.flags;
|
||||
|
||||
f32 totalMainAxisSize = 0.0f;
|
||||
f32 mainAxisSpacing = 0.0f;
|
||||
|
||||
const i32 MAIN_AXIS = (flags & BZ_UI_FLEX_DIR_COLUMN) ? BZ_UI_AXIS_Y : BZ_UI_AXIS_X;
|
||||
const i32 CROSS_AXIS = (flags & BZ_UI_FLEX_DIR_COLUMN) ? BZ_UI_AXIS_X : BZ_UI_AXIS_Y;
|
||||
|
||||
i32 numChildren = 0;
|
||||
|
||||
for (BzUINode *child = node->first; child; child = child->next) {
|
||||
totalMainAxisSize += child->computedSize[MAIN_AXIS];
|
||||
mainAxisSpacing += child->margin[MAIN_AXIS] +
|
||||
child->margin[MAIN_AXIS + 2] +
|
||||
child->style.borderThickness * 2;
|
||||
totalMainAxisSize += child->computedSize[MAIN_AXIS] +
|
||||
child->margin[MAIN_AXIS] +
|
||||
child->margin[MAIN_AXIS + 2] +
|
||||
child->style.borderThickness * 2;
|
||||
numChildren++;
|
||||
}
|
||||
|
||||
f32 mainAxisTotalSpacing = node->computedSize[MAIN_AXIS] - totalMainAxisSize - mainAxisSpacing;
|
||||
f32 mainAxisTotalSpacing = node->computedSize[MAIN_AXIS] - totalMainAxisSize;
|
||||
mainAxisTotalSpacing = BZ_MAX(0, mainAxisTotalSpacing);
|
||||
|
||||
// Default: JUSTIFY_START
|
||||
f32 mainAxisOffset = 0.0f;
|
||||
f32 mainAxisStep = 0.0f;
|
||||
if (flags & BZ_UI_FLEX_JUSTIFY_CENTER) {
|
||||
mainAxisOffset = mainAxisTotalSpacing * 0.5f;
|
||||
} else if (flags & BZ_UI_FLEX_JUSTIFY_END) {
|
||||
mainAxisOffset = mainAxisTotalSpacing;
|
||||
} else if (flags & BZ_UI_FLEX_JUSTIFY_SPACE_BETWEEN) {
|
||||
mainAxisStep = mainAxisTotalSpacing / BZ_MAX(1, numChildren - 1);
|
||||
} else if (flags & BZ_UI_FLEX_JUSTIFY_SPACE_AROUND) {
|
||||
mainAxisStep = mainAxisTotalSpacing / BZ_MAX(1, numChildren);
|
||||
mainAxisOffset = mainAxisStep * 0.5f;
|
||||
} else if (flags & BZ_UI_FLEX_JUSTIFY_SPACE_EVENLY) {
|
||||
mainAxisStep = mainAxisTotalSpacing / (numChildren + 1);
|
||||
mainAxisOffset = mainAxisStep;
|
||||
}
|
||||
|
||||
f32 axisOffset[BZ_UI_AXIS_COUNT];
|
||||
@@ -224,8 +236,11 @@ static void calculatePositionsFlexBox(BzUINode *node) {
|
||||
}
|
||||
|
||||
axisOffset[MAIN_AXIS] += child->margin[MAIN_AXIS];
|
||||
axisOffset[MAIN_AXIS] += child->style.borderThickness;
|
||||
calculatePositions(child, axisOffset[BZ_UI_AXIS_X], axisOffset[BZ_UI_AXIS_Y]);
|
||||
axisOffset[MAIN_AXIS] += child->style.borderThickness;
|
||||
axisOffset[MAIN_AXIS] += child->margin[MAIN_AXIS + 2];
|
||||
axisOffset[MAIN_AXIS] += mainAxisStep;
|
||||
axisOffset[MAIN_AXIS] += child->computedSize[MAIN_AXIS];
|
||||
}
|
||||
|
||||
|
||||
@@ -35,15 +35,18 @@ enum {
|
||||
BZ_UI_UNIDIR_COLUMN = (1 << 1),
|
||||
BZ_UI_UNIDIR_WRAP = (1 << 2),
|
||||
// FLEX BOX
|
||||
BZ_UI_FLEX_NONE = 0,
|
||||
BZ_UI_FLEX_DIR_ROW = (1 << 0),
|
||||
BZ_UI_FLEX_DIR_COLUMN = (1 << 1),
|
||||
BZ_UI_FLEX_ALIGN_START = (1 << 2),
|
||||
BZ_UI_FLEX_ALIGN_CENTER = (1 << 3),
|
||||
BZ_UI_FLEX_ALIGN_END = (1 << 4),
|
||||
BZ_UI_FLEX_JUSTIFY_START = (1 << 5),
|
||||
BZ_UI_FLEX_JUSTIFY_CENTER = (1 << 6),
|
||||
BZ_UI_FLEX_JUSTIFY_END = (1 << 7)
|
||||
BZ_UI_FLEX_NONE = 0,
|
||||
BZ_UI_FLEX_DIR_ROW = (1 << 0),
|
||||
BZ_UI_FLEX_DIR_COLUMN = (1 << 1),
|
||||
BZ_UI_FLEX_ALIGN_START = (1 << 2),
|
||||
BZ_UI_FLEX_ALIGN_CENTER = (1 << 3),
|
||||
BZ_UI_FLEX_ALIGN_END = (1 << 4),
|
||||
BZ_UI_FLEX_JUSTIFY_START = (1 << 5),
|
||||
BZ_UI_FLEX_JUSTIFY_CENTER = (1 << 6),
|
||||
BZ_UI_FLEX_JUSTIFY_END = (1 << 7),
|
||||
BZ_UI_FLEX_JUSTIFY_SPACE_BETWEEN = (1 << 8),
|
||||
BZ_UI_FLEX_JUSTIFY_SPACE_AROUND = (1 << 9),
|
||||
BZ_UI_FLEX_JUSTIFY_SPACE_EVENLY = (1 << 10),
|
||||
};
|
||||
|
||||
typedef struct BzUILayout {
|
||||
|
||||
Reference in New Issue
Block a user