From 9760cfd323e071c4076ae95f42952ae6df1884fe Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Mon, 21 Apr 2014 14:58:44 -0700 Subject: [PATCH] position: absolute and alignSelf --- src/Layout.js | 39 +++++++++++++++++++----------------- src/__tests__/Layout-test.js | 11 ++++++++++ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/Layout.js b/src/Layout.js index 479d005f..b78667d3 100755 --- a/src/Layout.js +++ b/src/Layout.js @@ -243,27 +243,30 @@ var computeLayout = (function() { for (var/*int*/ i = 0; i < node.children.length; ++i) { var/*css_node_t**/ child = node.children[i]; - var/*css_align_t*/ alignItem = getAlignItem(node, child); - var/*float*/ remainingCrossDim = node.layout[dim[crossAxis]] - - getDimWithMargin(child, crossAxis) - - getPadding(node, leading[crossAxis]) - - getPadding(node, trailing[crossAxis]); - var/*float*/ leadingCrossDim = getPadding(node, leading[crossAxis]); - if (alignItem == CSS_ALIGN_FLEX_START) { - // Do nothing - } else if (alignItem == CSS_ALIGN_CENTER) { - leadingCrossDim += remainingCrossDim / 2; - } else if (alignItem == CSS_ALIGN_FLEX_END) { - leadingCrossDim += remainingCrossDim; - } else if (alignItem == CSS_ALIGN_STRETCH) { - child.layout[dim[crossAxis]] = node.layout[dim[crossAxis]] - + if (getPositionType(child) === 'relative') { + var/*css_align_t*/ alignItem = getAlignItem(node, child); + var/*float*/ remainingCrossDim = node.layout[dim[crossAxis]] - + getDimWithMargin(child, crossAxis) - getPadding(node, leading[crossAxis]) - - getPadding(node, trailing[crossAxis]) - - getMargin(child, leading[crossAxis]) - - getMargin(child, trailing[crossAxis]); + getPadding(node, trailing[crossAxis]); + + var/*float*/ leadingCrossDim = getPadding(node, leading[crossAxis]); + if (alignItem == CSS_ALIGN_FLEX_START) { + // Do nothing + } else if (alignItem == CSS_ALIGN_CENTER) { + leadingCrossDim += remainingCrossDim / 2; + } else if (alignItem == CSS_ALIGN_FLEX_END) { + leadingCrossDim += remainingCrossDim; + } else if (alignItem == CSS_ALIGN_STRETCH) { + child.layout[dim[crossAxis]] = node.layout[dim[crossAxis]] - + getPadding(node, leading[crossAxis]) - + getPadding(node, trailing[crossAxis]) - + getMargin(child, leading[crossAxis]) - + getMargin(child, trailing[crossAxis]); + } + child.layout[pos[crossAxis]] += leadingCrossDim; } - child.layout[pos[crossAxis]] += leadingCrossDim; } node.layout[leading[mainAxis]] += getMargin(node, leading[mainAxis]) + diff --git a/src/__tests__/Layout-test.js b/src/__tests__/Layout-test.js index c4661524..1e4d88da 100755 --- a/src/__tests__/Layout-test.js +++ b/src/__tests__/Layout-test.js @@ -493,6 +493,17 @@ describe('Layout', function() { ); }); + it('should layout node with position: absolute, padding and alignSelf: center', function() { + testLayout( + {style : {}, children : [ + {style: {paddingRight: 12, alignSelf: 'center', position: 'absolute'}} + ]}, + {width: 0, height: 0, top: 0, left: 0, children: [ + {width: 12, height: 0, top: 0, left: 0} + ]} + ); + }) + it('should layout randomly', function() { function RNG(seed) { this.state = seed;