count.deleteGroup kept the same index current after deleting the
current group, so with three groups and the second current the third
became current. The first remaining group now becomes current, as the
reference application does. Deleting another group by index still keeps
the current one (#5654), and deleting the last group still leaves none.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BrushSettings::default() turned Pressure for Size on, so a fresh brush -
and the brush Reset Tool hands back, which is that default plus
Photoshop's 10 % smoothing - reported pressureSize: true from brush.get
and drew the options bar's "Always use pressure for size" button
highlighted, while the reference application leaves both pressure
toggles off after Reset Tool. Neither is on now.
The toggle itself is untouched: it still switches both ways, Shape
Dynamics' Pen Pressure control is unaffected, and path.stroke's Simulate
Pressure still tapers a brush that follows pen pressure. A brush JSON
that omits pressureSize now reads as off, as the reference's default is.
Two engine tests took their expectation from the old default and set
pressureSize explicitly instead: cmd::brush_cmds::tests::stroke_backwards_compatible
and cmd::vector_cmds::tests::stroke_path_simulate_pressure_tapers_both_ends.
The new crates/engine/src/brush_pressure_size_default_tests.rs covers the
default, brush.get on a fresh session, an omitted field, switching the
toggle, and that a pressure ramp with the default brush paints like
pressureSize: false.
Fixes#11809
With the Note tool and a note selected, Delete and Backspace went the
usual way and deleted the active layer, leaving the note. They now ask
"Delete this note?" (Yes / No, "Don't show again"); Yes deletes the note
as one "Delete Note" step and selects nothing, No changes nothing. The
Notes panel's trash asks the same, and "Don't show again" skips the
question for both.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The merge of main into #10730 dropped the first line of the comment above the
filter-preview check in confirm_generic_command; it is back. The Batch test now
compares out/b.png with the hand-typed reference as well as out/a.png, so a
replay that stops after the first file fails it (review on #10730).
Co-Authored-By: Lcoding15 <Lcoding15@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove the Azerbaijani menu coverage test (red on main), the crop Fill
label coverage test and the has() loop in the pen path Esc test. A
missing string falls back to English; cargo xtask i18n-coverage lists
the gaps. docs/contributing.md now says tests never require a string to
be translated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Window menu item from #11669 and the Azerbaijani catalog landed
together, so azerbaijani_covers_every_menu_label_and_path fails on main.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The issue leaves a right-click during an ⌥-drag unmeasured, so it keeps
today's behaviour. `magnetic_drawing` held that menu back too; it now
skips a freehand segment.
#11005's new head adds path.toShape to the vector-path list next to
path.stroke; the batch's 95c7a5d17e had added it next to path.set. Both
merged cleanly into a duplicate or-pattern; keep the contributor's.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The issue lists the files this item may touch and leaves the parity docs
to its epic. The right-click check moves from magnetic_lasso_ui.rs to
canvas_tool_menu.rs as magnetic_drawing, where the issue allows it, with
the same document check. magnetic_lasso_ui.rs and
docs/context-menu-parity.md are back as on main.
The bar draws inside the canvas pass, whose write-back of its own camera
dropped the fit that commit_crop asks for, so Done kept the old zoom. The
stored view now wins when the bar changed it, as a view menu row's does.
done_fits_the_cropped_document starts at 50 % and fails without the fix.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The right-click check asked only whether a border existed. Over the
control channel no frame runs between events, so a border left on one
document stayed in place after a switch and kept the selection menu
from opening on the next. The check, now magnetic_lasso_ui::drawing,
also asks that the border belongs to the document in front, the same
test frame() uses to drop a stale border. The canvas, the control
channel and frame() share it.
agent_right_click_on_another_document_still_opens_the_selection_menu
fails without this change. The context-menu parity doc records the
behaviour.
* fix(export): preserve full JPEG chroma in Export As
* style(ui): simplify blend preview condition for Clippy
* test(export): verify full JPEG chroma at every quality
Exercise real JPEG export and decode at five qualities across U8, U16 and F32. Read all sampling factors from the main frame while skipping metadata segments and embedded thumbnails. Keep the colour-error limit at quality 100 and verify that the layered source is unchanged.
* Keep JPEG regression compatible with current Clippy
Restore the upstream blend-preview and IME predicates, removing unrelated lint-only changes. Use array chunks in the JPEG colour-error assertion for current stable Clippy.
* Use quality-dependent JPEG sampling in Export As
Keep 4:2:0 through quality 50 and full 4:4:4 above it, using the existing percentage-scale cutoff from Save for Web. Photoshop 27.11 modern Export As measurements show 4:2:0 at levels 1-4 and 4:4:4 at 5-7; no exact numerical mapping of the two scales is claimed.
Exercise both sampling regimes through 15 real JPEG exports across U8/U16/F32, check all percentage qualities in settings, and retain the Save As default. Boundary mutations fail at 50 and 51 as expected.
The automation registry check takes a `path` parameter for a host file
unless the command is listed as taking a document vector path, as the
other path commands are. path.toShape's `path` is the inline path being
drawn, so it belongs in that list; integration batch #11643 failed on it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EZbgszHyuEuWAzxaamteuU
Unit tests no longer read PHOTOCRAFT_UI_DIRECTION (cached per process, so a
developer's shell could flip the Hebrew/Urdu and shell assertions). The
Hebrew/Urdu test checks glyphs only when craft-fonts carries a face for the
script (the eager provider draws it in the first frame, as in CI with
CRAFT_FONTS_REQUIRED); without it the harness allows tofu and only the
mirroring is checked, instead of panicking on a host without the fonts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Doc only: the getter's comment now says, as the field's does, that a direct write to DocState::active_layer through active_mut() bypasses the change marker.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
With a Magnetic Lasso border in progress, a right-click on the canvas
opened the selection tools' menu over the live border, in the window and
over the control channel. As in Photoshop, it now opens nothing and the
border stays live: Enter or Esc still close or cancel it. With no border
in progress the menu opens as before. Cmd/Ctrl+right-click (the layer
list) is unchanged, since it was not measured.
Tests in crates/ui-egui/tests/it/magnetic_lasso_right_click.rs drive
both paths; the two "while drawing" tests fail without the fix.
Session::active_layer_changes now documents its contract: it advances at least once whenever the active document or layer changes, so callers compare two readings for equality. A file.new or a document close may advance it twice (add_document and execute both note it); removing that is not a one-liner, so the wording covers it. Adds a test that file.new advances the marker and a same-layer select_layer does not.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Draw the Crop task bar only on the active document's tile: a click into
another tile activates its document mid-pass, and the tile drawn after it
put the new frame's bar on itself for that frame.
- ui.inspect reports the bar hidden (and no rect) as soon as it can't show,
not only after the next draw.
- ui.set merges panels.task_bar field by field: {"at": [x, y]} keeps a pin,
{"pinned": true} keeps a dragged place; unknown nested fields are refused.
- Tests for each (each fails with its fix reverted), plus the task bar's
preset dropdown picking 1 : 1 in sync with the options bar.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>