Commit Graph
164 Commits
Author SHA1 Message Date
Nikita RakitinandCursor beb883d036 Files: save and open outlines as RTF
Adds PowerPoint's Outline/RTF save type: slide titles at outline level 0
(bold, larger), body paragraphs indented at their outline level, bold,
italic and underline kept, non-ASCII as \u escapes. RTF outlines (ours,
PowerPoint's or a word processor's, by outline level or indent) open as
a presentation or drop in as slides.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-16 20:34:44 +03:00
NetterSilverandClaude Haiku 5.5 1bb408462c Clamp huge index in table.insertRowBelow/insertColumnRight
Found while testing crates/engine/src/cmd/table.rs:291

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 04:09:45 +00:00
NetterSilverandClaude Haiku 5.5 d7509e7ad6 Reject shape ids beyond u32 in shape.connect, sites and points
Found while testing crates/engine/src/cmd/shape.rs:1154 (shape_id, used by connect/sites); same pattern at crates/engine/src/cmd/points.rs:358-359 and :432-433

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 22:09:59 +02:00
Brandon Thomas 0b870df463 Merge PR #759 from midasmatterhorn: text: a bare normAutofit draws at 100% and an edit stores the fitted scale (#724) 2026-10-14 21:59:39 -04:00
Gert Pellin 7cda7eda1d Merge origin/main into fix/725-body-placeholder
Both sides added tests at the same place in engine tests.rs; keep both.
Document::alloc_id now returns an Option, so the #725 test unwraps it.
2026-10-15 01:39:24 +02:00
midasmatterhorn a82f691993 text: a bare normAutofit draws at 100% and an edit stores the fitted scale (#724) 2026-10-15 00:56:41 +03:00
Brandon Thomas afe4a408b9 Merge PR #438 integrated on land-r9: an exhausted id space refuses growth instead of duplicating ids (#407)
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-14 16:25:59 -04:00
Brandon ThomasandClaude Opus 5.5 c79416be4c Fix up merged PRs: no debug_assert in blank_presentation; more exhaustion coverage
blank_presentation's debug_assert would panic in debug builds (never-crash
rule): a fresh deck that cannot fit its title slide now simply arrives
without it. The exhaustion test also covers insert.smartArt and
insert.textBox.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 16:24:26 -04:00
Brandon ThomasandClaude Opus 5.5 67e1ab6373 Merge PR #438 from albayazid: Model: an exhausted id space refuses growth instead of duplicating ids (#407)
Conflicts resolved onto main's newer shape, and the PR's policy applied to
every alloc_id/add_media/new_slide call site main has grown since: commands
answer bad(cmd, NO_ID_SPACE) (slide.reuse, insert.zoom, SmartArt, photo
album, review.accept, handout/notes masters, master placeholders,
background/artistic/compress pictures, transition sound, ink to shape,
paste special, file.new templates); reid/bring_media/renumber/regenerate
and compare::adopt/accept are fallible; outline import keeps what fit.
Tests use expect() on the now-Option results.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 16:24:26 -04:00
Brandon ThomasandClaude Opus 5.5 b1ca1230e6 Engine: text.delete and text.move are registered once (the newer docs win); a test keeps command ids unique
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 16:15:17 -04:00
Brandon Thomas bb15c0a033 Merge the landing branch into land-r8
# Conflicts:
#	contributors/people.toml
#	crates/engine/src/cmd/file.rs
#	crates/pptx/src/opc.rs
#	crates/pptx/tests/roundtrip.rs
#	crates/ui-egui/src/backstage.rs
#	crates/ui-egui/src/lib.rs
2026-10-14 15:53:57 -04:00
Brandon ThomasandClaude Opus 5.5 a7d47dbc1b Fix up #488: background opens enter the session through file.adopt
The progress window's result was added with add_presentation_file, straight
into the session: not journaled and outside the command panic guard that
file.open runs under. The host now hands the loaded file to
Session::stage_loaded and runs the new internal command file.adopt {path,
token}, which shares file.open's tail (repaired-copy handling, damaged-media
report) and so is journaled and guarded. Without the staged copy (a replayed
journal, a stale token) file.adopt reads path like file.open. Reading still
happens on the background thread.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 15:47:24 -04:00
Brandon Thomas b4be808ba3 Merge PR #508 from NikitkaRa: Format Shape: 3-D Format and 3-D Rotation controls
# Conflicts:
#	crates/engine/src/cmd/shape.rs
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/panes.rs
2026-10-14 15:40:11 -04:00
Brandon Thomas 081c9fdc5e Merge the landing branch into land-r7
# Conflicts:
#	apps/deckcraft-cli/src/main.rs
#	apps/deckcraft-cli/tests/cli.rs
#	crates/engine/src/cmd/file.rs
#	crates/engine/src/cmd/text.rs
#	crates/engine/src/lib.rs
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/textures.rs
2026-10-14 15:34:15 -04:00
Brandon ThomasandClaude Opus 5.5 30107bdb31 Fix up #321: drop the empty-body layout_for change main's caret_line already covers
The caret's colour (caret_color) is kept and used at main's caret draw site; the
placeholder-prompt hiding is kept too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 15:29:48 -04:00
Brandon Thomas bdd9898d6f Merge PR #321 from xc4pr: Text: the caret shows on dark slides and in empty placeholders
# Conflicts:
#	crates/engine/src/cmd/text.rs
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/textures.rs
2026-10-14 15:29:17 -04:00
Brandon Thomas 34f4c1b1df Merge the older community PRs integrated on land-r6 (#204 #243 #291 #345 #258 #303 #230 #168 #177 #692 #522 #466)
# Conflicts:
#	crates/ui-egui/src/canvas.rs
2026-10-14 15:24:58 -04:00
Brandon ThomasandClaude Opus 5.5 4b6f307ebb Fix up #169: auto RTL lives only in the engine and right-aligns only unaligned text
Drop the layout-time direction detection in crates/text (and its test); the engine's
promote_rtl_if_needed sets align Right only when neither the paragraph nor what it
inherits (list styles, layout, master) resolves an alignment. right_to_left_paragraphs
types its original Arabic text again, after an explicit LTR so the toggle it tests
starts from left-to-right.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 15:19:02 -04:00
Brandon ThomasandClaude Opus 5.5 b9851d9329 Merge PR #611 from NikitkaRa: Draw: pen pressure scales ink width
Fix-ups in the merge (review): uniform-width and highlighter strokes are drawn as one path (on
the slide and in the live preview) so see-through ink doesn't darken where segments overlap;
segment pairs are destructured instead of indexed; tests that build pointer events set the new
pressure field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 15:18:04 -04:00
Brandon Thomas 91eb9d8884 Merge the landing branch into land-r6
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/engine/src/tools.rs
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/dialogs.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/panes.rs
#	crates/ui-egui/src/ribbon.rs
#	crates/ui-egui/src/status.rs
#	crates/ui-egui/src/textures.rs
#	crates/ui-egui/src/thumbs.rs
2026-10-14 15:14:21 -04:00
Brandon Thomas bd005c4626 Merge PR #169 from Hevarh1: Bidi: auto-detect RTL paragraph direction when typing Kurdish, Arabic and Hebrew 2026-10-14 15:14:09 -04:00
Brandon Thomas b56d5792b0 Merge the format, canvas and dialog PRs integrated on land-r4 (#567 #569 #630 #637 #536 #559 #519 #506 #549 #556 #525)
# Conflicts:
#	crates/engine/src/cmd/review.rs
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/dialogs.rs
#	crates/ui-egui/src/panes.rs
2026-10-14 15:06:35 -04:00
Brandon ThomasandClaude Opus 5.5 2e727a3ccf Merge PR #492 from NikitkaRa: Shapes: smooth a rectangle's corners into a squircle (#286)
Fix-up in the merge (review): shape.smoothCorners re-smooths a custom outline only when it is a
squircle it drew with the given radius, so a freeform is never replaced by a rectangle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 15:05:10 -04:00
Brandon Thomas f800acee47 Merge the startup, clipboard, animation-preview and UI PRs integrated on land-r5 (#644 #652 #655 #702 #571 #539 #674 #648 #697 #479 #369 #368)
# Conflicts:
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/ribbon.rs
2026-10-14 14:58:48 -04:00
Brandon ThomasandClaude Opus 5.5 ed13dd6158 Fix up merged PRs: GIF export goes through main's export path
The Export dialog's GIF choice runs through SlideApp::export_as (desktop and web download),
.gif is a writable output extension for convert/run, and the CLI help pages describe GIF output
and --export-params. A file.export `slides` range string ("1-3,5") works for GIF as for PDF.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:54:35 -04:00
Brandon Thomas b2b0e82359 Merge PR #556 from NikitkaRa: Text: Find and Replace across slides, tables and notes
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/dialogs.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/ribbon.rs
2026-10-14 14:53:21 -04:00
Brandon Thomas 143a842d1c Merge PR #506 from NikitkaRa: Format Shape: picture or texture fill options
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/panes.rs
2026-10-14 14:51:02 -04:00
Brandon Thomas 86c5559f24 Merge PR #632 from NikitkaRa: Spelling: notes right-click menu, Review > Language (Do Not Check Spelling), repeated words
# Conflicts:
#	crates/engine/src/cmd/format.rs
2026-10-14 14:48:54 -04:00
Brandon Thomas b267a921cd Merge PR #519 from NikitkaRa: UI: WordArt adjust handles drag a text warp
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/engine/src/tools.rs
#	crates/geom/src/warp.rs
2026-10-14 14:46:54 -04:00
Brandon Thomas e9923c6c42 Merge PR #368 from NikitkaRa: A tabbed slide body is an outline, and --help exits (#360)
# Conflicts:
#	apps/deckcraft/src/main.rs
#	crates/engine/src/cmd/slide.rs
#	crates/engine/src/cmd/text.rs
2026-10-14 14:45:23 -04:00
Brandon Thomas 3723b36ff2 Merge PR #168 from Mathiasko: Notes: speaker notes show their formatting and keep it when edited
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/model/src/edit.rs
#	crates/text/src/lib.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/sorter.rs
#	crates/ui-egui/src/status.rs
2026-10-14 14:45:13 -04:00
Brandon Thomas eff4c02efa Merge PR #615 from NikitkaRa: Spelling: squiggles while typing, Add to Dictionary, per-run languages, compounds
# Conflicts:
#	crates/engine/src/cmd/text.rs
#	crates/ui-egui/src/canvas.rs
2026-10-14 14:44:12 -04:00
Brandon Thomas b3ec4013e6 Merge PR #230 from pierrevbc: Tables: caret in the edited cell, click-to-place, drag borders to resize
# Conflicts:
#	crates/engine/src/cmd/text.rs
#	crates/engine/src/tests.rs
#	crates/engine/src/tools.rs
#	crates/render/src/lib.rs
#	crates/ui-egui/src/canvas.rs
2026-10-14 14:41:34 -04:00
Brandon Thomas e1a92e37c6 Merge PR #609 from NikitkaRa: Review: spelling with Hunspell dictionaries, suggestions, Change and Ignore All
# Conflicts:
#	crates/engine/src/lib.rs
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/dialogs.rs
2026-10-14 14:40:49 -04:00
Brandon Thomas 38e95d8c15 Merge PR #702 from NikitkaRa: Clipboard: rich text and pictures for Pages and Keynote
# Conflicts:
#	crates/engine/src/cmd/edit.rs
#	crates/ui-egui/src/lib.rs
2026-10-14 14:39:36 -04:00
Brandon Thomas 8587be6af9 Merge PR #542 from NikitkaRa: Design: Variants gallery with four colour variations of the theme
# Conflicts:
#	crates/engine/src/cmd/design.rs
#	crates/engine/src/tests.rs
2026-10-14 14:37:07 -04:00
Brandon Thomas b590cb0b0b Merge PR #303 from hoblin: deckcraft-cli help explains the CLI to an agent
# Conflicts:
#	apps/deckcraft-cli/src/main.rs
#	crates/engine/src/cmd/design.rs
#	crates/engine/src/cmd/file.rs
#	crates/engine/src/cmd/format.rs
#	crates/engine/src/tests.rs
2026-10-14 14:36:13 -04:00
Brandon Thomas 1c150c3c31 Merge PR #345 from marcoarnulfo: Review: the Language dialog marks the selected text with the language you pick
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/lib.rs
2026-10-14 14:31:22 -04:00
Brandon Thomas 80d3ad5f24 Merge PR #243 from pierrevbc: Canvas: drag the frame of a text box being edited to move it
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/engine/src/tools.rs
2026-10-14 14:26:59 -04:00
Brandon Thomas 71c3848eff Merge PR #521 from NikitkaRa: Text: AutoCorrect options, case rules and your own entries
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-14 14:24:16 -04:00
Brandon Thomas 2009242055 Merge PR #684 from NikitkaRa: Export: a PNG or JPEG slide records 144 dpi at the default 2× size
# Conflicts:
#	crates/engine/src/cmd/file.rs
#	crates/engine/src/tests.rs
2026-10-14 14:02:59 -04:00
Brandon Thomas b3c9cc099c Merge the PPTX writer, notes/handout master, PDF and slide-show PRs integrated on land-r3 (#518 #531 #535 #533 #572 #573 #577 #580 #583 #592 #685 #528 #483 #490 #441 #671 #679 #649 #656 #660 #664 #224)
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/model/src/lib.rs
#	crates/pptx/src/write/mod.rs
#	crates/render/src/lib.rs
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/thumbs.rs
2026-10-14 13:56:41 -04:00
Brandon Thomas 0ed74b684a Merge the SmartArt and dialog PRs integrated on land-r1 (#596 #601 #606 #610 #613 #617 #621 #623 #627 #634 #557 #689 #668)
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/dialogs.rs
2026-10-14 13:44:43 -04:00
Brandon Thomas d00b01b5a1 Merge PR #540 from NikitkaRa: Table: borders, cell margins and cell text alignment
# Conflicts:
#	crates/engine/src/cmd/table.rs
#	crates/engine/src/tests.rs
2026-10-14 13:36:34 -04:00
Brandon Thomas e0ec02d62c Merge PR #689 from NikitkaRa: UI: Hyperlink dialog follows the selection
# Conflicts:
#	crates/engine/src/cmd/insert.rs
#	crates/ui-egui/src/dialogs.rs
2026-10-14 13:30:10 -04:00
Brandon Thomas 63c32b89b8 Merge PR #573 from NikitkaRa: Add the Notes Master view (stacked on #572 / #533)
# Conflicts:
#	crates/pptx/src/write/mod.rs
2026-10-14 13:29:52 -04:00
Brandon Thomas f685deef57 Merge PR #557 from NikitkaRa: Insert: Action Settings dialog and shape.action
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/dialogs.rs
2026-10-14 13:29:43 -04:00
Brandon Thomas 875df7674c Merge PR #572 from NikitkaRa: Add the Handout Master view (stacked on #533)
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-14 13:29:33 -04:00
Brandon Thomas fd1b62bded Merge PR #627 from NikitkaRa: SmartArt: Convert to SmartArt gallery on Home; Convert to Text keeps the text size 2026-10-14 13:29:01 -04:00
Brandon Thomas 510fb4b0b7 Merge PR #623 from NikitkaRa: SmartArt: Name and Title org chart, closer Half Circle, ten more layouts, convert to/from text and shapes 2026-10-14 13:29:01 -04:00