Centre the photo roll on the frame it opens with
The roll brought the open photograph into view by the shortest move, which is right for stepping along it and wrong for the first look: a frame near either end of the loaded window arrived hard against an edge, with nothing on that side to give it any context. It now centres on the first settle of a develop session and steps minimally after that. A one-shot request that the strip itself clears -- the only thing that knows the request has been honoured is the code honouring it -- rather than something recomputed on creation, because the strip is created far more often than a session begins: leaving develop for Settings and coming back rebuilds it, and re-centring then would undo a roll the user had scrolled by hand. Raised on the two ways into develop from the grid, and not on a pick along the roll, which is a step within a session rather than the start of one. Centring is clamped to the ends: the third photograph of a window cannot be centred without scrolling empty space in beside it, and a strip that begins with a gap reads as broken rather than as centred. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -511,6 +511,14 @@ export component AppWindow inherits Window {
|
||||
/// Whether the photo roll is out. Owned here rather than by the roll, so
|
||||
/// it survives the develop view being torn down and rebuilt.
|
||||
in-out property <bool> roll-open: false;
|
||||
/// Centre the roll on the open photograph the next time the strip settles.
|
||||
///
|
||||
/// Raised by Rust when a develop session begins — a photograph opened from
|
||||
/// the grid — and cleared by the strip itself once honoured. Owned here for
|
||||
/// the same reason `roll-open` is: the develop view is rebuilt whenever an
|
||||
/// overlay screen covers it, and a request raised before that must survive
|
||||
/// it. See `PhotoRoll::centre-request`.
|
||||
in-out property <bool> library-roll-centre: false;
|
||||
/// A photograph was chosen from the roll: the row within the loaded
|
||||
/// window, which is what a cell click reports too.
|
||||
callback library-roll-pick(int);
|
||||
@@ -2235,6 +2243,7 @@ in property <bool> panel-visible: true;
|
||||
cells: root.library-cells;
|
||||
current: root.library-roll-current;
|
||||
open <=> root.roll-open;
|
||||
centre-request <=> root.library-roll-centre;
|
||||
pick(i) => { root.library-roll-pick(i); }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user