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 }; }