Complete Glur research and verify progressive blur treatment #8

Open
opened 2026-09-13 13:34:41 +00:00 by kayg · 1 comment
Owner

Request and current status

Requested Glur research was not carried through to a clear delivered decision. Reference: https://github.com/joogps/Glur

Acceptance

Reconcile existing native blur work, document library/platform tradeoffs and chosen approach. Verify actual edge transitions, light/dark, accessibility appearances and resizing. Respect native conventions; screenshots are not performance proof.

Keep open until the user-facing outcome is verified in a delivered build. Source review or a successful build alone is not completion.

## Request and current status Requested Glur research was not carried through to a clear delivered decision. Reference: https://github.com/joogps/Glur ## Acceptance Reconcile existing native blur work, document library/platform tradeoffs and chosen approach. Verify actual edge transitions, light/dark, accessibility appearances and resizing. Respect native conventions; screenshots are not performance proof. Keep open until the user-facing outcome is verified in a delivered build. Source review or a successful build alone is not completion.
Author
Owner

Research started and bounded plan:

  1. Read current upstream Glur 2.0 source and README, including the public Glur product, separate GlurBackdrop product, shader limits, masks, and platform support.
  2. Compare it with Calternal’s existing native NSVisualEffectView window backdrop plus alpha-gradient mailWindowDissolve, and Mailternal’s public dissolve implementation.
  3. Decide whether Glur can be adopted without private APIs, native-component regressions, or unproven performance cost; propose the smallest public prototype if useful.

Evidence and decision:

  • Upstream Glur 2.0 (ba4f05d3c9a608ec773b9305f2af6089390de68a) documents that public .glur() uses SwiftUI layerEffect Metal shaders and silently does nothing for platform-backed ScrollView, TextEditor, and Map: README, GlurModifier.swift.
  • GlurBackdrop reaches platform-backed content through dynamically-created private Core Animation filter/layer classes and private keys: BackdropBlurFilter.swift, GlurBackdropNSView.swift. This is incompatible with Calternal’s native/public API requirement.
  • Calternal already has a full-window public NSVisualEffectView backdrop and a shared SwiftUI alpha-gradient dissolve mask. Mailternal uses the same public strategy; its native scroll content is extended under the titlebar with .ignoresSafeArea(.container, edges: .top) and its mask is kept separate from content geometry.
  • The public Glur shader path defaults to drawingGroup() and two blur passes plus noise; upstream’s Metal kernel is bounded by a 31-pixel half-kernel. No Calternal Release trace exists, so no performance claim is made.

Decision: do not add Glur to Calternal. Its public product cannot blur the native sidebar/editor surfaces, and its separate backdrop product uses private APIs. Keep the existing public material plus alpha-gradient dissolve. If true progressive blur is still desired, the only bounded follow-up is an isolated macOS 26 probe of Apple’s public .scrollEdgeEffectStyle(.soft, for: [.top, .bottom]) on the actual native scroll view, with the current custom mask/suppression disabled only in that probe. Acceptance would require edge geometry, light/dark, reduced transparency, resizing, and Release scroll-spam evidence against the current implementation.

Research started and bounded plan: 1. Read current upstream Glur 2.0 source and README, including the public `Glur` product, separate `GlurBackdrop` product, shader limits, masks, and platform support. 2. Compare it with Calternal’s existing native `NSVisualEffectView` window backdrop plus alpha-gradient `mailWindowDissolve`, and Mailternal’s public dissolve implementation. 3. Decide whether Glur can be adopted without private APIs, native-component regressions, or unproven performance cost; propose the smallest public prototype if useful. Evidence and decision: - Upstream Glur 2.0 (`ba4f05d3c9a608ec773b9305f2af6089390de68a`) documents that public `.glur()` uses SwiftUI `layerEffect` Metal shaders and silently does nothing for platform-backed `ScrollView`, `TextEditor`, and `Map`: [README](https://github.com/joogps/Glur/blob/ba4f05d3c9a608ec773b9305f2af6089390de68a/README.md#how-its-done), [GlurModifier.swift](https://github.com/joogps/Glur/blob/ba4f05d3c9a608ec773b9305f2af6089390de68a/Sources/Glur/GlurModifier.swift). - `GlurBackdrop` reaches platform-backed content through dynamically-created private Core Animation filter/layer classes and private keys: [BackdropBlurFilter.swift](https://github.com/joogps/Glur/blob/ba4f05d3c9a608ec773b9305f2af6089390de68a/Sources/GlurBackdrop/BackdropBlurFilter.swift), [GlurBackdropNSView.swift](https://github.com/joogps/Glur/blob/ba4f05d3c9a608ec773b9305f2af6089390de68a/Sources/GlurBackdrop/GlurBackdropNSView.swift). This is incompatible with Calternal’s native/public API requirement. - Calternal already has a full-window public `NSVisualEffectView` backdrop and a shared SwiftUI alpha-gradient dissolve mask. Mailternal uses the same public strategy; its native scroll content is extended under the titlebar with `.ignoresSafeArea(.container, edges: .top)` and its mask is kept separate from content geometry. - The public Glur shader path defaults to `drawingGroup()` and two blur passes plus noise; upstream’s Metal kernel is bounded by a 31-pixel half-kernel. No Calternal Release trace exists, so no performance claim is made. Decision: do not add Glur to Calternal. Its public product cannot blur the native sidebar/editor surfaces, and its separate backdrop product uses private APIs. Keep the existing public material plus alpha-gradient dissolve. If true progressive blur is still desired, the only bounded follow-up is an isolated macOS 26 probe of Apple’s public `.scrollEdgeEffectStyle(.soft, for: [.top, .bottom])` on the actual native scroll view, with the current custom mask/suppression disabled only in that probe. Acceptance would require edge geometry, light/dark, reduced transparency, resizing, and Release scroll-spam evidence against the current implementation.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal-macos#8
No description provided.