Fix vertical offset when capturing the secondary display

The first ScreenCaptureKit Y-flip used the wrong reference edges, shifting
cropped selections on displays below the main screen. Convert each selection
per-display as scY = appKitY - NSScreen.maxY + SCDisplay.maxY, which
matches both the main and secondary displays.

💘 Generated with Crush

Assisted-by: Crush:deepseek-v4-flash-0731
This commit is contained in:
2026-08-12 16:51:18 +08:00
parent 590be2356f
commit 3fdc2fca95
2 changed files with 6 additions and 6 deletions
+4 -4
View File
@@ -180,12 +180,12 @@ final class ScreenCapture {
config.height = Int(CGFloat(display.height) * backingScale)
config.showsCursor = true
// ScreenCaptureKit's Y axis is flipped relative to AppKit
// NSScreen frames. Convert the selection into SCDisplay space
// using the matching NSScreen's top edge, then crop there.
// ScreenCaptureKit uses a different origin than AppKit for
// screens stacked around the main display: per-display,
// SCDisplay y = appKitY - NSScreen.maxY + SCDisplay.maxY.
let scRect = CGRect(
x: rect.minX,
y: screen.frame.maxY - rect.maxY + display.frame.minY,
y: rect.minY - screen.frame.maxY + display.frame.maxY,
width: rect.width,
height: rect.height
)