diff options
| author | Josh Kingsley <josh@joshkingsley.me> | 2025-10-26 19:41:01 +0200 |
|---|---|---|
| committer | Josh Kingsley <josh@joshkingsley.me> | 2025-10-26 19:41:01 +0200 |
| commit | af8cf348feb8e6bb4bda4a277b06a0f41ff890d9 (patch) | |
| tree | ce7df39a6edb7e6df3d3fb0d903972391333a272 /web/src/components/grid | |
| parent | 43ba019bc0d3af502b806169dad5fcbbfc87d2b7 (diff) | |
feat(web): show selected subdivisions
Diffstat (limited to 'web/src/components/grid')
| -rw-r--r-- | web/src/components/grid/drawGrid.ts | 11 | ||||
| -rw-r--r-- | web/src/components/grid/renderGrid.ts | 19 |
2 files changed, 19 insertions, 11 deletions
diff --git a/web/src/components/grid/drawGrid.ts b/web/src/components/grid/drawGrid.ts index 5ea17b6..1b94254 100644 --- a/web/src/components/grid/drawGrid.ts +++ b/web/src/components/grid/drawGrid.ts @@ -1,6 +1,6 @@ import { RangeSelection, Selection } from "../../selection"; import { CellRef } from "../../types"; -import { RenderedCell, RenderedGrid } from "./renderGrid"; +import { getRenderedCell, RenderedCell, RenderedGrid } from "./renderGrid"; interface GridColors { bgFill: string; @@ -74,15 +74,6 @@ function strokeGridLines( }); } -function getRenderedCell( - grid: RenderedGrid, - cellRef: CellRef, -): RenderedCell | undefined { - const rowsPerPart = grid.renderedRows.length / grid.parts.length; - const renderedRowIndex = cellRef.partIndex * rowsPerPart + cellRef.rowIndex; - return grid.renderedRows[renderedRowIndex]?.renderedCells[cellRef.cellIndex]; -} - function strokeActiveCell( ctx: CanvasRenderingContext2D, colors: GridColors, diff --git a/web/src/components/grid/renderGrid.ts b/web/src/components/grid/renderGrid.ts index 7ef8813..e6a2c54 100644 --- a/web/src/components/grid/renderGrid.ts +++ b/web/src/components/grid/renderGrid.ts @@ -6,6 +6,8 @@ export interface RenderedCell extends Cell { cellRef: CellRef; renderedRowIndex: number; rect: Rect; + startRatio: Ratio; + endRatio: Ratio; } export interface RenderedRow { @@ -26,6 +28,7 @@ function renderCell( renderedRowIndex: number, topLeftX: number, topLeftY: number, + startRatio: Ratio, ): RenderedCell { const width = cell.widthRatio .divideRatio(grid.baseCellWidthRatio) @@ -34,7 +37,9 @@ function renderCell( const rect = new Rect(topLeftX, topLeftY, width, grid.baseCellSize); - return { ...cell, cellRef, rect, renderedRowIndex }; + const endRatio = startRatio.add(cell.widthRatio); + + return { ...cell, cellRef, rect, renderedRowIndex, startRatio, endRatio }; } function renderRow( @@ -54,6 +59,7 @@ function renderRow( } let topLeftX = 0; + let startRatio = Ratio.fromInteger(0); const renderedCells = row.cells.map((cell, cellIndex) => { const cellRef = { ...rowRef, cellIndex }; @@ -65,9 +71,11 @@ function renderRow( renderedRowIndex, topLeftX, topLeftY, + startRatio, ); topLeftX = renderedCell.rect.bottomRight.x; + startRatio = renderedCell.endRatio; return renderedCell; }); @@ -125,3 +133,12 @@ export default function renderGrid(grid: Grid) { const rect = renderedRows[0].rect.extend(renderedRows.at(-1)!.rect); return { ...grid, rect, renderedRows }; } + +export function getRenderedCell( + grid: RenderedGrid, + cellRef: CellRef, +): RenderedCell | undefined { + const rowsPerPart = grid.renderedRows.length / grid.parts.length; + const renderedRowIndex = cellRef.partIndex * rowsPerPart + cellRef.rowIndex; + return grid.renderedRows[renderedRowIndex]?.renderedCells[cellRef.cellIndex]; +} |
