From beca6e4d3bfc479588977cb977e9eb96eed53fb6 Mon Sep 17 00:00:00 2001 From: sebastian Date: Thu, 12 Feb 2026 13:18:52 +0100 Subject: [PATCH] ADD: Align Items --- .../core/gui/uiComponent/layout/LayoutStyle.h | 1 + .../gui/uiComponent/layout/UiPositioner.cpp | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/src/engine/core/gui/uiComponent/layout/LayoutStyle.h b/src/engine/core/gui/uiComponent/layout/LayoutStyle.h index c134c16..a94d7b6 100644 --- a/src/engine/core/gui/uiComponent/layout/LayoutStyle.h +++ b/src/engine/core/gui/uiComponent/layout/LayoutStyle.h @@ -50,6 +50,7 @@ struct LayoutStyle { FlexDirection flexDirection = FlexDirection::Column; JustifyContent justifyContent = JustifyContent::Start; + AlignItems alignItems = AlignItems::Start; float flexGrow = 0.0f; }; diff --git a/src/engine/core/gui/uiComponent/layout/UiPositioner.cpp b/src/engine/core/gui/uiComponent/layout/UiPositioner.cpp index 2a912d5..ce11cc4 100644 --- a/src/engine/core/gui/uiComponent/layout/UiPositioner.cpp +++ b/src/engine/core/gui/uiComponent/layout/UiPositioner.cpp @@ -61,6 +61,52 @@ void UiPositioner::compute(const Dimensions &parent) { } } + // AlignItems + for (auto& child : uiComponent.children) { + if (style.flexDirection == FlexDirection::Column) { + float marginLeft = child->uiPositioner.resolve(child->uiPositioner.style.margin.left,screenSpace.width,screenWidth); + float remainingCrossSpace = screenSpace.width - child->uiPositioner.screenSpace.width ; + switch (style.alignItems) { + case AlignItems::Start: + child->uiPositioner.screenSpace.x = screenSpace.x + marginLeft; + break; + + case AlignItems::Center: + child->uiPositioner.screenSpace.x = + screenSpace.x + remainingCrossSpace / 2.0f + marginLeft; + break; + + case AlignItems::End: + child->uiPositioner.screenSpace.x = screenSpace.x + remainingCrossSpace + marginLeft; + break; + + default: + break; + } + } else { + float remainingCrossSpace = screenSpace.height - child->uiPositioner.screenSpace.height; + float marginTop = child->uiPositioner.resolve(child->uiPositioner.style.margin.top,screenSpace.height,screenHeight); + switch (style.alignItems) { + case AlignItems::Start: + child->uiPositioner.screenSpace.y = screenSpace.y + marginTop; + break; + + case AlignItems::Center: + child->uiPositioner.screenSpace.y = + screenSpace.y + remainingCrossSpace / 2.0f + marginTop; + break; + + case AlignItems::End: + child->uiPositioner.screenSpace.y = + screenSpace.y + remainingCrossSpace + marginTop; + break; + + default: + break; + } + } + } + } LayoutStyle & UiPositioner::getLayout() {