remove allocations
This commit is contained in:
@@ -36,39 +36,40 @@ function computeLayout(node) {
|
|||||||
column: 'height'
|
column: 'height'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var emptyArray = [];
|
||||||
|
|
||||||
function layoutNode(node) {
|
function layoutNode(node) {
|
||||||
var mainAxis = node.style.flexDirection === 'row' ? 'row' : 'column';
|
var mainAxis = node.style.flexDirection === 'row' ? 'row' : 'column';
|
||||||
var crossAxis = mainAxis === 'row' ? 'column' : 'row';
|
var crossAxis = mainAxis === 'row' ? 'column' : 'row';
|
||||||
|
var children = node.children || emptyArray;
|
||||||
|
|
||||||
var mainDimInStyle = dim[mainAxis] in node.style;
|
var mainDimInStyle = dim[mainAxis] in node.style;
|
||||||
if (mainDimInStyle) {
|
if (mainDimInStyle) {
|
||||||
node.layout[dim[mainAxis]] = node.style[dim[mainAxis]];
|
node.layout[dim[mainAxis]] = node.style[dim[mainAxis]];
|
||||||
}
|
}
|
||||||
|
|
||||||
var fixedChildren = [];
|
|
||||||
var flexibleChildren = [];
|
|
||||||
var mainContentDim = 0;
|
var mainContentDim = 0;
|
||||||
(node.children || []).forEach(function(child) {
|
var flexibleChildrenCount = 0;
|
||||||
if (child.style.flex) {
|
children.forEach(function(child) {
|
||||||
flexibleChildren.push(child);
|
if (!child.style.flex) {
|
||||||
} else {
|
|
||||||
fixedChildren.push(child);
|
|
||||||
layoutNode(child);
|
layoutNode(child);
|
||||||
mainContentDim += child.layout[dim[mainAxis]];
|
mainContentDim += child.layout[dim[mainAxis]];
|
||||||
|
} else {
|
||||||
|
flexibleChildrenCount++;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var flexibleMainDim =
|
var flexibleMainDim =
|
||||||
(node.layout[dim[mainAxis]] - mainContentDim) / flexibleChildren.length;
|
(node.layout[dim[mainAxis]] - mainContentDim) / flexibleChildrenCount;
|
||||||
// optim: don't allocate a new array, re-traverse + filter the initial one
|
children.forEach(function(child) {
|
||||||
flexibleChildren.forEach(function(child) {
|
if (child.style.flex) {
|
||||||
child.layout[dim[mainAxis]] = flexibleMainDim;
|
child.layout[dim[mainAxis]] = flexibleMainDim;
|
||||||
layoutNode(child);
|
layoutNode(child);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var mainPos = 0;
|
var mainPos = 0;
|
||||||
var children = [];
|
children.forEach(function(child) {
|
||||||
(node.children || []).forEach(function(child) {
|
|
||||||
child.layout[pos[mainAxis]] += mainPos;
|
child.layout[pos[mainAxis]] += mainPos;
|
||||||
mainPos += child.layout[dim[mainAxis]] + 2 * getMargin(child);
|
mainPos += child.layout[dim[mainAxis]] + 2 * getMargin(child);
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user