Commit Graph
331 Commits
Author SHA1 Message Date
Brandon Thomas dc1fc8d83b Merge pull request #1418
fix(slides): dragging several selected slides moves them all
2026-10-30 16:05:27 -04:00
Brandon Thomas 28756fc755 Merge pull request #1462
Docs: refresh gaps and roadmap against merged PRs
2026-10-30 15:59:10 -04:00
Brandon Thomas 34cfc5b20b Merge pull request #1500
Allow multiple automation roots per kind
2026-10-30 15:58:54 -04:00
Brandon Thomas e279461ca7 Merge pull request #1493
fix(cli): support --cmd-file for batch commands (#1098), carried from #1150
2026-10-30 15:58:53 -04:00
Brandon Thomas f61b7a34dd Merge pull request #1560
Picture Format: the Picture Styles row leaves room for Crop and Size
2026-10-30 15:58:52 -04:00
JonRC 359e46f042 ROADMAP: place the Picture Styles rows beside the newer entries
Main added a status line and revision rows at the same spots, so these go one line further down.
2026-10-30 16:51:25 -03:00
Brandon Thomas f08e5f8691 Merge pull request #1384
PPTX: a picture in a picture placeholder takes its layout's shape
2026-10-30 15:48:35 -04:00
Brandon Thomas b3c36e816a Merge pull request #1560
Picture Format: the Picture Styles row leaves room for Crop and Size
2026-10-30 15:48:31 -04:00
Brandon Thomas 5e85f73c5e Merge pull request #1397
Format: Fill offers Slide background fill
2026-10-30 15:48:04 -04:00
Brandon Thomas 8d278d71cb Merge pull request #1456
Slide show: Set Up Slide Show can keep the mouse cursor visible (#1445)

# Conflicts:
#	crates/ui-egui/src/app/commands.rs
#	crates/ui-egui/src/lib.rs
2026-10-30 15:42:42 -04:00
JonRC 99bb0f0a62 Picture Format: the Picture Styles row leaves room for Crop and Size
The gallery put all 24 picture styles in the ribbon row, about 1370 px, so
Alt Text, Arrange, Crop and Size sat past the ribbon's edge in any window
narrower than about 2500 px, the default 1440 px window and a maximized
1920 px one included. The row now shows as many styles as leave room for
the groups after it (at least two), sized from the width the tab left free
on the last frame, and an arrow opens all 24 in a menu, as the Transitions
and Animations galleries do.
2026-10-29 23:12:08 -03:00
FaabyyandClaude 8cc25169ab Slide show: going back reverses the left slide's transition (#1531)
Back from slide B to slide A played A's own entrance transition. PowerPoint
plays the transition B came in with, backwards.

ShowState now remembers that the current slide was reached by Back
(`backward`, set by `prev`, cleared by every other way in). The show then
takes the transition of the slide it left and runs its frames from the end
to the start, with the old and new slides trading places
(`transition_layers`). Morph needs no reversing: a Morph from the slide
left to the one come back to already is the reversed Morph. A jump (Go to
Slide, links, See All Slides) still plays the target slide's transition.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-29 09:33:59 +00:00
FaabyyandClaude 9388884d20 Docs: the keep-cursor preference is showKeepCursor in ui.json; roadmap header for #1445
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-28 18:17:11 +00:00
Harrison Booth d1487e6916 MCP: accept multiple automation roots 2026-10-28 11:16:28 -05:00
Harrison Booth 6a9f18af92 Merge origin/main into the --cmd-file branch (#1150) 2026-10-28 09:44:21 -05:00
dotCooCoo b57ab3fb35 Merge commit 'refs/check/mw-deckcraft-main' into feat/slide-background-fill
# Conflicts:
#	crates/engine/src/cmd/shape.rs
#	crates/ui-egui/src/panes.rs
2026-10-28 03:50:51 -07:00
Harrison Booth b003dde823 Docs: refresh gaps and roadmap against merged PRs
Remove the duplicate header lines in gaps.md, ROADMAP.md, ui-parity.md and
localization-parity.md. Drop gap entries that landed: Morph outline alignment
(#67) and animation rewind (#77). Record that PR #75 was closed unmerged so
#60 stays open, and that #53 is closed with Windows image paste tracked in
#1414. Note Reuse Slides (#1103) and Compare reject (#850). Command count 323.
2026-10-27 14:23:51 -05:00
FaabyyandClaude b9842d0b82 Slide show: Set Up Slide Show can keep the mouse cursor visible (#1445)
A full-screen show hides a still pointer after 2.5 s, which makes decks
with clickable, branching choices hard to use. Set Up Slide Show now has
Keep mouse cursor visible (`show.keepCursor {on?}`): the show then keeps
the normal pointer, and the pointing hand over links and actions, while
links still follow. It is a user preference kept in ui.json, since PPTX
has no place for it; off by default, Reading View unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-27 10:50:26 +00:00
Leonardo Basilio b31a59ad89 Merge branch 'main' into fix/picture-placeholder-geometry 2026-10-26 10:41:04 -03:00
fchinuandClaude Opus 5.5 039395ae4f fix(slides): dragging several selected slides moves them all
Dragging one of several selected slides in the thumbnail pane or the
Slide Sorter moved only the dragged slide. Now the whole selection moves
as one run in deck order, in one undo step, stays selected and joins the
section it lands in; an unselected slide still moves alone.

- slide.move takes `ids` (checked against the deck while parsed, repeats
  fold), alongside the unchanged `{from, to}`.
- The slide drag records its slides and the presentation it began in; a
  drag in another presentation, or one whose release no view saw (a
  Sorter double-click opening Normal view mid-gesture), is dropped
  instead of moving slides on a later release.
- Normal-view thumbnails carry a "Slide N" label, like Sorter cells.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:55:14 +01:00
Sofia Alves FigueredoandClaude Sonnet 5.5 230b6485d9 fix(windows): keep the shortcut icon after an update (#1114) (#1391)
* fix(windows): keep the shortcut icon after an update (#1114)

The MSI's Start menu shortcut took its icon from the WiX <Icon>, which Windows
Installer caches under %APPDATA%\Microsoft\Installer\{ProductCode}\. Every
update is a major upgrade with a new ProductCode, so the old folder is deleted.
A taskbar pin is a copy of the shortcut that the update never touches, so it
kept pointing at the deleted file and lost its icon.

Drop the Icon from the shortcut so it shows the icon embedded in deckcraft.exe,
whose path survives updates. The <Icon> stays for ARPPRODUCTICON. A test keeps
shortcuts from naming an MSI icon again.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* contributors: credit Sofia Alves Figueredo by real name

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* fix(windows): make the Start menu shortcut non-advertised (#1114)

Addresses the review comment: without an MSI Icon, a non-advertised shortcut
targets the installed exe directly and takes its embedded icon.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* fix(windows): package.ps1 rejects a deckcraft.exe with no embedded icon (#1114)

The shortcuts now take the exe's own icon, and -SkipBuild packages an existing
exe that may come from a build without DECKCRAFT_REQUIRE_WINRES=1. Count its
icons with ExtractIconEx and stop before WiX when there are none.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 20:23:43 -04:00
dotCooCoo 71352733d4 Format: Fill offers Slide background fill
Format Shape's Fill section had no Slide background fill option, and
shape.fill had no parameter for it. A shape opened from a file with
useBgFill showed Automatic chosen.

shape.fill {background: true} now fills a shape with the slide
background, and Format Shape lists Slide background fill after Pattern
fill. It has no Color button or Transparency slider. Saving writes
useBgFill, and the slide background shows through the shape.
2026-10-25 15:42:46 -07:00
LeonardoandClaude Sonnet 5.5 1705712a41 PPTX: a picture in a picture placeholder takes its layout's shape
A layout's round picture placeholder keeps a slide's photo in a circle in
PowerPoint. The reader marked only p:sp placeholders as inheriting their
geometry, so a p:pic placeholder with just a frame in its spPr came out as
a rectangle (with the layout's border). Mark p:pic placeholders too; the
renderer already clips pictures to their geometry.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 17:00:05 -03:00
Brandon Thomas 5e9043afa6 Merge pull request #1336
# Conflicts:
#	crates/ui-egui/src/dialogs.rs
#	crates/ui-egui/src/panes.rs
#	crates/ui-egui/src/ribbon.rs
2026-10-25 13:43:07 -04:00
Brandon Thomas 637bbcdf51 Merge pull request #1118 2026-10-25 13:42:06 -04:00
Brandon Thomas ad664b2cdd Merge pull request #1107 2026-10-25 13:42:06 -04:00
Brandon Thomas 8b2c0f456a Merge pull request #1294 2026-10-25 13:42:05 -04:00
Brandon Thomas c8a13561b3 Merge pull request #1331 2026-10-25 13:42:05 -04:00
FaabyyandClaude a378c78c25 Roadmap: record sel-range-1105
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-25 11:50:24 +00:00
aiongg 3821a8f7f7 Integration: the pattern gallery offers the 48 gallery presets in gallery order; the six legacy ones still draw 2026-10-25 02:45:46 +00:00
aiongg 4668e0b45a Merge #1335: Format: Pattern fill shows a gallery of every preset with Foreground and Background colors 2026-10-25 02:22:58 +00:00
aiongg ca919b0c9b Merge #1332: Edit Points: right-click a segment for Add Point, Delete Segment and Open/Close Path
# Conflicts:
#	crates/engine/src/tools.rs
2026-10-25 02:22:57 +00:00
aiongg 85db5caed4 Merge #1325: Edit Points: Esc before releasing the mouse button cancels a point or handle drag 2026-10-25 02:22:39 +00:00
aiongg 2b9b83ef83 Merge #1308: Edit Points: Shift, Ctrl or Alt while dragging a handle makes the point smooth, straight or corner 2026-10-25 02:22:38 +00:00
aiongg aaaee73c6f Merge #1301: Text: a Columns dialog sets the number of columns and the spacing between them 2026-10-25 02:22:38 +00:00
aiongg d863fac1c6 Merge #1282: Tables: dragging across cells selects a range of cells 2026-10-25 02:22:37 +00:00
dotCooCoo 2ddd2abe67 Format: Pattern fill shows a gallery of every preset with Foreground and Background colors
Format Shape's Pattern fill set 25 % in accent 1 on background 1 and
offered no way to change it, and Format Background listed 10 of the 54
presets by their XML names. Both panes now show the same editor: a
gallery of the 54 DrawingML presets drawn in the fill's own colors,
each named in words, and Foreground and Background color menus.

With a pattern fill, Format Shape no longer shows the solid-fill Color
button, which replaced the pattern with a solid fill, or the
Transparency slider, which did not change a pattern. The renderer
exports the preset list and tiles for the gallery to draw.
2026-10-24 14:13:22 -07:00
Marco Arnulfo d384bbc496 Units: Preferences chooses inches or centimetres for the Format pane, the ribbon's size boxes, the Slide Size dialog and the ruler (#1326) 2026-10-24 23:02:45 +02:00
dotCooCoo 92ce587cd6 Edit Points: right-click a segment for Add Point, Delete Segment and Open/Close Path
The segment menu in Edit Points offered only Straight Segment and Curved
Segment. It now also has Add Point, which adds a point where the right
click was, Delete Segment, which removes the segment from a closed outline
so that the outline opens there (grayed out on an open outline), and Open
Path, which opens the outline at the segment's start point (Close Path on
an open outline).
`shape.deleteSegment` does the deletion for the CLI and MCP.

The place on a segment that a click picks was found only in steps of 1/32
of the segment, so Add Point and Ctrl-click could add the point as far
as 1/64 of a straight segment's length from the pointer. It is now narrowed
down after that first pass.

Adding or deleting a point now forgets a point type remembered for handle
drags, as opening and closing the outline already did. `shape.addPoint` on
the first point of an open outline no longer splits the closing edge of
another outline later in the same path.
2026-10-24 13:07:42 -07:00
Marco Arnulfo 2e54272415 Show: Ctrl+wheel zooms the slide in and out around the pointer (#1286)
Cmd+wheel on a Mac. Four notches double the zoom, up to 4x; zooming back to the whole slide leaves the zoom. The plain wheel still turns the page, and the trackpad pinch is still not a show gesture.
2026-10-24 21:56:17 +02:00
dotCooCoo 8f31193cc0 Edit Points: Esc before releasing the mouse button cancels a point or handle drag
Esc during a vertex or handle drag in Edit Points used to leave Edit
Points while the drag went on: the point kept following the pointer and
the release added an undo step. Esc now ends the drag and puts the shape
back as it was at the press, with no undo step, and Edit Points stays on.
Esc without a drag still leaves Edit Points.
2026-10-24 10:52:09 -07:00
dotCooCoo 00f9df7d8d Edit Points: Shift, Ctrl or Alt while dragging a handle makes the point smooth, straight or corner
A handle drag in Edit Points ignored the modifier keys: the point kept
the type it had. In PowerPoint, Shift, Ctrl or Alt held during the drag
sets the point's type.

Shift held while dragging a point's handle now makes it a smooth point.
Ctrl (Cmd on the Mac) makes it a straight point, and Alt (Option) makes
it a corner point. The handle drag passes that type to shape.moveHandle,
and the point keeps it for the next drag without a modifier, as after
Smooth Point, Straight Point or Corner Point in the right-click menu.
2026-10-24 09:38:54 -07:00
dotCooCoo 68c21778ef Merge main into feat/table-cell-range-select 2026-10-24 09:29:12 -07:00
dotCooCoo 0c0cce3764 Merge main into feat/autoformat-lists 2026-10-24 09:29:11 -07:00
Dominik Strebel 8236a9441b docs(roadmap): status line names the 2026-10-24 progress-log entry 2026-10-24 17:16:58 +02:00
KataccandClaude Opus 5.5 2d3997d2e3 Review: proofing language for the whole presentation
Review › Language gets "Apply to: Selected text / Whole presentation".
The new format.languageAll command sets lang/noProof on every run in
the deck (slides, groups, table cells, notes, masters, layouts) and on
the master and default text styles, so new text inherits it. It needs
no selection and is one undo step; format.language is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 16:31:35 +03:00
dotCooCoo e89c824c6d Text: a Columns dialog sets the number of columns and the spacing between them
Home > Columns offered 1, 2 or 3 columns, always 18 pt apart, and Format
Shape > Text Box had the same three buttons. The spacing could not be
seen or changed, and picking a number reset it.

Home > Columns > More Columns... and a Columns... button in Format Shape
> Text Box now open a Columns dialog with Number (1 to 16) and Spacing in
inches, filled in from the text box. OK applies both in one undo step.
A Spacing left as shown keeps the text box's exact value.

format.columns with no fields opens the dialog. A key left out keeps the
text box's own value instead of resetting it to 1 column or 0 pt, and a
count that is not a whole number from 1 to 16, or a spacing that is not
a number, is an error. Before, an out-of-range count was clamped, a
count that was not a whole number meant 1 column, and a spacing that
was not a number meant 0 pt.
2026-10-24 05:57:36 -07:00
Dominik StrebelandClaude Opus 5.5 aece097096 Render: a picture's fill shows behind its transparent pixels
PowerPoint draws a picture's own fill (p:pic/p:spPr) behind the picture, so
it shows through its transparent pixels: a synthetic deck with one
half-transparent PNG three times (no fill, an orange fill, a yellow fill
with a blue outline), exported as PDF, shows the orange and yellow boxes
behind the image. DeckCraft drew the outline but never the fill.

Old equation objects use this: an OLE object (p:oleObj, Equation.3) has a
fallback picture whose spPr gives it a coloured box behind the equation's
transparent metafile. The reader took only the picture's image as the
object's preview and dropped its fill and line.

- The shape-fill loop moves into Renderer::fill_geometry; a picture and an
  embedded object's preview paint their own explicit fill with it before
  the image (a style fill alone still draws nothing, as before).
- An embedded object without a fill or line of its own takes them from
  its fallback picture's spPr; its frame keeps its own position.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 14:07:43 +02:00
dotCooCoo 9888d7c90e Tables: dragging across cells selects a range of cells
While the caret is in a table cell, a drag into another cell of the
table now selects the cells between them. The range takes in every
merged cell it touches, and the canvas shades the selected cells.
Moving back into the first cell returns to a text selection there.
Shift+arrow moves the cell the range was extended to, and the cell it
started from stays.

With a range selected, run and paragraph formatting apply to those
cells only. Delete clears their text and keeps the cells and the table,
and Copy and Cut take their text, with a tab between cells and a line
per row. Shading, Borders, Cell Margins and Align take in the merged
cells the range touches. A press in the table starts again in the cell
under the pointer.
2026-10-24 01:29:58 -07:00
aiongg 36cd258bd2 Merge PR #883: PPTX: paragraph builds edited in the reference app keep their clicks
ROADMAP.md: union of log rows. docs/animation-parity.md: main's header; the by-paragraph row from the PR, the triggers row from main; both revision rows.
2026-10-24 06:27:19 +00:00