From 74dd184f76c02f3bf2cbfdd629daf68c71a8b454 Mon Sep 17 00:00:00 2001 From: Sven Slootweg Date: Sat, 11 Mar 2017 23:29:31 +0100 Subject: [PATCH] Move some layout logic into separate modules --- src/layout/draw-debug-line.js | 26 ++++++++++++++ src/layout/index.js | 66 ++--------------------------------- src/layout/layout-items.js | 39 +++++++++++++++++++++ 3 files changed, 67 insertions(+), 64 deletions(-) create mode 100644 src/layout/draw-debug-line.js create mode 100644 src/layout/layout-items.js diff --git a/src/layout/draw-debug-line.js b/src/layout/draw-debug-line.js new file mode 100644 index 0000000..688283f --- /dev/null +++ b/src/layout/draw-debug-line.js @@ -0,0 +1,26 @@ +'use strict'; + +module.exports = function drawDebugLine(context, lineNumber, y, width, color = "red") { + context.strokeStyle = color; + context.beginPath(); + + if (typeof width === "number") { + context.moveTo(0, y); + context.lineTo(width, y); + } else { + context.moveTo(width[0], y); + context.lineTo(width[1], y); + } + + context.stroke(); + + let boxOffsets = ["red", "green", "blue", "orange"]; + let boxOffset = boxOffsets.indexOf(color); + + context.fillStyle = color; + context.fillRect(boxOffset * 18, y + 3, 16, 16); + + context.font = "12px sans-serif"; + context.fillStyle = "white"; + context.fillText(lineNumber, 5 + boxOffset * 18, y + 15); +}; diff --git a/src/layout/index.js b/src/layout/index.js index d0ca375..e497fa4 100644 --- a/src/layout/index.js +++ b/src/layout/index.js @@ -4,76 +4,14 @@ const parser = require("../parser"); const findAlignment = require("../parser/find-alignment"); const generateStyle = require("../parser/generate-style"); const measureText = require("../render/measure-text"); -const adjustLineHeights = require("./adjust-line-heights"); +const layoutItems = require("./layout-items"); +const drawDebugLine = require("./draw-debug-line"); const sum = require("../util/sum"); const min = require("../util/min"); const max = require("../util/max"); const last = require("../util/last"); -function drawDebugLine(context, lineNumber, y, width, color = "red") { - context.strokeStyle = color; - context.beginPath(); - - if (typeof width === "number") { - context.moveTo(0, y); - context.lineTo(width, y); - } else { - context.moveTo(width[0], y); - context.lineTo(width[1], y); - } - - context.stroke(); - - let boxOffsets = ["red", "green", "blue", "orange"]; - let boxOffset = boxOffsets.indexOf(color); - - context.fillStyle = color; - context.fillRect(boxOffset * 18, y + 3, 16, 16); - - context.font = "12px sans-serif"; - context.fillStyle = "white"; - context.fillText(lineNumber, 5 + boxOffset * 18, y + 15); -} - -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 - } -} - module.exports = function layoutFormattedText(text, options) { let lines; diff --git a/src/layout/layout-items.js b/src/layout/layout-items.js new file mode 100644 index 0000000..20c8f85 --- /dev/null +++ b/src/layout/layout-items.js @@ -0,0 +1,39 @@ +'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 + } +};