FIX: Align Items recurisvely
This commit is contained in:
parent
9a05a0c854
commit
a06d649f99
@ -90,43 +90,56 @@ void UiPositioner::compute(const Dimensions &parent) {
|
|||||||
|
|
||||||
// AlignItems
|
// AlignItems
|
||||||
for (auto& child : uiComponent.children) {
|
for (auto& child : uiComponent.children) {
|
||||||
|
float oldX = child->uiPositioner.screenSpace.x;
|
||||||
|
float oldY = child->uiPositioner.screenSpace.y;
|
||||||
|
|
||||||
if (style.flexDirection == FlexDirection::Column) {
|
if (style.flexDirection == FlexDirection::Column) {
|
||||||
float marginLeft = child->uiPositioner.resolve(child->uiPositioner.style.margin.left,screenSpace.width,screenWidth);
|
float marginLeft = child->uiPositioner.resolve(child->uiPositioner.style.margin.left,screenSpace.width,screenWidth);
|
||||||
float remainingCrossSpace = screenSpace.width - child->uiPositioner.screenSpace.width ;
|
float remainingCrossSpace = screenSpace.width - child->uiPositioner.screenSpace.width ;
|
||||||
switch (style.alignItems) {
|
switch (style.alignItems) {
|
||||||
case AlignItems::Start:
|
case AlignItems::Start:
|
||||||
child->uiPositioner.updatePosition(screenSpace.x + marginLeft, child->uiPositioner.screenSpace.y);
|
child->uiPositioner.screenSpace.x = screenSpace.x + marginLeft;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AlignItems::Center:
|
case AlignItems::Center:
|
||||||
child->uiPositioner.updatePosition(screenSpace.x + remainingCrossSpace / 2.0f + marginLeft, child->uiPositioner.screenSpace.y);
|
child->uiPositioner.screenSpace.x = screenSpace.x + remainingCrossSpace / 2.0f + marginLeft;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AlignItems::End:
|
case AlignItems::End:
|
||||||
child->uiPositioner.updatePosition(screenSpace.x + remainingCrossSpace + marginLeft, child->uiPositioner.screenSpace.y);
|
child->uiPositioner.screenSpace.x = screenSpace.x + remainingCrossSpace + marginLeft;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float dx = child->uiPositioner.screenSpace.x - oldX;
|
||||||
|
for (auto& grandchild : child->children) {
|
||||||
|
grandchild->uiPositioner.offsetPosition(dx,0.0f);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
float remainingCrossSpace = screenSpace.height - child->uiPositioner.screenSpace.height;
|
float remainingCrossSpace = screenSpace.height - child->uiPositioner.screenSpace.height;
|
||||||
float marginTop = child->uiPositioner.resolve(child->uiPositioner.style.margin.top,screenSpace.height,screenHeight);
|
float marginTop = child->uiPositioner.resolve(child->uiPositioner.style.margin.top,screenSpace.height,screenHeight);
|
||||||
switch (style.alignItems) {
|
switch (style.alignItems) {
|
||||||
case AlignItems::Start:
|
case AlignItems::Start:
|
||||||
child->uiPositioner.updatePosition(child->uiPositioner.screenSpace.x, screenSpace.y + marginTop);
|
child->uiPositioner.screenSpace.y = screenSpace.y + marginTop;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AlignItems::Center:
|
case AlignItems::Center:
|
||||||
child->uiPositioner.updatePosition(child->uiPositioner.screenSpace.x, screenSpace.y + remainingCrossSpace / 2.0f + marginTop);
|
child->uiPositioner.screenSpace.y += remainingCrossSpace / 2.0f + marginTop;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AlignItems::End:
|
case AlignItems::End:
|
||||||
child->uiPositioner.updatePosition(child->uiPositioner.screenSpace.x, screenSpace.y + remainingCrossSpace + marginTop);
|
child->uiPositioner.screenSpace.y += remainingCrossSpace + marginTop;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float dy = child->uiPositioner.screenSpace.y - oldY;
|
||||||
|
for (auto& grandchild : child->children) {
|
||||||
|
grandchild->uiPositioner.offsetPosition(0.0f,dy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user