From af4f5edb50a7b57da43d9bb68daf7c602fb2aeea Mon Sep 17 00:00:00 2001 From: Michael Baird Date: Tue, 4 Jun 2024 18:52:16 +0100 Subject: [PATCH] Fix notch avoidance padding in full screen mode Fixes https://github.com/wez/wezterm/issues/3807 The values returned by [`safeAreaInsets`][0] need to be multipled by the scale factor of the display (in case of the MacBook Pro 14-inch, 2021, a value of 2.0). There's a code comment referencing [#1737 (comment)][1], where an extra `2` was added to this number, but something must have changed since then because I cannot see a need for this now. [0]: https://developer.apple.com/documentation/appkit/nsscreen/3882821-safeareainsets [1]: https://github.com/wez/wezterm/issues/1737#issuecomment-1085923867 --- window/src/os/macos/window.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/window/src/os/macos/window.rs b/window/src/os/macos/window.rs index 898a203470e..7576e72b637 100644 --- a/window/src/os/macos/window.rs +++ b/window/src/os/macos/window.rs @@ -895,11 +895,13 @@ impl WindowOps for Window { let insets: NSEdgeInsets = unsafe { msg_send![main_screen, safeAreaInsets] }; log::trace!("{:?}", insets); - // Bleh, the API is supposed to give us the right metrics, but it needs - // a tweak to look good around the notch. - // - let top = insets.top.ceil() as usize; - let top = if top > 0 { top + 2 } else { 0 }; + let scale = unsafe { + let frame = NSScreen::frame(main_screen); + let backing_frame = NSScreen::convertRectToBacking_(main_screen, frame); + backing_frame.size.height / frame.size.height + }; + + let top = (insets.top.ceil() * scale) as usize; Some(Border { top: ULength::new(top), left: ULength::new(insets.left.ceil() as usize),