Quellcode durchsuchen

Refine native titlebar traffic light alignment for the home chrome header.

This switches to stable inset-based positioning, keeps alignment updated after layout changes, and nudges branding spacing to match the target header composition.

Made-with: Cursor
huzaifahayat12 vor 3 Monaten
Ursprung
Commit
ea9bfee10d
1 geänderte Dateien mit 32 neuen und 3 gelöschten Zeilen
  1. 32 3
      zoom_app/ViewController.swift

+ 32 - 3
zoom_app/ViewController.swift

@@ -28,6 +28,9 @@ class ViewController: NSViewController {
     private let titleBarControlBackground = NSColor.white.withAlphaComponent(0.04)
     private let titleBarLightControlBackground = NSColor.white.withAlphaComponent(0.02)
     private let appShellCornerRadius: CGFloat = 20
+    private let homeChromeHeaderHeight: CGFloat = 56
+    private let nativeTrafficLightsLeading: CGFloat = 14
+    private let nativeTrafficLightsTopInset: CGFloat = 20
     private let accentBlue = NSColor(calibratedRed: 27 / 255, green: 115 / 255, blue: 232 / 255, alpha: 1)
     private let accentOrange = NSColor(calibratedRed: 1.0, green: 0.60, blue: 0.20, alpha: 1)
     private let primaryText = NSColor(calibratedWhite: 0.98, alpha: 1)
@@ -77,6 +80,7 @@ class ViewController: NSViewController {
             window.isMovableByWindowBackground = true
             window.styleMask.insert(.fullSizeContentView)
         }
+        alignNativeTrafficLights()
         if isUserLoggedIn() {
             showHomeView(profile: nil)
         } else {
@@ -84,6 +88,11 @@ class ViewController: NSViewController {
         }
     }
 
+    override func viewDidLayout() {
+        super.viewDidLayout()
+        alignNativeTrafficLights()
+    }
+
     private func setupUI() {
         view.wantsLayer = true
         view.layer?.backgroundColor = appBackground.cgColor
@@ -697,7 +706,7 @@ class ViewController: NSViewController {
             chromeHeader.topAnchor.constraint(equalTo: chromeColumn.topAnchor),
             chromeHeader.leadingAnchor.constraint(equalTo: chromeColumn.leadingAnchor),
             chromeHeader.trailingAnchor.constraint(equalTo: chromeColumn.trailingAnchor),
-            chromeHeader.heightAnchor.constraint(equalToConstant: 56),
+            chromeHeader.heightAnchor.constraint(equalToConstant: homeChromeHeaderHeight),
             sidebar.leadingAnchor.constraint(equalTo: chromeColumn.leadingAnchor),
             sidebar.trailingAnchor.constraint(equalTo: chromeColumn.trailingAnchor),
             sidebar.topAnchor.constraint(equalTo: chromeHeader.bottomAnchor, constant: 2),
@@ -848,8 +857,8 @@ class ViewController: NSViewController {
         meetingsDocument.addSubview(meetingsStack)
 
         NSLayoutConstraint.activate([
-            brandStack.leadingAnchor.constraint(equalTo: chromeHeader.leadingAnchor, constant: 60),
-            brandStack.centerYAnchor.constraint(equalTo: chromeHeader.centerYAnchor),
+            brandStack.leadingAnchor.constraint(equalTo: chromeHeader.leadingAnchor, constant: 72),
+            brandStack.centerYAnchor.constraint(equalTo: chromeHeader.centerYAnchor, constant: -1),
 
             topBar.topAnchor.constraint(equalTo: content.topAnchor),
             topBar.leadingAnchor.constraint(equalTo: content.leadingAnchor),
@@ -1039,6 +1048,26 @@ class ViewController: NSViewController {
         return sidebar
     }
 
+    @MainActor
+    private func alignNativeTrafficLights() {
+        guard let window = view.window else { return }
+        guard let closeButton = window.standardWindowButton(.closeButton),
+              let miniButton = window.standardWindowButton(.miniaturizeButton),
+              let zoomButton = window.standardWindowButton(.zoomButton) else { return }
+        guard let buttonContainer = closeButton.superview else { return }
+
+        let buttons = [closeButton, miniButton, zoomButton]
+        // Compute from top inset so moving "down" is stable in titlebar coordinates.
+        let containerHeight = buttonContainer.bounds.height
+        let targetY = max(0, containerHeight - closeButton.frame.height - nativeTrafficLightsTopInset)
+        var nextX = nativeTrafficLightsLeading
+
+        for button in buttons {
+            button.setFrameOrigin(NSPoint(x: nextX, y: targetY))
+            nextX += button.frame.width + 8
+        }
+    }
+
     private func makeTopBarIconButton(symbol: String, action: Selector?) -> NSButton {
         let button = NSButton(title: "", target: action == nil ? nil : self, action: action)
         button.isBordered = false