Commit Graph
584 Commits
Author SHA1 Message Date
Brandon Thomas 5e85f73c5e Merge pull request #1397
Format: Fill offers Slide background fill
2026-10-30 15:48:04 -04:00
Brandon Thomas 6d02e90177 Merge pull request #1453
Reject '+' sign in slide range numbers
2026-10-30 15:42:14 -04:00
Brandon Thomas 52d81a9468 Merge pull request #1538
Reject invalid slide index in design.applyIdea and design.ideas
2026-10-30 15:42:13 -04:00
Brandon Thomas 81ab1bce0d Merge pull request #1537
Reject invalid slide index in animation.clear
2026-10-30 15:42:13 -04:00
Brandon Thomas 3465ed9d47 Merge pull request #1410
Reject invalid slide index in file.export, file.render, slide.colorAt

# Conflicts:
#	crates/engine/src/tests.rs
2026-10-30 15:42:12 -04:00
Brandon Thomas f29b7e7eed Merge pull request #1481
Tests pinning picture.reset, a repeated PNG export and an action button's theme fill

# Conflicts:
#	crates/engine/src/tests.rs
2026-10-30 15:42:11 -04:00
Brandon Thomas a37fa65852 Merge pull request #1479
review.compare says which side each change is on; an absent box is not a rotation
2026-10-30 15:42:10 -04:00
Brandon Thomas 21bbb4127d Merge pull request #1478
A group's box follows its children after a command moves or resizes one

# Conflicts:
#	crates/engine/src/tests.rs
2026-10-30 15:42:10 -04:00
Brandon Thomas 36eaa7e051 Merge pull request #1477
Inserts in the master views: insert.dateTime fills the master's date placeholder; answers say a master or layout was edited (part of #298)

# Conflicts:
#	crates/engine/src/tests.rs
2026-10-30 15:41:59 -04:00
Brandon Thomas 932ec7bef6 Merge pull request #1475
table.cellAlign takes a horizontal align
2026-10-30 15:41:42 -04:00
Dylan M. Taylor 505a6f28ac Update prompt shows the app icon and accent color instead of a letter (#1561)
UPDATE_APP (native builds; craft-update is a native-only dependency) carries our 128 px icon and accent (#f07a1e, its colour in ArtCraft Launcher). The updater, the self-update
helper and craft-update's startup prompt all get them through crate::UPDATE_APP; the
prompt draws the icon, the accent and "by ArtCraft" (craft-update's default developer).

craft-update is pinned to storytold/craft-libs main at 1065653e7 (#434).
Clippy fixes for Rust 1.99 in untouched code (same logic):
- crates/engine/src/tools/click.rs
- crates/engine/src/tools/pointer.rs
- crates/metafile/src/emfplus.rs
- crates/model/src/trendline.rs
- crates/pptx/src/read/dml.rs
- xtask/src/layers.rs
2026-10-30 01:28:38 -04:00
NetterSilverandClaude Haiku 5.5 35a9b812fd Reject invalid slide index in design.applyIdea and design.ideas
Found while testing crates/engine/src/cmd/ideas.rs:254 (apply_cmd); same pattern in ideas_cmd :248

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 12:19:26 +01:00
NetterSilverandClaude Haiku 5.5 1bdd63dabe Reject invalid slide index in animation.clear
Found while testing crates/engine/src/cmd/animation.rs:342 (clear)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 11:27:56 +01: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
Dylan M. Taylor 1a203c4a73 Refactor engine for strict Clippy checks 2026-10-28 06:02:27 +00:00
Zach BerryandClaude Sonnet 5.5 cd5ff01810 [NN6] review.compare treats an absent box like an unrotated, unflipped one
slide.reset drops a placeholder's stored box, and compare called that
"rotated" because None differed from a stored rotation of 0. Absent now
equals 0 for rotation and no flips; a real flip difference reads "flipped".
PowerPoint's Compare reports a rotation only when the angle differs.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 21:43:36 -05:00
Zach BerryandClaude Sonnet 5.5 2cad063d1d [MM4] A group's box follows its children after a command moves one
shape.move or shape.setBounds on a group's child left the group's box as it
was, so inspect_slide reported stale bounds. After any edit that changes a
child's box or the child list, the group's box is refitted to the union of its
children (its child space too, so every child keeps its place on the slide).
A group that was itself moved or resized, and SmartArt groups (regenerated
inside their own box), are left alone.

PowerPoint: a group's bounding box always hugs its children; dragging one
child out grows the group, dragging it back shrinks it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 20:38:41 -05:00
Zach BerryandClaude Sonnet 5.5 3356bc071c [SS1] Pin that an inserted action button's fill follows the theme
It already does: insert.actionButton gives the shape the accent1 style with no explicit fill, as
PowerPoint's gallery button has, so a theme change recolours it. No code change; a test pins it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 20:37:48 -05:00
Zach BerryandClaude Sonnet 5.5 0efd6f1b85 [HH12] Pin that exporting a slide again overwrites the PNG
Not a bug: file.export writes the second PNG over the first with the edit in
it. The test pins it (export, edit, export to the same path, files differ).

PowerPoint: Save As / Export to an existing file name replaces the file.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 20:37:48 -05:00
Zach BerryandClaude Sonnet 5.5 f58ec39968 [CC3] table.cellAlign takes a horizontal align
align: left|center|right|justify sets every paragraph of the target cells;
anchor stays the vertical alignment and is optional when align is given.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 20:31:46 -05:00
Zach BerryandClaude Fable 5.1 4c83fb9abe [CCC2] Insert answers say when they edited a master or layout
PowerPoint shows the Slide Master tab while a master or layout is open,
so inserting there is never mistaken for editing a slide. DeckCraft's
insert commands answered the same in both views. Session::execute now
adds editing: {kind, name} (as slide.inspect does) to the answers of
insert.*, shape.insert, shape.freeform, shape.connect and slide.new in
master, layout, handout and notes-master view; answers on slides are
unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-27 18:55:41 -05:00
Zach BerryandClaude Fable 5.1 6a1b8f1e39 [ZZ1] insert.dateTime in the Handout/Notes Master view fills the master's date placeholder
PowerPoint: Header and Footer > Notes and Handouts > Date and time puts a date field in the
date placeholder of the notes and handout masters, and every handout and notes page shows it.
Before, with no text caret the command wrote the current slide's date placeholder (design
.headerFooter) even in those views, so the handout PDF showed nothing. Now it writes the selected
date placeholder, else the master's own, as a field (update) or plain text, answers where:
master, and refuses (changing nothing) when the master has no date placeholder.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-27 18:55:41 -05:00
Zach BerryandClaude Sonnet 5.5 48535be970 [JJ1] review.compare says which side each change is on
Each change now carries number (the editor's slide number beside the 0-based
slide) and onlyIn (deck or file; absent for a change in both). Shape details
say (only in the deck) / (only in the file). The docs say review.accept takes
the file's side.

PowerPoint: Compare marks the other file's differences as revisions that
Accept applies and Reject discards, so accepting takes the file's side; kept.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 18:24:31 -05:00
Zach BerryandClaude Sonnet 5.5 7b424a463b [HH9] picture.reset: document and pin what it keeps (frame shape, size, position)
PowerPoint: Reset Picture discards the picture's formatting changes
(corrections, recolor, artistic effect, picture-style effects and outline);
Reset Picture & Size also restores the size. The frame shape set by Change
Shape is not touched. Ours already left the geometry alone (the reported
geometry wipe does not reproduce); effects, outline and crop are picture
formatting that PowerPoint discards too, so they stay reset (declined:
parity). Added the regression test and the command doc.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 18:24:31 -05:00
NetterSilverandClaude Haiku 5.5 cd2e780432 Reject '+' sign in slide range numbers
Found while testing crates/engine/src/cmd/file.rs:390-400 (parse_slide_range)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 09:19:49 +01:00
aiongg 12001d14e7 refactor(engine): split cmd/shape.rs into cmd/shape/{size,appearance,picture,freeform}.rs 2026-10-26 22:10:40 +00:00
aiongg 96f0ac204e test(engine): read past #[cfg(test)] imports in the file-system scan 2026-10-26 22:08:44 +00:00
aiongg 8b456dce41 refactor(engine): split tools.rs into tools/{hit,pointer,drag,click,geometry}.rs 2026-10-26 22:08:44 +00:00
aiongg 15bf821535 refactor(engine): split cmd/text.rs into cmd/text/{ime,layout,editing,autocorrect,caret,formatting}.rs 2026-10-26 22:08:44 +00:00
aiongg d7c06b53eb refactor(engine): split cmd/smartart.rs into cmd/smartart/{nodes,paint,layout,diagrams,edit}.rs 2026-10-26 22:08:44 +00:00
aiongg 97b98767f1 refactor(engine): split cmd/insert.rs into cmd/insert/{picture,album,chart,text_fields,links}.rs 2026-10-26 22:08:44 +00:00
aiongg d5180fbb70 refactor(engine): split cmd/format.rs into cmd/format/{font,text_effects,paragraph,painter,ruler}.rs 2026-10-26 22:08:44 +00:00
aiongg 9c222be711 refactor(engine): split cmd/design.rs into cmd/design/{colors,slide_background,slide_setup,master_view}.rs 2026-10-26 22:08:44 +00:00
aiongg e9a7413c87 refactor(engine): move insert icon_and_picture_tests to cmd/insert/icon_and_picture_tests.rs 2026-10-26 22:08:44 +00:00
aiongg b48467943b refactor(engine): move design browse_theme_tests to cmd/design/browse_theme_tests.rs 2026-10-26 22:08:44 +00:00
aiongg 0f4665ebe2 refactor(engine): move design tests to cmd/design/tests.rs 2026-10-26 22:08:44 +00:00
aiongg f987fe63a7 refactor(engine): move cmd/mod.rs to cmd.rs 2026-10-26 22:08:43 +00:00
Dylan M. Taylor 27009cd941 refactor: reduce cognitive complexity in five more functions (S3776) 2026-10-26 16:01:57 -04:00
Dylan M. Taylor 4bb73d5d34 refactor: reduce cognitive complexity in five functions (S3776) 2026-10-26 16:01:53 -04:00
dotCooCoo 6396c480b2 Format: Slide background fill keeps a group fill that a picture uses
When a group's shapes take the slide background fill, the group's own
fill stays when a picture, connector, table or chart in it is filled
with the group fill (grpFill), so that member draws as before.
2026-10-26 02:38:34 -07:00
dotCooCoo aef364867d Format: Slide background fill applies to shapes and text boxes only
shape.fill {background: true} leaves the fill of pictures, connectors,
tables and charts unchanged. Only a shape or text box (p:sp) saves
useBgFill in a .pptx. With a group selected, its shapes and text boxes
take the fill and the group's own fill is cleared. When no selected
object can take the fill, the command returns an error.

The Format pane leaves Slide background fill out of a picture's Fill
options, and shows it chosen for a group whose shapes and text boxes
all have it.
2026-10-26 01:56:23 -07:00
NetterSilverandClaude Haiku 5.5 78c77ad450 Reject invalid slide index in file.export, file.render, slide.colorAt
Found while testing crates/engine/src/cmd/file.rs:581 (export); same pattern in render :539 and color_at :550

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 05:16:56 +00: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
Brandon ThomasandClaude Opus 5.5 31cf44c2ff Integration: the merged PRs import what they use (#1270) and use egui 0.37's wheel source and media clock (#1350)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:45:19 -04:00
Brandon ThomasandClaude Opus 5.5 4504495e2b Tests: one blank line between the merged engine tests (cargo fmt)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:43:24 -04: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 f1bb876e28 Merge pull request #1334
# Conflicts:
#	crates/engine/src/cmd/edit.rs
2026-10-25 13:42:53 -04:00
Brandon Thomas 5648c4d7ec Merge pull request #1189
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-25 13:42:45 -04:00
Brandon Thomas d85e397be4 Merge pull request #1291
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-25 13:42:45 -04:00
Brandon Thomas 0e78adc675 Merge pull request #1259
# Conflicts:
#	crates/engine/src/cmd/richclip.rs
2026-10-25 13:42:29 -04:00