diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-09-04 12:27:28 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-09-04 12:27:28 +0200 |
| commit | 192eddee203348ec85d52e277d59fc2c5ef96664 (patch) | |
| tree | 168fd55fc99844ca1ac5cdf7947f5083f72b31ed /Liquid Glass Bezel | |
| parent | bb5daa2e90623691a5259700b9d388d2d21f46d3 (diff) | |
Basic liquid glass
Diffstat (limited to 'Liquid Glass Bezel')
| -rw-r--r-- | Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.h | 6 | ||||
| -rw-r--r-- | Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.m | 10 | ||||
| -rw-r--r-- | Liquid Glass Bezel/BBLiquidGlassBezelPrefs.h | 2 | ||||
| -rw-r--r-- | Liquid Glass Bezel/BBLiquidGlassBezelPrefs.m | 2 | ||||
| -rw-r--r-- | Liquid Glass Bezel/BBLiquidGlassBezelPrefs.xib | 16 | ||||
| -rw-r--r-- | Liquid Glass Bezel/BackgroundView.swift | 90 |
6 files changed, 79 insertions, 47 deletions
diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.h b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.h deleted file mode 100644 index 36c5177..0000000 --- a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.h +++ /dev/null @@ -1,6 +0,0 @@ -#import <QSInterface/QSInterface.h> -NS_ASSUME_NONNULL_BEGIN -@interface BBLiquidGlassBezelPrefs : QSPreferencePane { -} -@end -NS_ASSUME_NONNULL_END
\ No newline at end of file diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.m b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.m deleted file mode 100644 index 4e57c7a..0000000 --- a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.m +++ /dev/null @@ -1,10 +0,0 @@ -// -// BBLiquidGlassBezelPrefs.h -// Liquid Glass Bezel -// -// Created by Ruben Beltran del Rio on 2025-09-04. -// Copyright © 2025 BRNBW. All rights reserved. -// -#import "BBLiquidGlassBezelPrefs.h" -@implementation BBLiquidGlassBezelPrefs -@end
\ No newline at end of file diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.h b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.h index 2ce6bb6..b4efd1d 100644 --- a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.h +++ b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.h @@ -3,8 +3,8 @@ NS_ASSUME_NONNULL_BEGIN @interface BBLiquidGlassBezelPrefs : QSPreferencePane { - } + @end NS_ASSUME_NONNULL_END diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.m b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.m index 1deb432..0e3818e 100644 --- a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.m +++ b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.m @@ -1,5 +1,5 @@ // -// BBLiquidGlassBezelPrefs.h +// BBLiquidGlassBezelPrefs.m // Liquid Glass Bezel // // Created by Ruben Beltran del Rio on 2025-09-04. diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.xib b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.xib index 41e51fd..535c2a7 100644 --- a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.xib +++ b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.xib @@ -47,6 +47,22 @@ <binding destination="od0-QH-X0x" name="selectedTag" keyPath="values.QSLiquidGlassBezelGlassStyle" id="8w3-oM-wU3"/> </connections> </popUpButton> + <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" id="3r2-JJ-734"> + <rect key="frame" x="12" y="197" width="110" height="16"/> + <autoresizingMask key="autoresizingMask"/> + <textFieldCell key="cell" lineBreakMode="clipping" title="Tint Background?" id="mEt-5D-Xf3"> + <font key="font" usesAppearanceFont="YES"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <switch horizontalHuggingPriority="750" verticalHuggingPriority="750" baseWritingDirection="leftToRight" alignment="left" id="Wex-ov-GHa" userLabel="Tint Background Switch"> + <rect key="frame" x="144" y="192" width="50" height="25"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <connections> + <binding destination="od0-QH-X0x" name="value" keyPath="values.QSLiquidGlassBezelApplyTint" id="nJL-hI-usC"/> + </connections> + </switch> </subviews> </view> <point key="canvasLocation" x="94.5" y="148.5"/> diff --git a/Liquid Glass Bezel/BackgroundView.swift b/Liquid Glass Bezel/BackgroundView.swift index e5f4c86..508ee02 100644 --- a/Liquid Glass Bezel/BackgroundView.swift +++ b/Liquid Glass Bezel/BackgroundView.swift @@ -5,70 +5,109 @@ 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() { - // 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)) + setColor(NSColor.clear) + setIsGlass(NSNumber(value: false)) } 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 + 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 - // 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) + 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() - // Ensure the window is configured for transparency if let window = self.window { window.backgroundColor = NSColor.clear window.isOpaque = false @@ -76,13 +115,6 @@ class BackgroundView: QSBezelBackgroundView { } 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() - } } |