From 6cf4eba1fc534f59d44639219bbdf92cddacae66 Mon Sep 17 00:00:00 2001 From: Abdul Rehman Date: Mon, 6 Apr 2026 13:06:12 +0500 Subject: [PATCH 1/2] chore: ignore Xcode and SwiftPM local build directories Made-with: Cursor --- .gitignore | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 639728b..3e3cf4b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,16 @@ Carthage .DS_Store ### Xcode ### -xcuserdata/ \ No newline at end of file +xcuserdata/ +*.xcuserstate +*.xccheckout +*.xcscmblueprint + +### Xcode / SwiftPM (local build outputs beside the project) ### +.build/ +.derivedData/ +build/ +DerivedData/ + +### SwiftPM — user-specific; keep Package.resolved tracked ### +.swiftpm/xcode/xcuserdata/ From c88f806bf1ac1cbeee627a543c0afc642008fe76 Mon Sep 17 00:00:00 2001 From: Abdul Rehman Date: Tue, 21 Apr 2026 01:15:54 +0500 Subject: [PATCH 2/2] Refine main branch UI: dark OSD, premium icons, and fixed corners --- MonitorControl/Support/CustomHUD.swift | 25 ++++++++++++++++------ MonitorControl/Support/SliderHandler.swift | 2 +- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/MonitorControl/Support/CustomHUD.swift b/MonitorControl/Support/CustomHUD.swift index 8136c33..21f1a27 100644 --- a/MonitorControl/Support/CustomHUD.swift +++ b/MonitorControl/Support/CustomHUD.swift @@ -98,14 +98,26 @@ class CustomHUDManager { } private func createHUDContentView(type: HUDType, value: Float, maxValue: Float) -> NSView { + // Wrap in a transparent root view to fix "offending corners" and ensure perfect rounding + let rootView = NSView(frame: NSRect(x: 0, y: 0, width: 220, height: 60)) + rootView.wantsLayer = true + rootView.layer?.backgroundColor = NSColor.clear.cgColor + let containerView = NSVisualEffectView(frame: NSRect(x: 0, y: 0, width: 220, height: 60)) - containerView.material = .hudWindow + containerView.material = .popover containerView.blendingMode = .behindWindow containerView.state = .active + containerView.appearance = NSAppearance(named: .vibrantDark) containerView.wantsLayer = true - containerView.layer?.cornerRadius = 12 + containerView.layer?.cornerRadius = 30 // Pill shape (height / 2) containerView.layer?.masksToBounds = true + // Add subtle edge highlight for a premium look + containerView.layer?.borderWidth = 1.0 + containerView.layer?.borderColor = NSColor.white.withAlphaComponent(0.12).cgColor + + rootView.addSubview(containerView) + // Icon let iconView = NSImageView(frame: NSRect(x: 16, y: 18, width: 24, height: 24)) if #available(macOS 11.0, *) { @@ -138,7 +150,7 @@ class CustomHUDManager { let normalizedValue = CGFloat(min(max(value / maxValue, 0), 1)) let progressFill = NSView(frame: NSRect(x: 52, y: 26, width: 108 * normalizedValue, height: 8)) progressFill.wantsLayer = true - progressFill.layer?.backgroundColor = NSColor.white.cgColor + progressFill.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.85).cgColor progressFill.layer?.cornerRadius = 4 containerView.addSubview(progressFill) @@ -151,7 +163,7 @@ class CustomHUDManager { label.alignment = .right containerView.addSubview(label) - return containerView + return rootView } private var fadeTimers: [CGDirectDisplayID: Timer] = [:] @@ -217,9 +229,8 @@ enum HUDType { var iconNSColor: NSColor { switch self { - case .brightness: return .systemYellow - case .volume, .volumeMuted: return .systemBlue - case .contrast: return .systemGray + case .brightness, .volume, .volumeMuted: return .white.withAlphaComponent(0.9) + case .contrast: return .white.withAlphaComponent(0.8) } } } diff --git a/MonitorControl/Support/SliderHandler.swift b/MonitorControl/Support/SliderHandler.swift index ff98e78..7eb24ac 100644 --- a/MonitorControl/Support/SliderHandler.swift +++ b/MonitorControl/Support/SliderHandler.swift @@ -231,7 +231,7 @@ class SliderHandler { } let icon = SliderHandler.ClickThroughImageView() icon.image = NSImage(systemSymbolName: iconName, accessibilityDescription: title) - icon.contentTintColor = NSColor.black.withAlphaComponent(0.6) + icon.contentTintColor = NSColor.labelColor.withAlphaComponent(0.72) // Position icon at horizontal left (start), 8px above slider let iconSize: CGFloat = 18 icon.frame = NSRect(x: slider.frame.origin.x, y: slider.frame.origin.y + slider.frame.height + 8, width: iconSize, height: iconSize)