Rewrite raster (PNG/JPEG/WEBP), SVG and PDF export to consume the layout-resolved `LayoutScene` instead of shell-core's `Document`. The export call site builds the scene from the live `EditorState` via `op_pen_loader::editor_state_to_layout_scene`, so jian's flex pass and `$ref` fill resolution run once and the exported pixels match the on-screen canvas painter. Rotation now pivots around `aggregate_bounds` to match `canvas_viewport_paint.rs`; drop shadows render behind Frame / Rect / Ellipse fills. Drops the native host's dead `document()` / `derive_paint_doc` path now that nothing derives a paint `Document`. Splits the SVG serializer into `export/export_svg.rs` to stay under the 800-line cap. |
||
|---|---|---|
| .. | ||
| op-editor-core | ||
| op-i18n | ||
| op-pen-loader | ||
| openpencil-desktop | ||
| openpencil-shell-core | ||
| openpencil-shell-native | ||
| openpencil-shell-web | ||
| wasm-libc-shim | ||
| CLAUDE.md | ||