mirror of
https://github.com/storytold/gridcraft.git
synced 2026-10-28 04:36:51 -06:00
29 lines
1.8 KiB
Markdown
29 lines
1.8 KiB
Markdown
# Implementation decisions
|
|
|
|
## Static cell pictures
|
|
|
|
Store immutable picture payloads in `Sheet::cell_pictures`, a sparse map keyed by `CellRef`,
|
|
shared through `Arc`. Ordinary cells keep their original size. Content replacement removes the
|
|
map entry; copy, fill, sort and structural edits explicitly transport it, and undo shares bytes.
|
|
Serialize the map as address/payload pairs so JSON does not require struct-valued object keys.
|
|
Keep the scalar `#VALUE!` fallback used by XLSX consumers that cannot interpret rich images.
|
|
This first implementation does not extend formula evaluation to rich values or implement
|
|
`IMAGE()`; references and text-only exports use the fallback.
|
|
|
|
Write picture value metadata and existing dynamic-array cell metadata into the same workbook
|
|
metadata part, with independent index tables. Resolve input parts through their relationships.
|
|
Support embedded PNG/JPEG files without fetching external resources. See
|
|
[cell pictures](cell-pictures.md) for the supported user workflow and current limits.
|
|
|
|
Picture metadata is optional during XLSX import: part-size limits, record limits and relationship
|
|
read errors produce warnings and retain scalar cell fallbacks. The generic package size limits
|
|
remain unchanged. Rebased on main before revision; ODS/XLSB import PRs are still unmerged, and
|
|
`Package::read_limited` uses the same implementation as the incoming XLSB PR #101 to avoid
|
|
duplicate helpers when that work lands.
|
|
|
|
The UI cache uses a 64 MiB texture budget with at most 4,096 sparse entries. Images used in the
|
|
current or preceding frame are protected from eviction. If the visible set exceeds the budget,
|
|
new images show the existing placeholder until capacity is available; header-based admission
|
|
avoids repeatedly decoding overflow images. More than 128 small visible pictures now keep stable
|
|
texture handles instead of cycling through the cache every frame.
|