From 0dcb7080ff27dfb9007026b1050667ae0c7dac5b Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Wed, 9 Apr 2014 19:15:46 -0700 Subject: [PATCH] alignItem: stretch --- spec/LayoutSpec.js | 14 ++++++++++++++ src/Layout.js | 23 +++++++++++++++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/spec/LayoutSpec.js b/spec/LayoutSpec.js index 4b01b5bf..b41dedb0 100755 --- a/spec/LayoutSpec.js +++ b/spec/LayoutSpec.js @@ -432,5 +432,19 @@ describe('Layout', function() { }); }); + it('should layout node with alignItem: stretch', function() { + testLayout({ + style: {width: 1000, height: 1000, alignItems: 'stretch'}, + children: [ + {style: {height: 100}} + ] + }, { + width: 1000, height: 1000, top: 0, left: 0, + children: [ + {width: 1000, height: 100, top: 0, left: 0} + ] + }); + }); + }); diff --git a/src/Layout.js b/src/Layout.js index 7836757a..e8d1c6b3 100755 --- a/src/Layout.js +++ b/src/Layout.js @@ -144,6 +144,7 @@ function computeLayout(node) { } } + var crossDim = 0; var mainPos = leadingMainDim; children.forEach(function(child) { child.layout[pos[mainAxis]] += mainPos; @@ -152,8 +153,23 @@ function computeLayout(node) { getMargin(trailing[mainAxis], child) + betweenMainDim; - var remainingCrossDim = node.layout[dim[crossAxis]] - child.layout[dim[crossAxis]]; + if (child.layout[dim[crossAxis]] !== undefined) { + if (child.layout[dim[crossAxis]] > crossDim) { + crossDim = child.layout[dim[crossAxis]]; + } + } + }); + + if (node.layout[dim[mainAxis]] === undefined && !mainDimInStyle) { + node.layout[dim[mainAxis]] = mainPos; + } + if (node.layout[dim[crossAxis]] === undefined) { + node.layout[dim[crossAxis]] = crossDim; + } + + children.forEach(function(child) { var alignItem = getAlignItem(node, child); + var remainingCrossDim = node.layout[dim[crossAxis]] - child.layout[dim[crossAxis]]; var leadingCrossDim = 0; if (alignItem === 'flex-start') { // Do nothing @@ -161,13 +177,12 @@ function computeLayout(node) { leadingCrossDim = remainingCrossDim / 2; } else if (alignItem === 'flex-end') { leadingCrossDim = remainingCrossDim; + } else if (alignItem === 'stretch') { + child.layout[dim[crossAxis]] = node.layout[dim[crossAxis]]; } child.layout[pos[crossAxis]] += leadingCrossDim; }); - if (node.layout[dim[mainAxis]] === undefined && !mainDimInStyle) { - node.layout[dim[mainAxis]] = mainPos; - } node.layout[leading[mainAxis]] += getMargin(leading[mainAxis], node); node.layout[leading[crossAxis]] += getMargin(leading[crossAxis], node); }