diff --git a/ROADMAP.md b/ROADMAP.md index dbfa8213..27b9d9f8 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -139,8 +139,6 @@ Ranked; detail and the full beta plan in [docs/roadmap.md](docs/roadmap.md). corpus, embedded fonts, #70, #74, #77, EMF/WMF and SVG. 36–64 h. 2. **PPTX on real decks:** owned corpus, round-trip checks, fixes; #70, #74, #77; EMF/WMF and SVG. `corpus_media.rs` keeps 3-D models and animation bounce end. 36–64 h. -2. **PPTX on real decks:** a larger owned corpus and the remaining round-trip losses; #70, #74, #77; - EMF/WMF and SVG. 36–64 h. 3. **Localization:** catalog, system language (#15), zh-Hans, es, fr, de, ja with IME. 27–46 h. 4. **Output:** vector PDF, printing. 10–16 h. 5. **Depth that users hit:** font weights (#69), chart data and elements, Animation Pane timeline, diff --git a/crates/engine/src/cmd/mod.rs b/crates/engine/src/cmd/mod.rs index 6f5825a9..dcfa20db 100644 --- a/crates/engine/src/cmd/mod.rs +++ b/crates/engine/src/cmd/mod.rs @@ -2,8 +2,8 @@ pub mod animation; pub mod arrange; -pub mod background; pub mod artistic; +pub mod background; pub mod design; pub mod edit; pub mod file; diff --git a/docs/control-protocol.md b/docs/control-protocol.md index abb982d7..0b7909de 100644 --- a/docs/control-protocol.md +++ b/docs/control-protocol.md @@ -18,8 +18,6 @@ Coordinates are slide points (1/72 inch; a 16:9 slide is 960 × 540) unless note | `ui.inspect` | — | UI state, active tool, window/canvas/slide rects, dialog, `home` (the File tab open over a presentation), `backstage` (its page, also the start screen), slide show state (`grid`, `zoomArm`, `zoom`, `blank`, `presenterPaused`, `presenterSecs`, `notesPx`, `custom`, `goto`; `cells` while See All Slides is open), documents, perf (fps, render ms) | | `ui.tool.select` | `{tool, preset?}` | `select`, `text`, `shape` + preset, any preset name, `curve`, `freeform`, `scribble`, `pen`, `highlighter`, `eraser` | | `ui.pointer` | `{events: [{kind: down\|drag\|up\|move\|doubleclick\|tripleclick\|contextclick, x, y, mods?}], mods?}` | Drive the active tool in slide points through the same code path as the mouse (`contextclick`: the right-button press that selects before the context menu) | -| `ui.key` / `ui.text` | `{key, shift?, alt?, cmd?}` / `{text}` | Keyboard input (also drives a running slide show) | -| `ui.pointer` | `{events: [{kind: down\|drag\|up\|move\|doubleclick\|tripleclick, x, y, mods?}], mods?}` | Drive the active tool in slide points through the same code path as the mouse | | `ui.key` / `ui.text` | `{key, shift?, alt?, cmd?}` / `{text}` | Keyboard input (also drives a running slide show: digits then Enter go to that slide, G is See All Slides, Z arms zoom, T pauses the presenter timer, R resets it, `[` and `]` change notes size, Esc clears a slide number, the grid and zoom before it leaves the show) | | `ui.ime` | `{preedit, active?: [start, end]}` / `{commit}` | An input method's composition through egui, as a real one arrives: shown in place on the slide or in a focused field; `{"preedit": ""}` cancels | | `ui.move` / `ui.click` / `ui.drag` | screen points | Real egui pointer input — reaches every widget, menu and pane | diff --git a/docs/file-format-parity.md b/docs/file-format-parity.md index f592b52f..f6df0c8d 100644 --- a/docs/file-format-parity.md +++ b/docs/file-format-parity.md @@ -76,10 +76,8 @@ the round trip even though DeckCraft doesn't model it. | Presentation, slide size, sections (p14), custom shows | yes | yes | | | Slide masters, layouts, placeholders and inheritance | yes | yes | | | Themes: colour, font (Latin/EA/CS), effect schemes, background styles | yes | yes | Unknown theme parts kept | -| Notes slides and notes master | yes | yes | Header, footer, date and slide-number text on the notes master is kept. No notes-master editing view | -| Handout master | no | no | | -| Notes slides and notes master | yes | yes | No notes-master editing view | -| Handout master | yes | yes | Header, footer, date and slide-number text is kept. No handout-master editing view | +| Notes slides and notes master | yes | yes | Header, footer, date and slide-number text on the notes master is kept. Edited in View ▸ Notes Master | +| Handout master | yes | yes | Header, footer, date and slide-number text is kept. Edited in View ▸ Handout Master | | Shapes: preset geometry (~180 presets), custom geometry, groups, connectors | yes | yes | Presets re-derived in `crates/geom/src/preset.rs` (and `preset/extra.rs`). Outlines, dashes, arrowheads and ink inside a group, and text, keep their size in points whatever the group's child-coordinate scale (#233). | | Fills: solid, gradient, picture (stretch/tile/crop), pattern, group | yes | yes | | | Lines: dash, compound, caps, joins, arrowheads | yes | yes | | @@ -116,13 +114,10 @@ the round trip even though DeckCraft doesn't model it. ### What would move the PPTX number 1. A larger owned corpus (corporate templates, SmartArt, chartex charts, EMF, embedded fonts, - every transition and animation) in a corpus repo. `crates/pptx/tests/corpus.rs` already checks - open → save → reopen (parts and text) for decks we author. Still needed: render checks and a - PowerPoint reference render for each (owner runs PowerPoint). -1. A larger owned corpus (corporate templates, SmartArt, chartex charts, EMF, embedded fonts, - every transition and animation) in a corpus repo, with a PowerPoint reference render for each. - `crates/pptx/tests/corpus_kinds.rs` already checks tables, charts, animations, media, sections - and masters/layouts (open → save → reopen). + every transition and animation) in a corpus repo. `crates/pptx/tests/corpus.rs` and + `corpus_kinds.rs` already check open → save → reopen (parts and text) for decks we author: + tables, charts, animations, media, sections and masters/layouts among them. Still needed: + render checks and a PowerPoint reference render for each (owner runs PowerPoint). 2. The round-trip losses above (#70, #74, #77). 3. SVG rendering. EMF+ records inside EMF/WMF are still not drawn. diff --git a/docs/gaps.md b/docs/gaps.md index efd21e33..5bcd70a0 100644 --- a/docs/gaps.md +++ b/docs/gaps.md @@ -123,7 +123,6 @@ Detail in [file-format-parity.md](file-format-parity.md). exist to compare against. `corpus_charts.rs` round-trips one owned slice (a combo chart with data labels and trendlines, a merged table with diagonal borders, text columns, autofit, vertical text and a WordArt warp). That is still a generated deck, not a corpus of real ones. -### PPTX corpus is only decks we author - **Evidence:** `crates/pptx/tests/corpus_kinds.rs` builds decks in this repo and checks open → save → reopen (package parts and text): tables, charts, animations, media, sections, and several masters and layouts. A handout master with a header, footer, date and slide number used to disappear on @@ -133,10 +132,6 @@ Detail in [file-format-parity.md](file-format-parity.md). - **Estimate:** 20–35 h: grow the owned corpus in `storytold/photocraft-corpus` style (craftrules `standards/test-corpora.md`), add render checks, have the owner open outputs in PowerPoint, fix what breaks. **Beta blocker.** - (corporate templates, SmartArt, `chartex` charts, embedded fonts, EMF) is still mostly unknown. -- **Estimate:** 20–35 h: build an owned corpus in `storytold/photocraft-corpus` style (craftrules - `standards/test-corpora.md`), add import → render → export → re-import checks, have the owner open - outputs in PowerPoint, fix what breaks. **Beta blocker.** ### Round trip loses media playback options and animation rewind (#74, #77) - **Evidence:** issues filed 2026-10-10 by an automated reviewer; media playback options and the diff --git a/docs/parity-checklist.md b/docs/parity-checklist.md index eae5e36a..0ce1a52e 100644 --- a/docs/parity-checklist.md +++ b/docs/parity-checklist.md @@ -12,8 +12,6 @@ The summary between ` | P2 | 54 | 13 | 15 | 26 | 38% | | P1 | 65 | 38 | 21 | 6 | 75% | | P2 | 54 | 13 | 16 | 25 | 39% | -| P1 | 65 | 38 | 21 | 6 | 75% | -| P2 | 54 | 13 | 16 | 25 | 39% | | Area | Parity | |---|---| diff --git a/docs/slideshow-parity.md b/docs/slideshow-parity.md index 5eb32d6c..129070be 100644 --- a/docs/slideshow-parity.md +++ b/docs/slideshow-parity.md @@ -35,11 +35,8 @@ ready** (estimated), **10–16 h** to parity. | Media playback with controls, play across slides, full-screen video | yes | yes | WMA/WMV not decodable | | Media playback with controls, play across slides, full-screen video | yes | yes | Seeks and loops preserve new-generation video frames and end-of-stream; queue regression and repeated seeks across H.264/HEVC/VP9/AV1 in `crates/media`. WMA/WMV not decodable | | Media playback with controls, play across slides, full-screen video, Play/Pause/Stop in the click sequence | yes | yes | WMA/WMV not decodable; click sequence since #116 | -| Animated GIFs play; pause from their corner button | yes | yes (#39) | | | Media playback with controls, play across slides, full-screen video | yes | yes | WMA/WMV not decodable. Slide Show ▸ Show Media Controls (on by default) hides the playback bar | | Animated GIFs play; pause from their corner button | yes | yes (#39) | The corner button hides with Show Media Controls | -| See All Slides grid during the show | yes | no | | -| Zoom into part of a slide during the show | yes | no | | | See All Slides grid during the show | yes | yes: G, or All on the show bar and in presenter view; click a thumbnail, Esc closes the grid | Hidden slides are labelled; the first 48 slides are shown | | Zoom into part of a slide during the show | yes | yes: Z, then click the slide (or the presenter slide); 2×, Esc or another click leaves it | The presenter keeps the whole slide and draws a frame on the zoomed part | | Pen and highlighter ink | yes | pen only (Cmd+P pen, Cmd+A arrow, E erases all ink) | No highlighter, per-stroke eraser, ink colours, or keep/discard annotations prompt | @@ -58,11 +55,8 @@ ready** (estimated), **10–16 h** to parity. | Pause / reset timer, clock | yes | yes: Pause/Resume and Reset in presenter view (T pauses, R resets); the clock is local time, `--:--` where there is no clock | Pausing the timer does not pause the show, animations or rehearsal | | Slide counter, previous/next/end buttons | yes | yes | | | Keyboard navigation while Presenter View has focus | yes | yes | Shares the audience window's key handling; handled keys are consumed before buttons, and the presenter stays available at the end screen | -| Notes font size, scrolling | yes | scrolling only | | -| Placed on the presenter's display automatically, show on the projector | yes | **no**: opens wherever the OS puts it | Beta blocker, 3–5 h | -| Swap displays | yes | no | | | Notes font size, scrolling | yes | yes: A- / A+ (and `[` / `]`), 12–48 pt in steps of 4, default 18; the notes scroll | | -| Placed on the presenter's display automatically, show on the projector | yes | **no**: opens wherever the OS puts it | Open PR #433 places the show on a second display when one is attached. This change does not | +| Placed on the presenter's display automatically, show on the projector | yes | **no**: opens wherever the OS puts it | Beta blocker, 3–5 h. Open PR #433 places the show on a second display when one is attached. This change does not | | Swap displays | yes | no | Still open on #433 | | Pen, laser, black screen, zoom from presenter view | yes | Black, White and Zoom buttons; the audience zoom is framed on the presenter slide | Pen and the laser pointer are still keys only; there is no laser yet | | See all slides from presenter view | yes | yes: All slides opens the grid on the show | |