Commit Graph
12319 Commits
Author SHA1 Message Date
Dylan M. Taylor 5a935b2830 Place: refuse a scale that makes the placed image exceed the render pixel limit (#11229)
* Place: refuse a scale that makes the placed image exceed the render pixel limit

* address review: bound the rounded-up resampled size when placing at a scale

* address review: the oversized-scale error names the placing command
2026-11-11 16:23:05 -05:00
Dylan M. Taylor f6741eff4d macOS signing: decode the certificate into an exclusive temp file (#11028)
import-cert.sh wrote the decoded .p12 to a fixed name in the temp
directory. If another account had created that file first, the shell
redirection truncated and reused it, keeping its owner and mode, and the
signing key was readable to that account. Create it with mktemp.
2026-11-11 16:22:40 -05:00
Dylan M. Taylor 23c2b85a4f ci: use StepSecurity's maintained actions (#13337)
Each third-party action that StepSecurity publishes a secure drop-in
replacement for now uses that replacement, pinned to a commit with its
version as a comment. Versions follow what we used: the newest
StepSecurity release in the same major, or the closest major they
publish. dtolnay/rust-toolchain refs that named a toolchain (stable,
nightly, 1.76) become the replacement's `toolchain` input.
2026-11-11 16:02:46 -05:00
David Mann 63b641b55e Merge pull request #6413 from marmitoTH/fix/pen-undo-resumes-path
Pen: Undo after finishing a path gives it back to the Pen instead of deleting it (#6619)
2026-11-11 21:15:51 +01:00
David Mann 0549be857e Merge pull request #13171 from rmsff/fix/remove-locked-layer-alert-12552
Remove: alert on a pixel layer with Lock All
2026-11-11 21:08:34 +01:00
FredAppsandFredApps 8a909b2673 Release: PhotoCraft v0.23.0 on main (#13345)
Co-authored-by: FredApps <FredApps@users.noreply.github.com>
2026-11-11 20:54:32 +01:00
David Mann 1247303e78 Merge pull request #13151 from rmsff/fix/remove-default-size-12548
Remove tool: 19 px brush after Reset Tool and on first use
2026-11-11 20:29:21 +01:00
David Mann c1b22bdaae Merge pull request #13217 from RickiNano/fix/13067-ruler-angle-f64
fix(ui): the Arbitrary angle rounds in f64 and keeps that value (#13067)
2026-11-11 20:22:26 +01:00
David Mann 5a7889d2f7 Merge pull request #13212 from RickiNano/fix/sampler-drag-cursor-13063
fix(ui): keep the Color Sampler cursor while a sampler is dragged (#13063)
2026-11-11 20:18:23 +01:00
rmsff c3de649306 Test the Remove tool's Lock All alert 2026-11-11 22:01:51 +03:00
rmsff f9632298f6 Remove: alert on a pixel layer with Lock All (#12552)
A Remove press on a pixel layer with Lock All opens the reference
application's modal alert "Can't use the tool because the layer is
locked." at once, instead of drawing the stroke and failing in the job.
A hidden target, a group, a type, shape, Smart Object or fill layer
keep today's behaviour (not measured), and the Brush's wording is
unchanged.
2026-11-11 22:01:40 +03:00
8ca9cf51d6 Pen resume (#6413): Step Backward/Forward, per-document Redo, redrawn drafts, Esc fallback
Fix-ups for the open review threads on #6413, after merging main:

- Edit > Step Backward / Step Forward and the History panel's items now
  step a Pen path the way Undo and Redo do (anchor by anchor, then the
  finish), through one shared hook, pen_history_step, and its enable rule.
- Finishing a path in one document no longer drops another document's
  record of a path that Undo gave back, so Redo then Undo there gives
  the path back again instead of deleting it.
- Redo no longer takes the same anchors redrawn in another mode (Shape
  instead of Path) for the draft that Undo gave back: the target counts.
- A draft the document refuses, which Esc keeps as the Work Path, is
  recorded too, so Undo gives it back to the Pen.
- Main's Enter now deselects the finished Work Path (#12892), so the
  tests that build up or carry on the Work Path end their paths with Esc.

Co-Authored-By: marmitoTH <marmitoTH@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 19:58:23 +01:00
David Mann a89998e1ae Merge origin/main into fix/pen-undo-resumes-path (#6413) 2026-11-11 19:58:14 +01:00
David Mann 78e478adda Merge pull request #13278 from rmsff/feat/red-eye-canvas-menu-12577
Red Eye: canvas right-click opens the layer or selection menu
2026-11-11 19:57:11 +01:00
RickiNano 6513ce6e47 fix(ui): round the ruler's Arbitrary angle before the first frame (#13067)
The ruler pre-fill stored the raw straightening angle, and only a drawn
frame rounded it, so `ui.dialog.open` then `ui.dialog.confirm` with no
frame between them sent 32.1249984 instead of 32.12. Round it in f64 to
the field's two decimals where it is filled, on open and on Alt+Reset.
2026-11-11 19:36:48 +01:00
David Mann 7f148de825 Merge pull request #13150 from TrevorBrown-dev/feat/delete-anchor-live-shape-warning-12768
Delete Anchor Point: deleting a live shape's anchor asks first, with Don't show again (#12768)
2026-11-11 19:35:07 +01:00
David Mann f69cb2056e Merge pull request #13153 from rmsff/fix/clone-stamp-no-source-alert-12609
Clone Stamp: a press without a source point shows the reference's alert
2026-11-11 19:18:28 +01:00
David Mann 66d602933a Merge pull request #13264 from rmsff/fix/pen-mode-menu-entries-12906
Pen: Mode dropdown lists Shape, Path and a greyed Pixels
2026-11-11 19:18:14 +01:00
David Mann 0b6eb314c9 Merge pull request #13107 from rmsff/fix/warp-options-bar-details-12503
Warp: one-decimal Bend/H/V, shared commit and cancel tooltips, greyed reference point
2026-11-11 19:12:25 +01:00
David Mann a1a639c582 Merge pull request #13206 from davidmann4/docs/no-pr-screenshots-in-repo
Docs: before/after screenshots go in the PR description, not the repo
2026-11-11 19:08:11 +01:00
David Mann 5fb1dadc13 Merge pull request #13122 from rmsff/fix/convert-point-hit-tolerance-12748
Convert Point: hit an anchor within 5 points
2026-11-11 19:04:23 +01:00
Dylan M. Taylor 2be1d6e19d Merge pull request #13281 from storytold/chore/craft-update-6e03f65
Updates: take craft-update from craft-libs main at 6e03f65bf
2026-11-11 12:53:06 -05:00
Dylan M. Taylor 8452ec9bde Updates: take craft-update from craft-libs main at 6e03f65bf 2026-11-11 12:53:01 -05:00
David Mann 7ebaea05b6 Merge pull request #11577 from yoriswind/codex/actions-format-io-followup
Bound file read growth and publish files without replacement
2026-11-11 18:49:04 +01:00
David Mann 62748dfede Merge pull request #13116 from rmsff/fix/paint-bucket-refuses-bitmap-12536
Paint Bucket: refuse Bitmap documents with the reference's alert
2026-11-11 18:48:50 +01:00
David Mann 3678b35733 Merge pull request #10738 from Lcoding15/fix/decimal-comma-in-fields
Number fields take a decimal comma (#10729)
2026-11-11 18:47:21 +01:00
rmsff b04a707014 Test the Red Eye canvas menu 2026-11-11 20:23:03 +03:00
rmsff f174a72a35 Red Eye: canvas right-click opens the layer or selection menu
As measured in the reference application on a one-layer RGB document:
the layer menu with no selection, the selection menu with the pointer
inside it. The cases not measured keep opening nothing.
2026-11-11 20:23:03 +03:00
David Mann 249b4addde Merge branch 'main' into docs/no-pr-screenshots-in-repo 2026-11-11 18:15:01 +01:00
Dylan M. Taylor e119384a83 ci: run Harden-Runner on every job (#13255)
Adds step-security/harden-runner (audit, pinned to v2.22.4 like
craft-common-actions) as the first step of each job that did not have it,
so every workflow in the org's public repos reports its egress to
StepSecurity. Audit, not block: block-mode allow lists come from each
job's observed traffic.
2026-11-11 12:12:50 -05:00
FredApps 0277194a7d Merge pull request #12948 from wanikhawar/fix/doc-window-dialog-tool-12896
Keep document window canvases inert under a modal dialog
2026-11-11 18:11:21 +01:00
Gabriel Heuser 0143b14844 fix(ui): use vector path icon for shape layers in Properties (#10787)
* fix(ui): use vector path icon for shape layers in Properties

* test(ui): verify rendered shape Properties icon size

* test(ui): verify rendered shape icon identity

* test(ui): verify painted icons for all layer kinds

* test(ui): pin expected Properties icons for all layer kinds

* fix(ui): align shape icon size and document attribution

* ci: rerun checks

* Enhance tests for shape icon transparency

Added assertion to check for nontransparent pixels in shape icons.

* Enhance tests for shape icon rasterization

Add tests for shape icon rasterization and anchor visibility.

* Add tests for shape properties and header icons

Added tests for shape properties and header icons.

* Fix attribution for Lucide icons in ATTRIBUTION.md
2026-11-11 12:04:48 -05:00
rmsff 860f6eb215 Test the Clone Stamp's no-source alert 2026-11-11 20:01:07 +03:00
rmsff ddf039917a Clone Stamp: a press without a source point shows the reference's alert
The Clone Stamp set a status-bar line when no source point was defined. It now opens the
reference application's alert at the press ("Could not use the clone stamp tool because the
area to clone has not been defined (Alt-click to define a source point)."), once while it is up,
and starts no drag. The Healing Brush keeps its status line.
2026-11-11 20:01:07 +03:00
RickiNano eb72557baa test(ui): check the sampler drag cursor with pipette_shown (#13063)
#13199 made the eyedropper tests accept the native pipette bitmap; the
new drag test now uses the same helper for the placement eyedropper.
2026-11-11 17:49:30 +01:00
RickiNano 6ce3fa768e Merge remote-tracking branch 'origin/main' into fix/sampler-drag-cursor-13063 2026-11-11 17:39:57 +01:00
Trevor Brown 4383db75a4 Merge remote-tracking branch 'upstream/main' into feat/delete-anchor-live-shape-warning-12768 2026-11-11 11:39:35 -05:00
rmsff 2fbf26567d Test the Pen's mode dropdown entries (#12906) 2026-11-11 19:27:43 +03:00
rmsff 5f85309479 Pen mode dropdown: Shape, Path and a greyed Pixels
The Pen lists its modes as the reference application does: Shape, Path,
Pixels, with Pixels greyed. The Freeform and Curvature Pens keep Path,
Shape. A new dropdown_enabled greys entries without the wheel stepping
that dropdown_wheel_grouped_enabled adds, and keeps the value when the
arrow keys or type-ahead land on a greyed entry.
2026-11-11 19:27:43 +03:00
d4f570a6bf Name leftover staging files and keep staging exhaustion distinct (PR #11577 review)
Running out of staging names returned AlreadyExists, which the
PublishNewError docs tell callers to read as "destination taken, pick
another name". It is now a plain error. When the staging cleanup retry
fails too, the error names the leftover staging file. rename_noreplace
documents that it renames files only.

Co-Authored-By: yoriswind <yoriswind@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:04:27 +01:00
David Mann 5585ad6407 Merge remote-tracking branch 'origin/main' into pr-11577 2026-11-11 17:01:34 +01:00
Trevor BrownandClaude Opus 5.5 a709ac2ef5 Live-shape question: refused once the document changed under it (#12768)
The question also stores the document's revision: an edit while it is
open (an anchor added through the control channel, the question being
modal on screen) shifts the stored knot index, so Yes is refused rather
than deleting another anchor. Test: yes_after_the_path_changed_deletes_nothing
(red before: Yes deleted an anchor of the edited path).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 10:51:13 -05:00
RickiNano 7350c8239c fix(ui): the Arbitrary angle rounds in f64 and keeps that value (#13067)
A wide field that shows two decimals (Image Rotation > Arbitrary's Angle)
now rounds its stored value while it is still f64, before the widget
narrows it to f32. A 43x27 ruler's 32.1249984 degrees narrowed to exactly
32.125 and the first frame after opening or Alt+Reset drew 32.13 over the
32.12 the dialog kept. The rounded value is also stored as f64, so OK
sends exactly 32.12 rather than the 32.1199989 an f32 widens to.
2026-11-11 16:48:00 +01:00
David Mann 18e5a72cba Merge main into #10738 (picks up the Liquify Alt-twirl test fix, #12712) 2026-11-11 16:43:58 +01:00
David Mann d0299c4179 Merge pull request #13199 from davidmann4/fix/main-red-windows-pipette-cursor
Fix main: eyedropper cursor tests accept the native pipette bitmap (#12523)
2026-11-11 16:42:20 +01:00
David MannandClaude Opus 5.5 0d9a9a5a70 Docs: the screenshot rule allows a doc's own before/after comparison
CodeRabbit on #13206: docs/multi-channel-editing.md displays before/after
comparisons, which the rule keeps; it targets screenshots that only show a
PR's change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:41:05 +01:00
RickiNano 85d81b372d fix(ui): keep the Color Sampler cursor while a sampler is dragged (#13063)
A sampler drag leaves the stored point where it was until release, but the
canvas cursor hit-tested the stored points. Once the pointer left the 7 px
tolerance mid-drag, the cursor switched to the placement eyedropper. While
Drag::Sampler is active the cursor now stays the arrow with the sampler
target, and Alt shows no scissors: Alt removes only on the press.
2026-11-11 16:39:22 +01:00
David MannandClaude Opus 5.5 0cc411241b Docs: before/after screenshots go in the PR description, not the repo
AGENTS.md rule 6 and docs/images/SOURCES.md now say docs/images holds only
images the README or a doc displays. Removes the nine PR before/after
captures nothing references (gradient-overlay-method, guide-position,
native-pipette-macos, preferences-apply; 1.9 MB) and their ATTRIBUTION.md
rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:28:16 +01:00
Trevor BrownandClaude Opus 5.5 f1e5a09f0b Merge upstream main into feat/delete-anchor-live-shape-warning-12768
The only conflict: main made the targeted-path tests' setup pub(crate)
(Convert Point's tests use it); this branch splits it into setup (the
live-shape question dismissed) and setup_asking. Both kept, with main's
visibility.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 10:11:14 -05:00
David MannandClaude Opus 5.5 79a33dae9c Fix main: eyedropper cursor tests accept the native pipette bitmap (#12523)
#12523 shows the pipette as an OS cursor bitmap on native root viewports,
where the output is the visible-fallback Crosshair plus the bitmap, not the
drawn pipette's CursorIcon::None. Tests from #12145 and #12301 still looked
for the drawn pipette and failed on Windows unit.

tool_cursor::pipette_shown checks for the pipette either way (the exact
bitmap natively, the drawn one elsewhere), and the sampler, caps lock and
mixer cursor tests use it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:08:09 +01:00