aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-09-04 09:57:29 +0200
committerRuben Beltran del Rio <git@r.bdr.sh>2025-09-04 09:57:29 +0200
commit3dfeb86c5c3b72acc59919c7a198fcf76a54c35c (patch)
tree5b96a88a4c8fe26e0a8a4d7ab15cd634c9fabae6
parent0b61369240ad0a68322146796721055aca07428a (diff)
Add basic glass
-rw-r--r--Flat Bezel.xcodeproj/project.pbxproj4
-rw-r--r--Flat Bezel/BackgroundView.swift93
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()
}
}