From ef30afcf0b1596daa4744721c0245095f0ea089d Mon Sep 17 00:00:00 2001 From: enricobuehler Date: Mon, 15 Jun 2026 23:57:06 +0200 Subject: [PATCH] =?UTF-8?q?fix(apple):=20fill=20the=20notch=20in=20macOS?= =?UTF-8?q?=20fullscreen=20=E2=80=94=20stop=20letterboxing=20below=20the?= =?UTF-8?q?=20camera=20housing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The macOS sessionView branch was missing the .ignoresSafeArea() its iOS/tvOS siblings have, so in fullscreen the stream was laid out in the safe area below the notch; the aspect-fit video then scaled down to that smaller area and left black borders. Add .ignoresSafeArea() so the stream fills the whole display including behind the camera housing (a thin top-center strip occluded — normal fullscreen- video behavior); at the display's native mode it's now a 1:1 fill. Inert in windowed mode and on non-notched displays. NSPrefersDisplaySafeAreaCompatibilityMode is deliberately not used (it shrinks the whole window with borders on all sides). Co-Authored-By: Claude Opus 4.8 (1M context) --- clients/apple/Sources/PunktfunkClient/ContentView.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/clients/apple/Sources/PunktfunkClient/ContentView.swift b/clients/apple/Sources/PunktfunkClient/ContentView.swift index 05edce1..d428059 100644 --- a/clients/apple/Sources/PunktfunkClient/ContentView.swift +++ b/clients/apple/Sources/PunktfunkClient/ContentView.swift @@ -145,6 +145,13 @@ struct ContentView: View { #if os(macOS) .frame(minWidth: 640, minHeight: 360) .background(Color.black) + // Fill the whole display in fullscreen, INCLUDING behind the camera housing (notch). + // Without this the stream is laid out in the safe area below the notch, so an + // aspect-fit video at the display's native mode scales down and leaves black borders. + // A fullscreen video behind the notch (a thin top-center strip occluded) is the + // expected behavior — same edge-to-edge intent as the iOS/tvOS branches below. Inert + // in windowed mode (no notch safe-area inset on a titled window). + .ignoresSafeArea() #elseif os(iOS) // Streaming is immersive: edge-to-edge under the status bar and home // indicator, both hidden for the session (they return with the hosts grid).