Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion MOTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ The new projection keeps the top and bottom edges at their original height. Its

Three cached Gaussian blur levels at nominal widths of 6, 16, and 36 pixels per 786-pixel reference width provide continuous progressive blur. Blur strength varies with closure and fades toward the lower tenth of the desktop. Subtle top-corner shading and side feathering complete the single effect. The side gaps are filled with the nearest desktop edge, stretched from a broad blur of the reduced frame, or with black, as chosen in Settings. The fill and the desktop are blurred as one surface: every blur level is computed from a composite that places the fill in a side margin around the reduced frame, so blurred content spreads across the fold's edge toward the top while the lower edge stays sharp. Each captured frame adds one scale and one copy into that composite. The blurred fill also runs a quarter-size broad blur and one stretch; the black fill clears the margin instead. On an M1 Max the blurred fill's chain measured about 0.2 ms per captured frame, up from 0.11 ms. An inverse projection in the fragment shader preserves the fold geometry while covering the full overlay.

The effect covers the built-in screen's full display frame, including the menu bar and Dock. A non-activating panel joins fullscreen Spaces without taking keyboard focus. Space changes keep the same capture area and bring the panel back to the front.
Capture is limited to 1.6 samples per point rather than to a fixed pixel width, with a 2800 pixel guard rail above it. A fixed width gave a larger built-in display a softer fold than a smaller one, because the same pixels were spread over more points: a 1728 point display resolved 1.39 samples per point where a 1512 point display resolved 1.59. Expressing the limit as a ratio makes sharpness the same on every built-in display, and leaves the smaller one unchanged in practice because 1.6 is where its old limit already landed. The effect covers the built-in screen's full display frame, including the menu bar and Dock. A non-activating panel joins fullscreen Spaces without taking keyboard focus. Space changes keep the same capture area and bring the panel back to the front.

## Motion timing

Expand Down
2 changes: 1 addition & 1 deletion Sources/LiveDesktop.swift
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ final class LiveDesktop: NSObject, ObservableObject {
configuration.sourceRect = CGRect(
x: area.minX - screen.frame.minX, y: screen.frame.maxY - area.maxY, width: area.width,
height: area.height)
let scale = min(screen.backingScaleFactor, 2400 / area.width)
let scale = min(screen.backingScaleFactor, 2800 / area.width, 1.6)
configuration.width = Int(area.width * scale) / 2 * 2
configuration.height = Int(area.height * scale) / 2 * 2
configuration.minimumFrameInterval = CMTime(value: 1, timescale: 60)
Expand Down