1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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 };
}
|