v0.7.1 — Layout orientation fix
Scene V0.7.1 is a bug-fix release: vertically asymmetric layouts no longer apply upside down, and resizing windows placed by a canvas-built custom layout no longer scrambles the arrangement.
What's new
Nothing new — this is a pure fix release. Skip to the fixes.
Fixes
- Vertically asymmetric layouts no longer apply mirrored. The layout editor, the thumbnails, and the built-in templates all describe slots with y measured from the top of the screen, but the step that converts those slots into real window frames measured y from the bottom. Any layout whose top half differed from its bottom half therefore applied vertically flipped: a custom "2 slots on top, 3 on bottom" landed as 3-top/2-bottom, Main + Side (Vertical) put the main window at the bottom, and the L-shape variants swapped. The symmetric presets (Halves/Thirds Vertical) hid the bug — a 5-slot custom layout exposed it. The conversion now flips the y-axis exactly once, and the seam-drag math flips its inverse mapping to match, so what you draw is what you get.
- Seam-resize no longer scrambles tree-based custom layouts. Custom layouts built in the canvas editor carry leftover template metadata from whatever they were duplicated from. The companion-resize (seam drag) feature read that stale metadata and could shove other windows to positions belonging to a completely different layout — which windows moved depended on which window happened to echo a resize event, so it looked random. Canvas-built layouts now resize freely (no companion reflow); template layouts keep the companion-resize behavior.
Why this matters
Custom layouts are only useful if the screen ends up looking like the editor. Before this fix every vertically asymmetric arrangement silently mirrored, and terminal-heavy custom layouts could rearrange themselves mid-drag. Both failure modes are gone, pinned by regression tests.
Under the hood
- SceneCore: unit slot rects are canonically top-left origin;
Slot.absoluteRect(in:)performs the single top-left→bottom-left flip at materialization (mirroring the single NS→AX flip at the write boundary).LayoutReflowflips its NS→unit inverse and swaps the row templates' seam-edge mapping. The Coordinator's seam-resize context provider returns no context for tree-based layouts. Tests: 363/363 (6 new, including the exact reported 5-slot scenario). - Universal binary (arm64 + x86_64), macOS 14+, Apple notarized.
Install
Download Scene-0.7.1.dmg below or via brew install --cask chifunghillmanchan/tap/scene. Drag Scene.app to /Applications, then follow docs/INSTALL.md for the one-time Accessibility-permission step.
Upgrade notes
V0.5.6+ users: click Update available in the menu bar and Scene swaps itself for the new bundle and relaunches; Accessibility permission survives the swap. One heads-up: if you had rebuilt a layout upside down to compensate for the old mirrored behavior, re-edit it once after updating — layouts now apply exactly as drawn in the editor.