Skip to content

v0.7.1 — Layout orientation fix

Choose a tag to compare

@ChiFungHillmanChan ChiFungHillmanChan released this 10 Jul 01:25

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). LayoutReflow flips 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.