Brandon Thomas and Claude Opus 5.5
5ef510e57b
Fix up #509 : copy media by a typed walk of every reference
...
slide.reuse indexed src.slides[i] and found media by scanning JSON keys
(media/poster/preview/sound), which missed artistic-effect originals and would
miss any reference stored under another key. New engine module media_refs: one
typed walker over the model (written once, expanded for & and &mut) that visits
every MediaId a presentation, master, layout, slide or shape can hold: pictures
and their artistic originals, picture fills in shapes, lines, runs, table cells
and styles, chart series and points, backgrounds and theme format schemes;
media clips and posters, 3-D models, OLE/SmartArt previews and node pictures,
picture bullets, hyperlink, transition and animation sounds, embedded fonts.
slide.reuse now lists and remaps media through it, uses get() for slides, and
keeps a linked media item's link when copying it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 15:35:50 -04:00
Brandon Thomas
a5a3137e80
Merge PR #509 from NikitkaRa: Slides: reuse slides from another presentation
...
# Conflicts:
# crates/engine/src/cmd/mod.rs
# crates/pptx/tests/roundtrip.rs
# crates/ui-egui/src/lib.rs
2026-10-14 15:32:18 -04:00
Brandon Thomas and Claude Opus 5.5
f403c65c94
Fix up #355 : kept chart parts get fresh names; chartex keeps its workbook
...
A chart's kept parts were written under the names the source file gave them,
so a relationship to ppt/media/image1.png (or any name the writer generates)
produced a second zip entry with that name on save. Kept parts are now written
as ppt/<folder>/keptN.<ext> with a content-type override each, the chart's and
the kept parts' own relationships are rewritten to the new names (relationships
to parts that were not kept are dropped), and the package writer skips any
second entry under a name it already wrote. externalData/userShapes are dropped
only when their relationship is not written back.
Office 2016 chartex charts (added on main since the PR) capture and write back
their kept parts the same way; the plain-chart fallback carries none.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 15:30:16 -04:00
Brandon Thomas
b6a4343ec5
Merge PR #355 from NikitkaRa: Charts: keep the embedded workbook when a chart is saved unchanged ( #335 )
...
# Conflicts:
# contributors/people.toml
# crates/pptx/src/opc.rs
# crates/pptx/src/read/chart.rs
# crates/pptx/src/read/shapes.rs
# crates/pptx/src/write/chart.rs
2026-10-14 15:23:07 -04:00
Brandon Thomas and Claude 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
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 Thomas and Claude Opus 5.5
320e3a971a
Fix up merged PRs: one Editing group on Home, fmt, docs after the format/canvas/dialog merges
...
- Home: #556 's Find and Replace join main's Replace Fonts… in one Editing group with the
Selection Pane, as PowerPoint lays it out; the separate group pushed Replace Fonts… out of
reach at 1400 px. The Replace Fonts test picks the dialog's Replace button, not the ribbon's.
- cargo fmt.
- docs: parity summary regenerated with `cargo xtask parity`; ui-parity's ruler row says tab
stops are set on the ruler (#567/#569) as well as in the Tabs dialog.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 15:04:16 -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 Thomas
3af36720fd
Merge PR #525 from NikitkaRa: Review: compare with a revised copy and accept its slides
...
# Conflicts:
# crates/engine/src/cmd/review.rs
# crates/ui-egui/src/lib.rs
# crates/ui-egui/src/panes.rs
2026-10-14 14:53:58 -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
1e6d9a2888
Merge PR #549 from NikitkaRa: Review: Thesaurus pane with a built-in English word list
...
# Conflicts:
# crates/engine/src/cmd/review.rs
# crates/engine/src/lib.rs
# crates/ui-egui/src/lib.rs
# crates/ui-egui/src/panes.rs
2026-10-14 14:51:35 -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
b815568fd7
Merge PR #626 from NikitkaRa: Spelling: squiggles in table cells and speaker notes; UI-thread checking on the web
...
# Conflicts:
# crates/engine/src/cmd/text.rs
# crates/ui-egui/src/status.rs
2026-10-14 14:44:48 -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
4416bc170a
Merge PR #697 from NikitkaRa: UI: Format Shape fill transparency follows the selection
...
# Conflicts:
# crates/ui-egui/src/panes.rs
2026-10-14 14:43:08 -04:00
Brandon Thomas
bd607f333a
Merge PR #648 from NikitkaRa: Canvas: a trackpad swipe turns the page
...
# Conflicts:
# crates/ui-egui/src/canvas.rs
# crates/ui-egui/src/lib.rs
2026-10-14 14:42:43 -04:00
Brandon Thomas
6f38c958b6
Merge PR #674 from NikitkaRa: Canvas: a two-finger twist rotates the selection
...
# Conflicts:
# crates/engine/src/cmd/shape.rs
# crates/ui-egui/src/lib.rs
2026-10-14 14:42:12 -04:00
Brandon Thomas
5ed2f808e3
Merge PR #539 from NikitkaRa: Draw: Ink to Shape converts pen strokes into shapes
...
# Conflicts:
# crates/engine/src/cmd/shape.rs
# crates/engine/src/lib.rs
# crates/ui-egui/src/ribbon.rs
2026-10-14 14:41:19 -04:00
Brandon Thomas
79b3e3693f
Merge PR #571 from NikitkaRa: UI: preview slide animations on the editor canvas
...
# Conflicts:
# crates/ui-egui/src/canvas.rs
# crates/ui-egui/src/control.rs
# crates/ui-egui/src/lib.rs
# crates/ui-egui/src/show.rs
2026-10-14 14:40:51 -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 and Claude Opus 5.5
7dcfe0f989
Fix up merged PRs: a textless shape still copies as the objects marker so Ctrl+V pastes it ( #182 ), not as a picture ( #702 )
...
With only an image on the system clipboard egui-winit drops Ctrl+V, so #702 's
picture copy of a textless shape undid main's #182 fix. Text keeps #702 's HTML,
and empty plain text falls back to the marker.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 14:40:18 -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
2d4c4e75d8
Merge PR #536 from NikitkaRa: UI: Grid Options sets spacing, snap and the on-screen grid
...
# Conflicts:
# crates/ui-egui/src/canvas.rs
# crates/ui-egui/src/dialogs.rs
# crates/ui-egui/src/lib.rs
2026-10-14 14:39:01 -04:00
Brandon Thomas
23eb82c02a
Merge PR #544 from NikitkaRa: Tables: Draw Table pencil and Table Eraser
...
# Conflicts:
# crates/ui-egui/src/ribbon.rs
2026-10-14 14:38:00 -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
12df77ed19
Merge PR #637 from NikitkaRa: UI: Paragraph dialog sets alignment, indents and spacing
...
# Conflicts:
# crates/engine/src/cmd/format.rs
# crates/ui-egui/src/dialogs.rs
# crates/ui-egui/src/ribbon.rs
2026-10-14 14:30:55 -04:00
Brandon Thomas
be445fb083
Merge PR #630 from NikitkaRa: UI: Font dialog sets character formatting in one step
...
# Conflicts:
# crates/engine/src/cmd/format.rs
# crates/ui-egui/src/canvas.rs
# crates/ui-egui/src/dialogs.rs
2026-10-14 14:27:38 -04:00
Brandon Thomas
f0dbc08c09
Merge PR #569 from NikitkaRa: Text: Tabs dialog and the ruler's tab selector (stacked on #567 )
...
# Conflicts:
# crates/ui-egui/src/dialogs.rs
2026-10-14 14:27:04 -04:00
Brandon Thomas
aec4043ccd
Merge PR #567 from NikitkaRa: View: indent and tab markers on the ruler
...
# Conflicts:
# crates/engine/src/cmd/format.rs
# crates/ui-egui/src/canvas.rs
2026-10-14 14:26:32 -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
fca521ac8c
Merge PR #471 from NikitkaRa: Control server: bound connections, line length, queue and socket timeouts ( #418 )
2026-10-14 14:24:15 -04:00
Brandon Thomas
0c2c433ade
Merge the chart and EMF+ metafile PRs integrated on land-r2 ( #532 #537 #591 #594 #598 #602 #603 #638 #640 #662 #666 #669 #690 #582 #588 #633 #635 )
...
# Conflicts:
# crates/pptx/src/write/mod.rs
# crates/pptx/tests/roundtrip.rs
2026-10-14 14:17:35 -04:00
Brandon Thomas
f6661ed15e
Merge PR #563 from NikitkaRa: UI: customizable Quick Access Toolbar
...
# Conflicts:
# crates/ui-egui/src/lib.rs
# crates/ui-egui/src/ribbon.rs
2026-10-14 14:16:22 -04:00
Brandon Thomas and Claude Opus 5.5
b2b378a3f0
Fix up merged PRs: dedupe doc rows left by the union merges
...
One EMF / WMF parity row naming both GDI clip regions and EMF+ playback; drop
the stale Tables, Charts, chartex and SmartArt rows that came back with the
chartex PRs; one SVG-gap sentence; one charts-gap paragraph.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 14:13:50 -04:00
Brandon Thomas
3a8927e3f3
Merge PR #691 from NikitkaRa: UI: Trim Media dialog follows the selection
...
# Conflicts:
# crates/ui-egui/src/dialogs.rs
2026-10-14 14:11:53 -04:00
Brandon Thomas
a4fa978903
Merge PR #703 from NikitkaRa: UI: Slide Master Preserve and Title or Footers placeholders
...
# Conflicts:
# crates/engine/src/cmd/design.rs
# crates/ui-egui/src/ribbon.rs
2026-10-14 14:06:42 -04:00
Brandon Thomas
7266b30018
Merge PR #698 from NikitkaRa: UI: Design Effects applies a theme effect scheme
...
# Conflicts:
# crates/engine/src/cmd/design.rs
# crates/ui-egui/src/ribbon.rs
2026-10-14 14:04:24 -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
1e80cd5547
Merge PR #440 from NikitkaRa: Palette: skip commands that need a value
...
# Conflicts:
# crates/ui-egui/src/menus.rs
2026-10-14 14:01:08 -04:00
Brandon Thomas
749656605c
Merge PR #635 from NikitkaRa: Metafile: EMF+ Clear, and the EMF+ record coverage written down
2026-10-14 13:57:48 -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
912598fa46
Merge PR #675 from NikitkaRa: View: Zoom dialog applies a percent or Fit
...
# Conflicts:
# crates/ui-egui/src/dialogs.rs
2026-10-14 13:54:33 -04:00
Brandon Thomas and Claude Opus 5.5
f9c1000e35
Fix up merged PRs: rustfmt; drop doc rows the union merge left twice
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 13:51:53 -04:00
Brandon Thomas
bc62c58b17
Merge PR #664 from NikitkaRa: Show: show the slide number while typing it
...
# Conflicts:
# crates/ui-egui/src/show.rs
2026-10-14 13:49:49 -04:00
Brandon Thomas
e74015490b
Merge PR #660 from NikitkaRa: Show: play a custom show
...
# Conflicts:
# crates/anim/src/show.rs
# crates/engine/src/cmd/review.rs
# crates/ui-egui/src/lib.rs
# crates/ui-egui/src/show.rs
2026-10-14 13:49:10 -04:00
Brandon Thomas
3e89fbbaa6
Merge PR #656 from NikitkaRa: Presenter view: pause and reset the timer, and notes size
...
# Conflicts:
# crates/ui-egui/src/show.rs
2026-10-14 13:48:31 -04:00
Brandon Thomas
6c605be582
Merge PR #649 from NikitkaRa: Show: See All Slides and zoom
...
# Conflicts:
# crates/ui-egui/src/show.rs
2026-10-14 13:47:54 -04:00
Brandon Thomas
8f0640a7b2
Merge PR #603 from NikitkaRa: Render: draw chart trendlines
...
# Conflicts:
# crates/render/src/chart.rs
2026-10-14 13:47:08 -04:00