1.8 KiB
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 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.