Merge pull request #302 from Ebullioscopic/bugfix/custom-glass

Update Settings
This commit is contained in:
Hariharan Mudaliar 2026-02-17 23:45:02 +05:30 • committed by GitHub
commit ce6b63d9e7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 29 additions and 15 deletions

View file

@ -4457,6 +4457,7 @@ private struct LockScreenGlassVariantPreviewCell: View {
private let cornerRadius: CGFloat = 16
private let previewCornerRadius: CGFloat = 14
private let previewSize = CGSize(width: 190, height: 96)
@State private var previewToken: Double = 0
var body: some View {
ZStack {
@ -4478,22 +4479,28 @@ private struct LockScreenGlassVariantPreviewCell: View {
)
.padding(.vertical, 6)
.allowsHitTesting(false)
.onAppear {
Logger.log("Lock screen glass preview appeared (variant v\(variant.rawValue))", category: .performance)
}
.onDisappear {
Logger.log("Lock screen glass preview disappeared", category: .performance)
}
.onChange(of: variant) { _, newValue in
previewToken = Date().timeIntervalSinceReferenceDate
Logger.log("Lock screen glass preview variant changed to v\(newValue.rawValue)", category: .performance)
}
}
private var liquidGlassPreview: some View {
TimelineView(.periodic(from: .now, by: 1.0 / 30.0)) { context in
let phase = context.date.timeIntervalSinceReferenceDate.truncatingRemainder(dividingBy: 1.0)
let opacityJitter = phase < 0.5 ? 1.0 : 0.999999
LiquidGlassBackground(
variant: variant,
cornerRadius: previewCornerRadius,
trigger: context.date.timeIntervalSinceReferenceDate
) {
Color.white.opacity(0.04)
}
.frame(width: previewSize.width, height: previewSize.height)
.opacity(opacityJitter)
LiquidGlassBackground(
variant: variant,
cornerRadius: previewCornerRadius,
trigger: previewToken,
jitterEnabled: false
) {
Color.white.opacity(0.04)
}
.frame(width: previewSize.width, height: previewSize.height)
.shadow(color: Color.black.opacity(0.2), radius: 10, x: 0, y: 6)
}
}

View file

@ -58,6 +58,7 @@ public struct LiquidGlassBackground<Content: View>: NSViewRepresentable {
private let cornerRadius: CGFloat
private let variant: LiquidGlassVariant
private let trigger: Double
private let jitterEnabled: Bool
/// Creates a new liquid‑glass container.
/// - Parameters:
/// - variant: Any ``LiquidGlassVariant`` (0–19). Defaults to `.v11`, which is visually super pleasing
@ -67,11 +68,13 @@ public struct LiquidGlassBackground<Content: View>: NSViewRepresentable {
variant: LiquidGlassVariant = .defaultVariant,
cornerRadius: CGFloat = 10,
trigger: Double = 0,
jitterEnabled: Bool = true,
@ViewBuilder content: () -> Content
) {
self.variant = variant
self.cornerRadius = cornerRadius
self.trigger = trigger
self.jitterEnabled = jitterEnabled
self.content = content()
}
@ -146,9 +149,13 @@ public struct LiquidGlassBackground<Content: View>: NSViewRepresentable {
nsView.setValue(cornerRadius, forKey: "cornerRadius")
callPrivateVariantSetter(on: nsView, value: variant.rawValue)
// Micro-jitter: imperceptibly adjust opacity so WindowServer re-samples the wallpaper every frame.
let jitter = sin(trigger * 100) * 0.000001
nsView.alphaValue = 1.0 - CGFloat(abs(jitter))
if jitterEnabled {
// Micro-jitter: imperceptibly adjust opacity so WindowServer re-samples the wallpaper every frame.
let jitter = sin(trigger * 100) * 0.000001
nsView.alphaValue = 1.0 - CGFloat(abs(jitter))
} else if nsView.alphaValue != 1.0 {
nsView.alphaValue = 1.0
}
nsView.needsDisplay = true
}