document loop D
This commit is contained in:
@@ -422,38 +422,53 @@ var computeLayout = (function() {
|
|||||||
for (var/*int*/ i = 0; i < node.children.length; ++i) {
|
for (var/*int*/ i = 0; i < node.children.length; ++i) {
|
||||||
var/*css_node_t**/ child = node.children[i];
|
var/*css_node_t**/ child = node.children[i];
|
||||||
|
|
||||||
if (getPositionType(child) === CSS_POSITION_RELATIVE) {
|
if (getPositionType(child) === CSS_POSITION_ABSOLUTE &&
|
||||||
var/*css_align_t*/ alignItem = getAlignItem(node, child);
|
isPosDefined(child, leading[crossAxis])) {
|
||||||
var/*float*/ remainingCrossDim = node.layout[dim[crossAxis]] -
|
// In case the child is absolutely positionned and has a
|
||||||
getDimWithMargin(child, crossAxis) -
|
// top/left/bottom/right being set, we override all the previously
|
||||||
getPaddingAndBorderAxis(node, crossAxis);
|
// computed positions to set it correctly.
|
||||||
|
child.layout[pos[crossAxis]] = getPosition(child, leading[crossAxis]) +
|
||||||
|
getBorder(node, leading[crossAxis]) +
|
||||||
|
getMargin(child, leading[crossAxis]);
|
||||||
|
|
||||||
|
} else {
|
||||||
var/*float*/ leadingCrossDim = getPaddingAndBorder(node, leading[crossAxis]);
|
var/*float*/ leadingCrossDim = getPaddingAndBorder(node, leading[crossAxis]);
|
||||||
if (alignItem === CSS_ALIGN_FLEX_START) {
|
|
||||||
// Do nothing
|
// For a relative children, we're either using alignItems (parent) or
|
||||||
} else if (alignItem === CSS_ALIGN_CENTER) {
|
// alignSelf (child) in order to determine the position in the cross axis
|
||||||
leadingCrossDim += remainingCrossDim / 2;
|
if (getPositionType(child) === CSS_POSITION_RELATIVE) {
|
||||||
} else if (alignItem === CSS_ALIGN_FLEX_END) {
|
var/*css_align_t*/ alignItem = getAlignItem(node, child);
|
||||||
leadingCrossDim += remainingCrossDim;
|
if (alignItem === CSS_ALIGN_FLEX_START) {
|
||||||
} else if (alignItem === CSS_ALIGN_STRETCH) {
|
// Do nothing
|
||||||
if (!isDimDefined(child, crossAxis)) {
|
} else if (alignItem === CSS_ALIGN_STRETCH) {
|
||||||
child.layout[dim[crossAxis]] = fmaxf(
|
// You can only stretch if the dimension has not already been set
|
||||||
node.layout[dim[crossAxis]] -
|
// previously.
|
||||||
getPaddingAndBorderAxis(node, crossAxis) -
|
if (!isDimDefined(child, crossAxis)) {
|
||||||
getMarginAxis(child, crossAxis),
|
child.layout[dim[crossAxis]] = fmaxf(
|
||||||
getPaddingAndBorderAxis(child, crossAxis)
|
node.layout[dim[crossAxis]] -
|
||||||
);
|
getPaddingAndBorderAxis(node, crossAxis) -
|
||||||
|
getMarginAxis(child, crossAxis),
|
||||||
|
// You never want to go smaller than padding
|
||||||
|
getPaddingAndBorderAxis(child, crossAxis)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// The remaining space between the parent dimensions+padding and child
|
||||||
|
// dimensions+margin.
|
||||||
|
var/*float*/ remainingCrossDim = node.layout[dim[crossAxis]] -
|
||||||
|
getPaddingAndBorderAxis(node, crossAxis) -
|
||||||
|
getDimWithMargin(child, crossAxis);
|
||||||
|
|
||||||
|
if (alignItem === CSS_ALIGN_CENTER) {
|
||||||
|
leadingCrossDim += remainingCrossDim / 2;
|
||||||
|
} else { // CSS_ALIGN_FLEX_END
|
||||||
|
leadingCrossDim += remainingCrossDim;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// And we apply the position
|
||||||
child.layout[pos[crossAxis]] += leadingCrossDim;
|
child.layout[pos[crossAxis]] += leadingCrossDim;
|
||||||
} else {
|
|
||||||
if (isPosDefined(child, leading[crossAxis])) {
|
|
||||||
child.layout[pos[crossAxis]] = getPosition(child, leading[crossAxis]) +
|
|
||||||
getBorder(node, leading[crossAxis]) +
|
|
||||||
getMargin(child, leading[crossAxis]);
|
|
||||||
} else {
|
|
||||||
child.layout[pos[crossAxis]] += getPaddingAndBorder(node, leading[crossAxis]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user