Export an editable deck: images and text as objects, ink as an overlay - #94
Merged
Conversation
marcosqlbi
force-pushed
the
feature/export-e2-pdf
branch
from
September 3, 2026 18:27
d107052 to
27a2353
Compare
marcosqlbi
force-pushed
the
feature/export-e3-editable-deck
branch
from
September 3, 2026 18:27
c20fe20 to
94a3ad7
Compare
Phase of docs/export.md squashed onto its base after the previous phase merged; the tree is unchanged. Co-Authored-By: Claude Fable 5.1 <[email protected]>
marcosqlbi
force-pushed
the
feature/export-e3-editable-deck
branch
from
September 3, 2026 21:54
94a3ad7 to
6b416d9
Compare
marcosqlbi
added a commit
that referenced
this pull request
Sep 3, 2026
…#95) ## Why Phase E4 of [docs/export.md](docs/export.md), on top of #94 (base is the E3 branch; retarget to `main` once it merges). A picture page is exact but soft under zoom and dead to selection. A reader who wants to copy the DAX off a page, or print at any size, needs the text to be text and the ink to be paths. ## What it does - **Page content: Picture or Vector**, a choice on the Export dialog for PDF, with Picture the default because it is exact. - **Vector** reuses the editable slide's element list, with one difference: the ink goes out as strokes in their own z-order between the containers rather than as one overlay, because a path costs nothing to layer correctly. - **A stroke is the sweep of its nib.** For each pair of points the writer fills the convex hull of the two nib polygons, which is exactly the area a convex nib sweeps along a segment, and joins every hull into one path filled once with the non-zero rule, so a translucent stroke does not darken where it overlaps itself. The nibs follow WPF: a pen is an ellipse whose diameter is thickness × 2 × pressure, a highlighter a flat rectangle with no pressure drawn at half opacity when its color is opaque, calligraphy a tall bar following pressure. - **Text is laid out in the writer**: paragraphs on line breaks, runs measured left to right, wrapped at the last space that fits, in the language's font at the board's size, clipped to the container as the board clips it. Fonts are embedded as subsets of Segoe UI and Consolas from the Windows fonts folder, with Arial and Courier New standing in. ## Where the code is - `SQLBI.Whiteboard.Export/ExportPage.cs`: `SlideInkElement`, `SlideStroke`, `SlidePoint`. - `PdfDocumentWriter`: draws elements into the rectangle the picture would have used; the font resolver serves both families in four styles. - `EditableSlide` builds strokes in z-order when asked; `ExportSettings` and the dialog gain the page content choice. - Smoke tests write a vector page with a pen, a highlighter, a calligraphy stroke, and a dot, and check that the text's font is embedded. The smaller calls are under E4 in [docs/export-decisions.md](docs/export-decisions.md); decision 26 is updated. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5.1 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Phase E3 of docs/export.md, on top of #93 (base is the E2 branch; retarget to
mainonce it merges). A picture slide is exact but dead: a person who wants to rework a deck after a session needs the DAX to be text and the pictures to be pictures.What it does
Where the code is
SQLBI.Whiteboard.Export/ExportPage.cs: the element model (SlideImageElement,SlideTextElement), in page pixel space.PptxDeckWriter: a slide with elements gets one shape per element in z-order; the single-picture path is unchanged.SQLBI.Whiteboard/Export/EditableSlide.cs: builds the elements from an area;BoardSurfacegainsDrawBackgroundandObjectFilterfor the ink overlay.The smaller calls are under E3 in docs/export-decisions.md; decision 26 is updated.
🤖 Generated with Claude Code