import Foundation import Cocoa class BackgroundView: QSBezelBackgroundView { private var glassView: NSGlassEffectView? private var preferencesObserver: NSObjectProtocol? override func awakeFromNib() { super.awakeFromNib() configureParentView() setupGlassEffect() observePreferenceChanges() } override init(frame frameRect: NSRect) { super.init(frame: frameRect) configureParentView() setupGlassEffect() observePreferenceChanges() } required init?(coder: NSCoder) { super.init(coder: coder) configureParentView() setupGlassEffect() observePreferenceChanges() } deinit { if let observer = preferencesObserver { NotificationCenter.default.removeObserver(observer) } } private func configureParentView() { setColor(NSColor.clear) setIsGlass(NSNumber(value: false)) } private func setupGlassEffect() { let glassView = NSGlassEffectView(frame: bounds) glassView.autoresizingMask = [.width, .height] glassView.cornerRadius = 12.0 glassView.wantsLayer = true glassView.layer?.masksToBounds = true glassView.layer?.cornerRadius = 12.0 updateGlassStyle(glassView) updateGlassTint(glassView) let contentView = NSView(frame: glassView.bounds) contentView.autoresizingMask = [.width, .height] contentView.alphaValue = 0 glassView.contentView = contentView addSubview(glassView, positioned: .below, relativeTo: nil) self.glassView = glassView } private func observePreferenceChanges() { preferencesObserver = NotificationCenter.default.addObserver( forName: UserDefaults.didChangeNotification, object: nil, queue: .main ) { [weak self] _ in self?.updateGlassStyleFromPreferences() } } private func updateGlassStyleFromPreferences() { guard let glassView = glassView else { return } updateGlassStyle(glassView) updateGlassTint(glassView) } private func updateGlassStyle(_ glassView: NSGlassEffectView) { let useGlassStyle = UserDefaults.standard.bool(forKey: "QSLiquidGlassBezelGlassStyle") glassView.style = useGlassStyle ? .clear : .regular glassView.cornerRadius = 12.0 if !useGlassStyle { glassView.layer?.masksToBounds = true glassView.layer?.cornerRadius = 12.0 } } private func updateGlassTint(_ glassView: NSGlassEffectView) { let shouldApplyTint = UserDefaults.standard.bool(forKey: "QSLiquidGlassBezelApplyTint") if !shouldApplyTint { glassView.tintColor = nil return } // QSAppearance1B -> The B I'm guessing is for Background // The 1 I believe is the 1st row, which is Main window. // My other assumptions T for text, A for Accents. let tintColor = UserDefaults.standard.color(forKey: "QSAppearance1B") glassView.tintColor = tintColor } override func viewDidMoveToWindow() { super.viewDidMoveToWindow() if let window = self.window { window.backgroundColor = NSColor.clear window.isOpaque = false } } override func draw(_ rect: NSRect) { return } }