diff options
| author | Josh Kingsley <josh@joshkingsley.me> | 2025-10-25 20:46:35 +0300 |
|---|---|---|
| committer | Josh Kingsley <josh@joshkingsley.me> | 2025-10-25 22:09:48 +0300 |
| commit | 5404a95c15e176d25728bf1a319ddb9828b23625 (patch) | |
| tree | 639d175e15170618d36c0b22b3c8ad7764925175 /web/src/renderGrid.ts | |
| parent | 2a4d7a7fc3b968ed8cdfd958a5e65fbe140042da (diff) | |
refactor(web): re-organize files
Diffstat (limited to 'web/src/renderGrid.ts')
| -rw-r--r-- | web/src/renderGrid.ts | 64 |
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 }; +} |
