summaryrefslogtreecommitdiff
path: root/web/src/renderGrid.ts
diff options
context:
space:
mode:
Diffstat (limited to 'web/src/renderGrid.ts')
-rw-r--r--web/src/renderGrid.ts64
1 files changed, 64 insertions, 0 deletions
diff --git a/web/src/renderGrid.ts b/web/src/renderGrid.ts
new file mode 100644
index 0000000..476876b
--- /dev/null
+++ b/web/src/renderGrid.ts
@@ -0,0 +1,64 @@
+import Rect from "./math/Rect";
+import { Cell, CellRef, Grid, Row, RowRef } from "./types";
+
+export interface RenderedCell extends Cell {
+ cellRef: CellRef;
+ rect: Rect;
+}
+
+export interface RenderedRow {
+ rowRef: RowRef;
+ rect: Rect;
+ renderedCells: RenderedCell[];
+}
+
+export interface RenderedGrid extends Grid {
+ rect: Rect;
+ renderedRows: RenderedRow[];
+}
+
+function renderCell(grid: Grid, row: Row, cell: Cell): RenderedCell {}
+
+function renderRow(grid: Grid, row: Row): RenderedRow {
+ let topLeftX = 0;
+
+ const renderedCells = row.cells.map((cell, cellIndex) => {
+ const renderedCell = renderCell(grid, row, cell);
+ topLeftX = renderedCell.rect.bottomRight.y;
+ return renderedCell;
+ });
+}
+
+function renderRows(grid: Grid): RenderedRow[] {
+ const renderedRows: RenderedRow[] = [];
+
+ let partIndex = 0;
+ let rowIndex = 0;
+ let topLeftY = 0;
+ let renderedRowIndex = 0;
+
+ while (true) {
+ if (!grid.parts[partIndex]?.rows[rowIndex]) break;
+
+ const row = grid.parts[partIndex].rows[rowIndex];
+ const renderedRow = renderRow(grid, row);
+
+ topLeftY = renderedRow.rect.bottomRight.y;
+ renderedRows.push(renderedRow);
+
+ if (!grid.parts[++partIndex]) {
+ partIndex = 0;
+ rowIndex++;
+ }
+
+ renderedRowIndex++;
+ }
+
+ return renderedRows;
+}
+
+export default function renderGrid(grid: Grid) {
+ const renderedRows = renderRows(grid);
+ const rect = renderedRows[0].rect.extend(renderedRows.at(-1)!.rect);
+ return { ...grid, rect, renderedRows };
+}