diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-09-04 09:57:29 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-09-04 09:57:29 +0200 |
| commit | 3dfeb86c5c3b72acc59919c7a198fcf76a54c35c (patch) | |
| tree | 5b96a88a4c8fe26e0a8a4d7ab15cd634c9fabae6 | |
| parent | 0b61369240ad0a68322146796721055aca07428a (diff) | |
Add basic glass
| -rw-r--r-- | Flat Bezel.xcodeproj/project.pbxproj | 4 | ||||
| -rw-r--r-- | Flat Bezel/BackgroundView.swift | 93 |
2 files changed, 81 insertions, 16 deletions
diff --git a/Flat Bezel.xcodeproj/project.pbxproj b/Flat Bezel.xcodeproj/project.pbxproj index 5273a2c..9dd19c0 100644 --- a/Flat Bezel.xcodeproj/project.pbxproj +++ b/Flat Bezel.xcodeproj/project.pbxproj @@ -293,7 +293,7 @@ DEFINES_MODULE = YES; DEVELOPMENT_TEAM = S68NHQVJXW; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 12.0; + MACOSX_DEPLOYMENT_TARGET = 26; MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = "pizza.unlimited.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "Flat Bezel"; @@ -318,7 +318,7 @@ DEFINES_MODULE = YES; DEVELOPMENT_TEAM = S68NHQVJXW; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 12.0; + MACOSX_DEPLOYMENT_TARGET = 26; MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = "pizza.unlimited.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "Flat Bezel"; diff --git a/Flat Bezel/BackgroundView.swift b/Flat Bezel/BackgroundView.swift index 7890798..e5f4c86 100644 --- a/Flat Bezel/BackgroundView.swift +++ b/Flat Bezel/BackgroundView.swift @@ -1,23 +1,88 @@ import Foundation import Cocoa + class BackgroundView: QSBezelBackgroundView { - override func draw(_ rect: NSRect) { - let boundsRect = bounds - - let roundRect = NSBezierPath() - roundRect.appendRoundedRect(boundsRect, xRadius: 8.0, yRadius: 8.0) - roundRect.addClip() + private var glassView: NSGlassEffectView? + + override func awakeFromNib() { + super.awakeFromNib() + configureParentView() + setupGlassEffect() + } + + override init(frame frameRect: NSRect) { + super.init(frame: frameRect) + configureParentView() + setupGlassEffect() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + configureParentView() + setupGlassEffect() + } + + private func configureParentView() { + // Make the parent background much more transparent so glass effect shows through + setColor(NSColor.clear) // Try completely transparent first + setIsGlass(NSNumber(value: false)) // Disable the parent's glass rendering + + // Alternative: if clear doesn't work, try a very transparent background + // setColor(NSColor.black.withAlphaComponent(0.1)) + } + + private func setupGlassEffect() { + let glassView = NSGlassEffectView(frame: bounds) + glassView.autoresizingMask = [.width, .height] + glassView.cornerRadius = 12.0 + glassView.style = .clear + + // Create a content view for the glass effect + let contentView = NSView(frame: glassView.bounds) + contentView.autoresizingMask = [.width, .height] + glassView.contentView = contentView + + // Add subtle tint based on appearance + updateGlassTint() + + // Insert the glass view at the bottom of the view hierarchy + addSubview(glassView, positioned: .below, relativeTo: nil) + self.glassView = glassView + } + + private func updateGlassTint() { + guard let glassView = glassView else { return } + + let darkMode = effectiveAppearance.name == .darkAqua + if darkMode { + // Very subtle tint for dark mode to maintain translucency + glassView.tintColor = NSColor.black.withAlphaComponent(0.05) + } else { + // Even lighter tint for light mode + glassView.tintColor = NSColor.white.withAlphaComponent(0.02) + } + } + + override func viewDidMoveToWindow() { + super.viewDidMoveToWindow() - let darkMode = effectiveAppearance.name == .darkAqua - if (darkMode) { - NSColor(red: 0.1, green: 0.1, blue: 0.1, alpha: 0.99).setFill() - } else { - NSColor(red: 1, green: 1, blue: 1, alpha: 0.99).setFill() + // Ensure the window is configured for transparency + if let window = self.window { + window.backgroundColor = NSColor.clear + window.isOpaque = false } - boundsRect.fill(using: .copy) - - super.draw(boundsRect) + } + + override func draw(_ rect: NSRect) { + // Don't call super.draw(rect) to avoid the parent's opaque background + // The glass effect will handle the visual appearance + return + } + + override func viewDidChangeEffectiveAppearance() { + super.viewDidChangeEffectiveAppearance() + updateGlassTint() } } |