Преглед изворни кода

Center window title in titlebar.

Made-with: Cursor
huzaifahayat12 пре 2 недеља
родитељ
комит
9f3a184103
1 измењених фајлова са 37 додато и 5 уклоњено
  1. 37 5
      meetings_app/ViewController.swift

+ 37 - 5
meetings_app/ViewController.swift

@@ -43,6 +43,7 @@ final class ViewController: NSViewController {
43
     private var sidebarPageByView = [ObjectIdentifier: SidebarPage]()
43
     private var sidebarPageByView = [ObjectIdentifier: SidebarPage]()
44
     private var meetingProviderByView = [ObjectIdentifier: MeetingProvider]()
44
     private var meetingProviderByView = [ObjectIdentifier: MeetingProvider]()
45
     private var settingsActionByView = [ObjectIdentifier: SettingsAction]()
45
     private var settingsActionByView = [ObjectIdentifier: SettingsAction]()
46
+    private weak var centeredTitleLabel: NSTextField?
46
 
47
 
47
     private let darkModeDefaultsKey = "settings.darkModeEnabled"
48
     private let darkModeDefaultsKey = "settings.darkModeEnabled"
48
     private var darkModeEnabled: Bool {
49
     private var darkModeEnabled: Bool {
@@ -82,6 +83,9 @@ final class ViewController: NSViewController {
82
         view.window?.setContentSize(NSSize(width: 1120, height: 690))
83
         view.window?.setContentSize(NSSize(width: 1120, height: 690))
83
         view.window?.minSize = NSSize(width: 940, height: 600)
84
         view.window?.minSize = NSSize(width: 940, height: 600)
84
         applyWindowTitle(for: selectedSidebarPage)
85
         applyWindowTitle(for: selectedSidebarPage)
86
+        if let window = view.window {
87
+            installCenteredTitleIfNeeded(on: window)
88
+        }
85
     }
89
     }
86
 
90
 
87
     override var representedObject: Any? {
91
     override var representedObject: Any? {
@@ -241,18 +245,46 @@ private extension ViewController {
241
     }
245
     }
242
 
246
 
243
     private func applyWindowTitle(for page: SidebarPage) {
247
     private func applyWindowTitle(for page: SidebarPage) {
248
+        let title: String
244
         switch page {
249
         switch page {
245
         case .joinMeetings:
250
         case .joinMeetings:
246
-            view.window?.title = "App for Google Meet"
251
+            title = "App for Google Meet"
247
         case .photo:
252
         case .photo:
248
-            view.window?.title = "Backgrounds — Photo"
253
+            title = "Backgrounds — Photo"
249
         case .video:
254
         case .video:
250
-            view.window?.title = "Backgrounds — Video"
255
+            title = "Backgrounds — Video"
251
         case .tutorials:
256
         case .tutorials:
252
-            view.window?.title = "Tutorials"
257
+            title = "Tutorials"
253
         case .settings:
258
         case .settings:
254
-            view.window?.title = "Settings"
259
+            title = "Settings"
255
         }
260
         }
261
+        view.window?.title = title
262
+        centeredTitleLabel?.stringValue = title
263
+    }
264
+
265
+    private func installCenteredTitleIfNeeded(on window: NSWindow) {
266
+        guard centeredTitleLabel == nil else { return }
267
+        guard let titlebarView = window.standardWindowButton(.closeButton)?.superview else { return }
268
+
269
+        let label = NSTextField(labelWithString: window.title)
270
+        label.translatesAutoresizingMaskIntoConstraints = false
271
+        label.alignment = .center
272
+        label.font = NSFont.titleBarFont(ofSize: 0)
273
+        label.textColor = .labelColor
274
+        label.lineBreakMode = .byTruncatingTail
275
+        label.maximumNumberOfLines = 1
276
+
277
+        titlebarView.addSubview(label)
278
+
279
+        NSLayoutConstraint.activate([
280
+            label.centerXAnchor.constraint(equalTo: titlebarView.centerXAnchor),
281
+            label.centerYAnchor.constraint(equalTo: titlebarView.centerYAnchor),
282
+            label.leadingAnchor.constraint(greaterThanOrEqualTo: titlebarView.leadingAnchor, constant: 90),
283
+            label.trailingAnchor.constraint(lessThanOrEqualTo: titlebarView.trailingAnchor, constant: -90)
284
+        ])
285
+
286
+        window.titleVisibility = .hidden
287
+        centeredTitleLabel = label
256
     }
288
     }
257
 
289
 
258
     private func updateSidebarAppearance() {
290
     private func updateSidebarAppearance() {