You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.0 KiB
JavaScript
40 lines
1.0 KiB
JavaScript
7 years ago
|
'use strict';
|
||
|
|
||
|
module.exports = function layoutItems(lines, options = {}) {
|
||
|
let currentYOffset = options.initialY;
|
||
|
let currentXOffset = 0;
|
||
|
let debugYOffset = 0;
|
||
|
let debugLines = [];
|
||
|
|
||
|
let positionedItems = lines.reduce((items, line, i) => {
|
||
|
debugLines.push({color: "red", y: debugYOffset, lineNumber: i});
|
||
|
debugLines.push({color: "green", y: currentYOffset, lineNumber: i});
|
||
|
debugLines.push({color: "orange", y: currentYOffset + line.adjustedHeight, lineNumber: i});
|
||
|
|
||
|
let newItems = items.concat(line.items.map((item) => {
|
||
|
let x = currentXOffset;
|
||
|
let y = currentYOffset - (line.minAscender / 2) + (line.adjustedHeight / 2)
|
||
|
|
||
|
debugLines.push({color: "blue", y: y, x1: x, x2: x + item.measurements.width, lineNumber: i});
|
||
|
|
||
|
currentXOffset += item.measurements.width;
|
||
|
|
||
|
return Object.assign({
|
||
|
x: x,
|
||
|
y: y
|
||
|
}, item);
|
||
|
}));
|
||
|
|
||
|
currentYOffset += line.adjustedHeight;
|
||
|
debugYOffset += line.adjustedHeight;
|
||
|
currentXOffset = 0;
|
||
|
|
||
|
return newItems;
|
||
|
}, []);
|
||
|
|
||
|
return {
|
||
|
positionedItems: positionedItems,
|
||
|
debugLines: debugLines
|
||
|
}
|
||
|
};
|