document loop D

This commit is contained in:
Christopher Chedeau
2014-04-25 15:13:18 -07:00
parent b3a0be5837
commit f97230d418

View File

@@ -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]);
}
} }
} }
} }