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.height = Int(CGFloat(display.height) * backingScale)
config.showsCursor = true config.showsCursor = true
// ScreenCaptureKit's Y axis is flipped relative to AppKit // ScreenCaptureKit uses a different origin than AppKit for
// NSScreen frames. Convert the selection into SCDisplay space // screens stacked around the main display: per-display,
// using the matching NSScreen's top edge, then crop there. // SCDisplay y = appKitY - NSScreen.maxY + SCDisplay.maxY.
let scRect = CGRect( let scRect = CGRect(
x: rect.minX, x: rect.minX,
y: screen.frame.maxY - rect.maxY + display.frame.minY, y: rect.minY - screen.frame.maxY + display.frame.maxY,
width: rect.width, width: rect.width,
height: rect.height height: rect.height
) )
+2 -2
View File
@@ -108,9 +108,9 @@ cat > "$APP/Contents/Info.plist" <<'PLIST'
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string>Icon</string> <string>Icon</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.1.7</string> <string>1.1.8</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>17</string> <string>18</string>
<key>LSUIElement</key> <key>LSUIElement</key>
<true/> <true/>
<key>NSHighResolutionCapable</key> <key>NSHighResolutionCapable</key>