Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
d3a40f2
feat: major Acrobat UI parity, crop, and layer fixes
Combiler01 Oct 14, 2026
293faa0
feat: major Acrobat UI parity, crop, and layer fixes
Combiler01 Oct 14, 2026
9a5fec0
feat: major Acrobat UI parity, crop, and layer fixes
Combiler01 Oct 14, 2026
bf4c238
Fixes As Requested [Arranging works,Cropping fix, Small size issue,fo…
Combiler01 Oct 14, 2026
fde5abb
Fixes As Requested [image transformer,Image extraction,stale cached i…
Combiler01 Oct 14, 2026
0ca27d3
Fixes As Requested [WASM Build Failure, Clipping Path Destruction, Gr…
Combiler01 Oct 14, 2026
8bd5746
Fixes As Requested [Some images not moving, Opacity Mistakes]
Combiler01 Oct 14, 2026
8be74fd
Fixes As Requested [GS state, Pollution Guard]t
Combiler01 Oct 14, 2026
60925a8
fix: address reviewer feedback regarding [GS operator related]
Combiler01 Oct 14, 2026
9a02fc6
fix: address reviewer feedback regarding [GS operator related]
Combiler01 Oct 14, 2026
daa6286
chore: run cargo fmt to satisfy formatting gate
Combiler01 Oct 14, 2026
dd5b7e7
chore: format remaining workspace files
Combiler01 Oct 14, 2026
6f9ec0f
feat(ui): pinned tools section on Home
Combiler01 Oct 15, 2026
b31e6b4
merge: reconcile upstream/main with local changes
Combiler01 Oct 15, 2026
0351837
fix:implement 8 point non destructive crop, image resize and Arrange …
Combiler01 Oct 16, 2026
9e78afa
merge: reconcile upstream/main with 8-handle image interaction and ar…
Combiler01 Oct 16, 2026
2f53d0f
Chore:Fixed Cl cargo test -p pdfcraft-automation
Combiler01 Oct 17, 2026
1f728fd
fix: resolve stale clipboard image paste bug & finalized CI checks
Combiler01 Oct 17, 2026
ab6a410
ci: run tests sequentially to prevent Windows clipboard crash
Combiler01 Oct 17, 2026
c4e625f
test: implement deterministic mock clipboard to resolve Windows heap …
Combiler01 Oct 17, 2026
1d2af87
test: implement deterministic mock clipboard to resolve Windows heap …
Combiler01 Oct 17, 2026
a02b719
test: implement deterministic mock clipboard to resolve Windows heap …
Combiler01 Oct 17, 2026
ca76c52
Restored some code
Combiler01 Oct 17, 2026
558a4c1
Read the system clipboard once per right-click, and one thread at a time
skylartaylor Oct 17, 2026
d9141f9
Merge storytold/pdfcraft main; refresh ATTRIBUTION.toml translation h…
skylartaylor Oct 17, 2026
4938bbf
Merge storytold/pdfcraft main (picks up the zbus advisory ignores)
skylartaylor Oct 18, 2026
6eaec60
Keep main's Cargo.lock; add only pdfcraft-edit's new pdfcraft-render …
skylartaylor Oct 18, 2026
3f18a53
Wait for the text layer in text_selection_action_icons
skylartaylor Oct 18, 2026
d36a2cc
Image Arrange: keep the image's clipping and position through later e…
skylartaylor Oct 18, 2026
beb1a70
Merge branch 'main' into main
Combiler01 Oct 20, 2026
4d12633
Merge branch 'storytold:main' into main
Combiler01 Oct 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/automation/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,11 @@ impl Automation {
"flip_horizontal" => ImageEdit::Flip { horizontal: true },
"flip_vertical" => ImageEdit::Flip { horizontal: false },
"delete" => ImageEdit::Delete,
"bring_to_front" => ImageEdit::Arrange(pdfcraft_engine::ArrangeOrder::BringToFront),
"send_to_back" => ImageEdit::Arrange(pdfcraft_engine::ArrangeOrder::SendToBack),
"bring_forward" => ImageEdit::Arrange(pdfcraft_engine::ArrangeOrder::BringForward),
"send_backward" => ImageEdit::Arrange(pdfcraft_engine::ArrangeOrder::SendBackward),
"remove_crop" => ImageEdit::RemoveCrop,
"replace" => {
let path = self.resolve(a.str("path")?, false)?;
let bytes = std::fs::read(&path).map_err(|e| failed(format!("{}: {e}", path.display())))?;
Expand Down
2 changes: 1 addition & 1 deletion crates/automation/src/tools.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1253,7 +1253,7 @@ pub fn tools() -> Vec<ToolDef> {
"doc": doc(),
"page": { "type": "integer", "minimum": 1 },
"image": { "type": "integer", "minimum": 1 },
"action": { "type": "string", "enum": ["move", "crop", "rotate", "flip_horizontal", "flip_vertical", "replace", "delete"] },
"action": { "type": "string", "enum": ["move", "crop", "rotate", "flip_horizontal", "flip_vertical", "replace", "delete", "bring_to_front", "send_to_back", "bring_forward", "send_backward", "remove_crop"] },
"rect": { "type": "array", "items": { "type": "number" }, "minItems": 4, "maxItems": 4 },
"quarters": { "type": "integer" },
"path": { "type": "string" },
Expand Down
14 changes: 12 additions & 2 deletions crates/automation/tests/automation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -823,11 +823,11 @@ fn a_recovered_page_tree_survives_a_full_save() {
original.extend_from_slice(b"\nendobj\n");
}
let xref = original.len();
original.extend_from_slice(b"xref\n0 5\n0000000000 65535 f \n");
original.extend_from_slice(format!("xref\n0 {}\n0000000000 65535 f \n", objs.len() + 1).as_bytes());
for o in offsets {
original.extend_from_slice(format!("{o:010} 00000 n \n").as_bytes());
}
original.extend_from_slice(format!("trailer\n<< /Size 5 /Root 1 0 R >>\nstartxref\n{xref}\n%%EOF\n").as_bytes());
original.extend_from_slice(format!("trailer\n<< /Size {} /Root 1 0 R >>\nstartxref\n{xref}\n%%EOF\n", objs.len() + 1).as_bytes());
std::fs::write(dir.join("damaged.pdf"), &original).unwrap();

let mut a = auto(&dir);
Expand Down Expand Up @@ -2671,6 +2671,16 @@ fn editing_page_images_through_tools() {
assert_eq!(cropped["visible_rect"], json!([10.0, 10.0, 25.0, 30.0]));
ok(&mut a, "image_edit", json!({ "doc": made, "page": 1, "image": 1, "action": "rotate" }));
ok(&mut a, "image_edit", json!({ "doc": made, "page": 1, "image": 1, "action": "flip_horizontal" }));
let r = ok(&mut a, "image_edit", json!({ "doc": made, "page": 1, "image": 1, "action": "bring_to_front" }));
assert_eq!(r["undo"], "Bring to front");
let r = ok(&mut a, "image_edit", json!({ "doc": made, "page": 1, "image": 1, "action": "send_to_back" }));
assert_eq!(r["undo"], "Send to back");
let r = ok(&mut a, "image_edit", json!({ "doc": made, "page": 1, "image": 1, "action": "bring_forward" }));
assert_eq!(r["undo"], "Bring forward");
let r = ok(&mut a, "image_edit", json!({ "doc": made, "page": 1, "image": 1, "action": "send_backward" }));
assert_eq!(r["undo"], "Send backward");
let r = ok(&mut a, "image_edit", json!({ "doc": made, "page": 1, "image": 1, "action": "remove_crop" }));
assert_eq!(r["undo"], "Remove crop");
let saved = ok(&mut a, "image_save", json!({ "doc": made, "page": 1, "image": 1, "path": "out/picture" }));
assert_eq!(saved["format"], "png");
assert!(std::fs::read(dir.join("out/picture.png")).unwrap().starts_with(b"\x89PNG"));
Expand Down
1 change: 1 addition & 0 deletions crates/edit/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@ unicode-bidi = "0.3"

[dev-dependencies]
hayro-syntax = { workspace = true }
pdfcraft-render = { workspace = true }
Loading