The similarity slider stepped and showed whole hundredths, and egui applies both
to a typed value too, so 0.995 became 1.00 before photo.analyze saw it. It now
steps by a thousandth and shows two or three decimals: dragging still lands on
round values, and a typed 0.995 is kept.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The burst-gap and similarity sliders still drag over 1 s-10 min and 0.70-0.99, but
their value fields no longer clamp to that: a typed gap of 0 s to a day ("1800",
"30 min", "1 day") and a similarity of 0 to 1.0 are kept and sent to photo.analyze
as typed; values past the API range are held at its limits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Japanese paper-size test exported only the canonical names and then
checked `print.set` with はがき, so the alias-to-MediaBox path was not
covered. Export はがき through `print.exportPdf` as well and read the
same 283.46 × 419.53 pt page as postcard.
Both sides' revision-history rows and change lines are kept (newest first);
print_view.rs auto-merged, so main's shared context_menu call sits beside the
PR's current_paper()/paper_name() punctuation and alias fixes.
# Conflicts:
# ROADMAP.md
# docs/gaps.md
# docs/parity-checklist.md
The paper-name normalisation promised punctuation-insensitive names but
dropped only whitespace, hyphens, underscores and parentheses, so `L判。`
did not resolve; keep letters and digits only instead. The Print dialog
also lower-cased the stored name without resolving it to a canonical
paper, so a paper set through an alias (`はがき`) showed `はがき in` and
selected no option; add `paper_name` and use it for the selector's
current value and option comparison.
Tests: the layout aliases test covers periods and Japanese punctuation,
and the Print view test covers the resolved current paper.
The integration brought #1864: a fresh crop keeps the raw develop
aspect untouched, and the first toggle only records "free" for the
tool (lib.rs interceptor), so reading develop.crop.aspect never
changes on an untouched photo. The lock the row controls is the
effective one - crop_tool_aspect(), which now starts engaged on
"original" - and that is what the test asserts, like main's own
crop_keys. The feature behavior was already right; only the test's
observation point was stale.
1139/1139 ui-egui lib; fmt clean.
crop.lockAspect is declared like any other command (label Lock Aspect Ratio, default A, both keymap profiles) and lists in Help - Keyboard Shortcuts, editable like the rest. The hidden remapping that turned view.visualizeSpots into crop.aspect while the Crop panel was open is gone: the two now share A as a contextual pair - Visualize Spots fires everywhere except under the Crop panel, where the aspect lock takes the key - so A no longer steals the Remove panel from Crop or runs both commands at once (the old remap plus a direct binding would double-toggle). tests_keymap 28/28.
Preserve upstream menu additions and progress documentation while retaining
the focused grid shortcut and native ownership fix. All eight CI gates, five
Windows regressions and native acceptance passed on this exact merged tree.
Co-Authored-By: Codex <noreply@openai.com>
Include effective accelerators in the shared native menu cache key,
with a regression for same-text direct-to-cycle key transfer.
Document the touched menu helpers.
Co-Authored-By: Codex <noreply@openai.com>
The parity row and the What's New heading said one star rating 'everywhere', but the
Set Rating / Select By Rating menu rows and the grid context menu are separate menu
items with star text and are unchanged. Name the real scope.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The star row is a single Tab stop (the current rating's star, or the first) with the arrow keys
stepping inside it and the focus following. favorite_button registers its automation id only while
on screen again. The module and test docs no longer mention a size/read-only API that doesn't exist.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
egui picks the neighbour to focus from the arrow key in begin_pass,
before a widget can set a focus lock for the frame it just gained
focus (set_focus_lock_filter needs a frame of focus first). A focused
star that consumes an arrow now cancels that pending focus move. The
favourite toggle is one interact-height line square again, so Manage
Effect Presets rows keep their height.
Co-Authored-By: Claude <noreply@anthropic.com>
Left/right moved egui focus to the neighbouring widget after one or
two steps. A focused star now locks horizontal arrows (as the slider
does) and draws the accent focus ring. Rating drops the options no
caller uses (size, read_only, enabled). The mask-effect favourite
stars use paint_star and a shared favorite_button instead of a raw
egui::Button and a "★" glyph.
Co-Authored-By: Claude <noreply@anthropic.com>
The bottom bar, the Info panel and the filter bar each drew their own
row of stars, and the grid badge, filmstrip badges and compare caption
had private painter loops. They now share rating::Rating (a clickable
row: hover previews, clicking the current rating clears it, read-only
and disabled states, left/right arrows on a focused star) and
rating::paint_rating / paint_star for painter-only contexts.
Existing automation ids (star:bottom:n, star:info:n, filter:starN) are
unchanged. The preset, profile and theme favourite stars use
paint_star too, so Icon::Star lives only in rating.rs.
Co-Authored-By: Claude <noreply@anthropic.com>
A failed thumbnail in the detail view's filmstrip is announced with the
file name and "This photo can't be opened" (the painted ! had no name).
The skeleton placeholder is set further off the surfaces in Silver and
Paper (1.3 / 1.2 : 1 on the grid before, about 1.7 / 1.6 after) and the
test floor for the light themes is 1.15. The print preview's empty and
loading cells go back to fixed greys: its page is paper in every theme.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model-row bars keep Cancel in its place, a busy button stays focusable
and draws its spinner only when visible, the skeleton colour stands
apart from selected cells too, the filmstrip shows the failed-thumbnail
mark, and more placeholders and waits use the skeleton token and the
spinner.
Co-Authored-By: Claude <noreply@anthropic.com>
Install from file… (denoise) shows busy while the model installs, and
the describe-mask Select button while the AI works.
Co-Authored-By: Claude <noreply@anthropic.com>