21 Commits
Author SHA1 Message Date
MarekSpodBiedry 2ce4fb279f Fill & Sign: don't show the comment hover popup over placed text (#1504) (#1576) 2026-10-13 00:10:14 -04:00
MarekSpodBiedry 9215b6f3b4 Name the failing option and page count when a chained edit page is out of range (#1550) (#1575) 2026-10-13 00:10:05 -04:00
MarekSpodBiedry 549fa7ae04 xtask: stop headless Chrome leaving macOS code-sign clones (#1196) (#1292) 2026-10-12 05:40:50 -04:00
MarekSpodBiedry 75b113ac5b Raise workspace rust-version to 1.95 to match the UI crate (#1169) (#1188) 2026-10-11 18:30:25 -04:00
MarekSpodBiedryandBrandon Thomas 8983f05c78 On-page text boxes keep a dark caret on their white backgrounds in the dark theme (#655) (#734)
* Text editor on the page keeps a dark caret on its white box in the dark theme (#655)

* Form fields, typed fill text and added text keep a dark caret on their white boxes in the dark theme (#655)

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-11 14:42:14 -04:00
MarekSpodBiedry 1c18510b4a Edit images: moving or resizing a clipped image moves its own clip too (#1022) (#1049) 2026-10-11 12:16:57 -04:00
MarekSpodBiedry 2a909f361c Print: a scaled annotation appearance no longer prints larger than its rectangle (#802) (#861) 2026-10-10 15:50:20 -04:00
MarekSpodBiedry c49148a290 Extract/Combine: a page repeated in one selection gets its own annotations (#818) (#852) 2026-10-10 15:47:45 -04:00
MarekSpodBiedry 265ddca58c organize: drop named destinations and their links when a page is deleted (#817) (#851) 2026-10-10 15:46:52 -04:00
MarekSpodBiedry d258764abc Keep every part when bookmark titles repeat in doc_split (#800) (#863) 2026-10-10 15:39:29 -04:00
MarekSpodBiedry f620750934 Web: warn before reloading a document with unsaved changes (#812) (#856) 2026-10-10 15:38:42 -04:00
MarekSpodBiedryandBrandon Thomas f6caba43b2 XFDF keeps a callout's leader, text-box inset, intent and arrowhead (#819) (#854)
Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-10 15:38:27 -04:00
MarekSpodBiedry 6fd053b918 organize: deleting the opening page drops the catalog OpenAction (#821) (#855) 2026-10-10 15:31:51 -04:00
MarekSpodBiedry c7b9db8faa Fit to width fits the shown page in single-page view (#808) (#859) 2026-10-10 15:31:20 -04:00
MarekSpodBiedry 7608632db1 fix(xfdf): drop the replaced note's popup when re-importing a comment (#807) (#860) 2026-10-10 15:08:32 -04:00
MarekSpodBiedry f3f4019fad Autosave: snapshot a new unsaved document before its first edit (#815) (#850) 2026-10-10 15:06:15 -04:00
MarekSpodBiedry 8ae9f6be8b Measure: snap to the implicit closing edge of filled paths (#803) (#862) 2026-10-10 15:05:48 -04:00
MarekSpodBiedry 5c5f4d8b49 Phone photos follow EXIF orientation; image signatures stay upright on rotated pages (#434) (#485)
* Stamps and added images follow a JPEG's EXIF orientation (part of #434)

Phones store a portrait photo as landscape pixels plus an EXIF
Orientation tag. A JPEG went into the PDF as it was (DCTDecode), and PDF
image XObjects have no such tag, so a photo used as a custom stamp, an
added or replaced image, a watermark or background, or a button image
showed up turned 90 degrees.

Before these images are embedded, a JPEG whose Orientation is not 1 is
decoded, turned the way the tag says and re-encoded (quality 92). Its
JFIF resolution is kept, swapped for quarter turns, so the natural size
on the page stays right. Other images, JPEGs without the tag, JPEGs that
fail to decode and photos over 64 megapixels are embedded unchanged, as
before. Fill & Sign image signatures already applied the tag.

* Image signatures stay upright and anchored on rotated pages (part of #434)

On a page with /Rotate 90, 180 or 270 an image signature turned with the
page, because its picture was drawn along user-space axes while the click
or the "at" argument is a displayed point. It was also anchored at the
wrong point: its left edge and vertical centre were taken in user space,
so on a 90 degree page the image centre ended up elsewhere.

The signature's appearance now carries the counter-rotation as its form
/Matrix, which viewers fit to /Rect, so the picture reads upright as
displayed. The page's rotation is kept in /PCPictureRotate, so restyling
regenerates the same matrix and moving and resizing keep it. The box of the
signature runs along the displayed axes, so its left edge and vertical
centre are where they were asked for. The page view matrix in
pdfcraft-model is split out as view_matrix_for.

The Fill & Sign preview and the live move/resize preview draw the picture
the way the appearance does, and the resize handles keep the image's
proportions as displayed. comment_image_preview reports image_rotation,
how far the image is shown turned (0 for one placed upright).

Custom image stamps are left to #473.

* Use is_multiple_of for the quarter-turn checks (clippy) (#434)

* Probe the pointer preview away from egui_kittest's drawn cursor (#434)

The kittest render paints a mouse cursor (a 16 px triangle with a black outline) at the
hover point, so the 2 pt probe beside the pointer landed on its outline when zoom and view
rotation made 2 pt only a pixel or two. Put the stroke's block at the picture's right end and
probe there and at its far margin instead.
2026-10-09 09:14:55 -04:00
MarekSpodBiedry 271139bd3b Comments: a new highlight opens its note for typing (#475) (#481)
Adding a highlight selected its card in the Comments panel but left the
note closed; the text field only appeared after double-clicking the card.
Acrobat opens the note for typing as soon as the highlight is made.

apply_edit now opens the inline editor for a new highlight (text drag,
selection then tool, area highlight all pass through it), unless a note
typed into another card is still unsaved, so that text is never dropped.
2026-10-09 09:14:40 -04:00
MarekSpodBiedry ff496918a1 M7: pick a Japanese fallback face that has every glyph of the edited text (#384) (#472)
Replacing text in a serif line (Times New Roman, say) with Cyrillic failed
with "Japanese fallback font has no glyph for U+0444". The Type 3 fallback
took only the style's first face, Shippori Mincho, which has no Cyrillic,
although BIZ UDMincho and BIZ UDPGothic ship alongside it.

`document_japanese_fonts_for_style` lists every Japanese face in the
existing order of preference, and `type3_font` uses the first one that has
a glyph for every character. If none has them all, the preferred face still
names the missing character, as before.
2026-10-09 09:14:04 -04:00
MarekSpodBiedryandBrandon Thomas 2f42c743b9 Issue #157: the Windows portable zip keeps settings, logs and recovery beside pdfcraft.exe (#325)
* Issue #157: the Windows portable zip keeps settings, logs and recovery beside pdfcraft.exe

The portable zip had no portable.txt, and the app had no portable mode: it always wrote %APPDATA%\PdfCraft and %LOCALAPPDATA%\PdfCraft. Now portable.txt (or PdfCraft.portable) beside the executable puts the settings, log files, crash recovery and new digital IDs in PdfCraftData next to it, as PhotoCraft does, and the zip ships portable.txt. An unwritable PdfCraftData falls back to the per-user folders and says so.

* Issue #157: update ATTRIBUTION.toml SHA-256 for the translation catalogs this PR changes

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-08 17:29:59 -04:00