N7 — The develop column docks under the photograph on a tall window #51

Open
opened 2026-09-06 08:11:11 +00:00 by dtourolle · 2 comments
Owner

On a tall window the develop column moves from beside the photograph to under it. The rail stays on the left, the column keeps its contents, its collapse and its toggle, and the layout class is untouched. Decision D-N7 in docs/ui-navigation.md.

Why

On the tablet's 25:16 panel in portrait, the column beside the canvas leaves a 3:2 photograph 540 × 360. Under it, the same photograph gets 900 × 600. The portrait frame gains too (1.4× the area), so this is not a landscape-only trade.

Deliverable, three parts

The flag. window-resized in app.slint reports height as well as width. apply_layout_class derives a third property, column-below, from the aspect with hysteresis (enter above about 1.25, leave below about 1.15 — the point is that a window resized across square does not flap) and sets it beside layout-class and panel-max-width. It is not a layout class and PanelChoices does not learn about it.

The frame. The HorizontalLayout holding ToolRail, canvas-area and develop-column becomes a Rectangle; each child takes x, y, width and height from the flag. Rail full height on the left in both cases. With the flag off the geometry is what the layout produced, to the pixel. With it on, the column is dock-height tall and runs from the rail's edge to the window's; the canvas has what is left above. panel-visible collapses the dock to zero height as it collapses the column to zero width. Do not duplicate the column subtree under two ifs — see the binding-loop notes in the file.

The contents, as a stopgap. The stack stretches to the dock's width: the Flickable's viewport width follows the dock. Nothing is reflowed; N9 does that.

dock-height goes in ui/dr-ui/style.yaml beside panel-width, 480 until N6 says otherwise, read as Theme.dock-height.

Acceptance

  • On the tablet in portrait, a 3:2 photograph is drawn at the canvas's width, not at the width the old column left it
  • Turning the tablet moves the column back beside the canvas with the same scroll position and the same panels open
  • A desktop window dragged taller than it is wide does the same
  • A before/after screenshot diff in landscape is empty
  • The filmstrip still takes its strip off the bottom of the photograph, above the dock

Spec: docs/ui-navigation.md D-N7 and N7. Screenshots need XWayland on this machine.

**On a tall window the develop column moves from beside the photograph to under it.** The rail stays on the left, the column keeps its contents, its collapse and its toggle, and the layout class is untouched. Decision D-N7 in `docs/ui-navigation.md`. ## Why On the tablet's 25:16 panel in portrait, the column beside the canvas leaves a 3:2 photograph 540 × 360. Under it, the same photograph gets 900 × 600. The portrait frame gains too (1.4× the area), so this is not a landscape-only trade. ## Deliverable, three parts **The flag.** `window-resized` in `app.slint` reports height as well as width. `apply_layout_class` derives a third property, `column-below`, from the aspect with hysteresis (enter above about 1.25, leave below about 1.15 — the point is that a window resized across square does not flap) and sets it beside `layout-class` and `panel-max-width`. It is not a layout class and `PanelChoices` does not learn about it. **The frame.** The `HorizontalLayout` holding `ToolRail`, `canvas-area` and `develop-column` becomes a `Rectangle`; each child takes `x`, `y`, `width` and `height` from the flag. Rail full height on the left in both cases. With the flag off the geometry is what the layout produced, to the pixel. With it on, the column is `dock-height` tall and runs from the rail's edge to the window's; the canvas has what is left above. `panel-visible` collapses the dock to zero height as it collapses the column to zero width. Do not duplicate the column subtree under two `if`s — see the binding-loop notes in the file. **The contents, as a stopgap.** The stack stretches to the dock's width: the Flickable's viewport width follows the dock. Nothing is reflowed; N9 does that. `dock-height` goes in `ui/dr-ui/style.yaml` beside `panel-width`, 480 until N6 says otherwise, read as `Theme.dock-height`. ## Acceptance - [ ] On the tablet in portrait, a 3:2 photograph is drawn at the canvas's width, not at the width the old column left it - [ ] Turning the tablet moves the column back beside the canvas with the same scroll position and the same panels open - [ ] A desktop window dragged taller than it is wide does the same - [ ] A before/after screenshot diff in landscape is empty - [ ] The filmstrip still takes its strip off the bottom of the photograph, above the dock Spec: `docs/ui-navigation.md` D-N7 and N7. Screenshots need XWayland on this machine.
dtourolle added the developergonomicsuisize:M labels 2026-09-06 08:11:11 +00:00
dtourolle added a new dependency 2026-09-06 08:11:27 +00:00
Author
Owner

Implemented on branch dev/portrait-dock (commits 0e06538, 04d8090), merged into integrate/portrait-dock. Aspect flag with hysteresis (enter 1.25, leave 1.15) set from Rust; the frame is a Rectangle with the rail, canvas and column placed by coordinate; dock-height 480 in style.yaml. Verified on the merged branch: 639 dr-ui tests pass, clippy clean, and screenshots at 1500x720, 950x950 and 850x1131 logical show the column beside, beside and docked respectively, landscape unchanged. Not yet checked on the tablet.

Implemented on branch `dev/portrait-dock` (commits 0e06538, 04d8090), merged into `integrate/portrait-dock`. Aspect flag with hysteresis (enter 1.25, leave 1.15) set from Rust; the frame is a Rectangle with the rail, canvas and column placed by coordinate; `dock-height` 480 in style.yaml. Verified on the merged branch: 639 dr-ui tests pass, clippy clean, and screenshots at 1500x720, 950x950 and 850x1131 logical show the column beside, beside and docked respectively, landscape unchanged. Not yet checked on the tablet.
Author
Owner

Landed on master as 5f0b11c and dd14243 (rebased copies of 0e06538 / 04d8090), with D-N7 in de32c04: column_below with 1.25/1.15 hysteresis and tests in lib.rs, the coordinate frame in app.slint, dock-height in style.yaml. Verified on desktop at three sizes. The tablet check depends on the measurement in #50 and is tracked there.

Landed on master as 5f0b11c and dd14243 (rebased copies of 0e06538 / 04d8090), with D-N7 in de32c04: `column_below` with 1.25/1.15 hysteresis and tests in `lib.rs`, the coordinate frame in `app.slint`, `dock-height` in `style.yaml`. Verified on desktop at three sizes. The tablet check depends on the measurement in #50 and is tracked there.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: dtourolle/DarkRoom#51