From d0ae1ea690b537852e4e44784ff960ba7efe1180 Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Sat, 5 Apr 2014 11:41:21 -0700 Subject: [PATCH] Compute main dimensions from chidren when not defined --- spec/LayoutSpec.js | 19 +++++++++++++++++-- src/Layout.js | 12 +++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/spec/LayoutSpec.js b/spec/LayoutSpec.js index e96f7b15..c540a2c4 100755 --- a/spec/LayoutSpec.js +++ b/spec/LayoutSpec.js @@ -71,9 +71,8 @@ function computeDOMLayout(node) { function testLayout(node, expectedLayout) { var layout = computeLayout(node); var domLayout = computeDOMLayout(node); - expect(layout).toEqual(expectedLayout) - expect(layout).toEqual(domLayout); expect(expectedLayout).toEqual(domLayout); + expect(layout).toEqual(domLayout); } describe('Layout', function() { @@ -178,5 +177,21 @@ describe('Layout', function() { ] }); }); + + it('should layout node based on children main dimensions', function() { + testLayout({ + style: {width: 300}, + children: [ + {style: {width: 100, height: 200}}, + {style: {width: 300, height: 150}} + ] + }, { + width: 300, height: 350, top: 0, left: 0, + children: [ + {width: 100, height: 200, top: 0, left: 0}, + {width: 300, height: 150, top: 200, left: 0} + ] + }); + }); }); diff --git a/src/Layout.js b/src/Layout.js index 20ff165b..478ecb4b 100755 --- a/src/Layout.js +++ b/src/Layout.js @@ -40,8 +40,12 @@ function computeLayout(node) { var mainAxis = node.style.flexDirection === 'row' ? 'row' : 'column'; var crossAxis = mainAxis === 'row' ? 'column' : 'row'; - var mainPos = 0; + var mainDimInStyle = dim[mainAxis] in node.style; + if (mainDimInStyle) { + node.layout[dim[mainAxis]] = node.style[dim[mainAxis]]; + } + var mainPos = 0; var children = []; (node.children || []).forEach(function(child) { var offset = {}; @@ -52,8 +56,10 @@ function computeLayout(node) { mainPos += child.layout[dim[mainAxis]] + 2 * getMargin(child); }); - node.layout.width = node.style.width; - node.layout.height = node.style.height; + if (!mainDimInStyle) { + node.layout[dim[mainAxis]] = mainPos; + } + node.layout[dim[crossAxis]] = node.style[dim[crossAxis]]; node.layout.top = getMargin(node) + parent.top; node.layout.left = getMargin(node) + parent.left; }