mirror of
https://github.com/MonitorControl/MonitorControl.git
synced 2026-10-29 22:00:50 -06:00
[PR #1931] Add native-style Liquid Glass OSD HUD for macOS 26 and 27 #1340
Labels
No labels
Status: Abandoned
arm64
beta
beta
bug
done
duplicate
enhancement
feedback needed from reporter
in progress
information
invalid
investigating
known Issue
monitor Issue
pull-request
translation
unable to reproduce
unreleased
x86
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
github-starred/MonitorControl#1340
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/MonitorControl/MonitorControl/pull/1931
Author: @tusharxclaude
Created: 10/26/2026
Status: 🔄 Open
Base:
main← Head:feat/macos27-liquid-glass-osd📝 Commits (9)
a4e60d5Add native-style Liquid Glass OSD HUD for macOS 26 and 27fd25cbbRespect Reduce Motion and add VoiceOver levelIndicator accessibility to OSD HUD437818fSupport adaptive Light and Dark mode appearance in Liquid Glass OSD HUD81523baUse adaptive SystemBanner glass variant (_variant = 9, 63pt height)fc37fa2Adapt Liquid Glass OSD HUD foreground and appearance to backdrop luminancec2c3be8Update OSD HUD to new capsule design with segmented bar and callout bubbleb3111fbKeep white foreground on mid-luminance colored backdrops1fda859Apply HUD corner radius after glass variant and raise luma thresholdsc1fb098Inset luma backdrop layer so its aliased clip edge doesn't show at the HUD outline📊 Changes
5 files changed (+599 additions, -72 deletions)
View changed files
📝
MonitorControl/Info.plist(+1 -1)📝
MonitorControl/Model/AppleDisplay.swift(+37 -0)📝
MonitorControl/Model/Display.swift(+12 -1)📝
MonitorControl/Support/OSDUtils.swift(+545 -70)📝
MonitorControl/Support/SliderHandler.swift(+4 -0)📄 Description
Summary
In macOS 26/27 (Tahoe+), the private
OSDUIHelperXPC service no longer displays the legacy chiclet HUD whenOSDManager.sharedManager().showImage(...)is called. As a result, adjusting brightness, contrast, or volume on external displays via MonitorControl produces no on-screen feedback.This PR introduces a native macOS 26+ Liquid Glass On-Screen Display HUD (
MacOS27OSDHudController,OSDHudPanel,MacOS27OSDHudView) inOSDUtils.swiftwhile preserving the legacyOSDManagerpath for macOS 15 and earlier.What's Changed
NSGlassEffectViewBanner Pill (292 × 63 pt,cornerRadius = 19.5):_variant = 9/notificationCentermaterial at63 ptheight) so the backdrop preserves wallpaper color saturation and renders the native luminous specular rim.Display.getFriendlyName()), a pill badge (56%,56% • 280 nitswhen nits calibration is available, orLocked), min/max SF Symbols (sun.min.fill/sun.max.fill,speaker.fill/speaker.wave.3.fill,circle.lefthalf.filled/circle.righthalf.filled), a continuous progress bar, and 16 chiclet tick dots.NSPanel:hasKeyAppearance,_hasActiveAppearance, and_hasActiveControlson the borderless.nonactivatingPanelwithhasShadow = falsesoNSGlassEffectViewrenders its luminous specular glass border without stealing focus from the active app or drawing a dark rectangular window shadow.CABackdropLayer(tracksLuma = true) with hysteresis (0.45/0.53) to sample the real-time luminance behind the HUD pill and automatically flip the glass appearance and foreground colors (.darkAquavs..aqua), preventing dark-on-dark or white-on-white text regardless of the system Light/Dark mode setting.NSWorkspace.shared.accessibilityDisplayShouldReduceMotionto skip fade animations when Reduce Motion is enabled..levelIndicatoraccessibility role, display title label, and percentage/nits value on the track bar for VoiceOver.DisplayManager.resolveEffectiveDisplayID(_:)and routes OSD calls through the effective display ID so virtual/software-dimmed displays resolve to their physical screen.Screenshots
luma = 0.27 → .darkAqua)luma = 0.78 → .aqua)luma = 0.12 → .darkAqua)luma = 0.95 → .aqua)🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.