Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .build/xdr-boost
Binary file not shown.
121 changes: 77 additions & 44 deletions Sources/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ class Renderer: NSObject, MTKViewDelegate {

class XDRApp: NSObject, NSApplicationDelegate {
var statusItem: NSStatusItem!
var overlayWindow: NSWindow?
var overlayWindows: [NSNumber: NSWindow] = [:]
var device: MTLDevice!
var boostRenderer: Renderer?
var boostRenderers: [NSNumber: Renderer] = [:]
var isActive = false
var shouldBeActive = false // tracks user intent across sleep/lock cycles
var boostLevel: Double = 2.0
Expand All @@ -53,9 +53,9 @@ class XDRApp: NSObject, NSApplicationDelegate {
fputs("No Metal device\n", stderr); exit(1)
}
device = dev
maxEDR = NSScreen.main?.maximumPotentialExtendedDynamicRangeColorComponentValue ?? 1.0
maxEDR = globalMaxEDR()
guard maxEDR > 1.0 else {
fputs("Display doesn't support XDR\n", stderr); exit(1)
fputs("No connected display supports XDR\n", stderr); exit(1)
}

if CommandLine.arguments.count > 1, let v = Double(CommandLine.arguments[1]) {
Expand All @@ -70,6 +70,23 @@ class XDRApp: NSObject, NSApplicationDelegate {
fputs("Max EDR: \(maxEDR)x\n", stderr)
}

func displayID(for screen: NSScreen) -> NSNumber? {
screen.deviceDescription[NSDeviceDescriptionKey("NSScreenNumber")] as? NSNumber
}

func xdrScreens() -> [(screen: NSScreen, id: NSNumber, maxEDR: CGFloat)] {
NSScreen.screens.compactMap { screen in
guard let id = displayID(for: screen) else { return nil }
let screenMaxEDR = screen.maximumPotentialExtendedDynamicRangeColorComponentValue
guard screenMaxEDR > 1.0 else { return nil }
return (screen: screen, id: id, maxEDR: screenMaxEDR)
}
}

func globalMaxEDR() -> CGFloat {
xdrScreens().map(\.maxEDR).max() ?? 1.0
}

// MARK: - Global Hotkey (Cmd+Shift+B)

func registerGlobalHotkey() {
Expand Down Expand Up @@ -162,14 +179,18 @@ class XDRApp: NSObject, NSApplicationDelegate {
watchdogTimer = Timer.scheduledTimer(withTimeInterval: 3.0, repeats: true) { [weak self] _ in
guard let self = self else { return }
if self.shouldBeActive && !self.isActive {
self.maxEDR = NSScreen.main?.maximumPotentialExtendedDynamicRangeColorComponentValue ?? 1.0
self.maxEDR = self.globalMaxEDR()
if self.maxEDR > 1.0 {
self.activate()
fputs("Watchdog — XDR restored\n", stderr)
}
} else if self.shouldBeActive && self.isActive {
// Check if overlay window is still on screen
if self.overlayWindow == nil || !self.overlayWindow!.isVisible {
let screens = self.xdrScreens()
let expectedDisplayIDs = Set(screens.map(\.id))
let activeDisplayIDs = Set(self.overlayWindows.keys)
let missingOverlay = self.overlayWindows.values.contains { !$0.isVisible }

if missingOverlay || expectedDisplayIDs != activeDisplayIDs {
self.isActive = false
self.activate()
fputs("Watchdog — overlay recreated\n", stderr)
Expand All @@ -179,7 +200,7 @@ class XDRApp: NSObject, NSApplicationDelegate {
}

@objc func handleDisplayChange() {
maxEDR = NSScreen.main?.maximumPotentialExtendedDynamicRangeColorComponentValue ?? 1.0
maxEDR = globalMaxEDR()
if isActive {
deactivate()
if maxEDR > 1.0 && shouldBeActive {
Expand Down Expand Up @@ -217,55 +238,67 @@ class XDRApp: NSObject, NSApplicationDelegate {
// MARK: - XDR Overlay

func activate() {
guard let screen = NSScreen.main else { return }

let frame = screen.frame
let window = NSWindow(contentRect: frame, styleMask: .borderless, backing: .buffered, defer: false)
window.level = .screenSaver
window.backgroundColor = .clear
window.isOpaque = false
window.hasShadow = false
window.ignoresMouseEvents = true
window.hidesOnDeactivate = false
window.sharingType = .none // exclude from screenshots and screen recordings
window.collectionBehavior = [.canJoinAllSpaces, .stationary, .fullScreenAuxiliary]

// Single MTKView that both triggers EDR and provides the boost
let boostView = MTKView(frame: frame, device: device)
boostView.colorPixelFormat = .rgba16Float
boostView.colorspace = CGColorSpace(name: CGColorSpace.extendedLinearDisplayP3)
boostView.layer?.isOpaque = false
boostView.preferredFramesPerSecond = 10
boostView.clearColor = MTLClearColor(red: boostLevel, green: boostLevel, blue: boostLevel, alpha: 1.0)
if let layer = boostView.layer as? CAMetalLayer {
layer.wantsExtendedDynamicRangeContent = true
deactivate()
let screens = xdrScreens()
guard !screens.isEmpty else {
fputs("No connected display supports XDR\n", stderr)
return
}
boostRenderer = Renderer(device: device)
boostView.delegate = boostRenderer

// Multiply compositing on the content view layer — composites with
// the desktop content BEHIND the window, not within it
boostView.wantsLayer = true
window.contentView = boostView
window.contentView?.layer?.compositingFilter = "multiply"
window.orderFrontRegardless()
overlayWindow = window
for xdrScreen in screens {
let frame = xdrScreen.screen.frame
let window = NSWindow(contentRect: frame, styleMask: .borderless, backing: .buffered, defer: false)
window.level = .screenSaver
window.backgroundColor = .clear
window.isOpaque = false
window.hasShadow = false
window.ignoresMouseEvents = true
window.hidesOnDeactivate = false
window.sharingType = .none // exclude from screenshots and screen recordings
window.collectionBehavior = [.canJoinAllSpaces, .stationary, .fullScreenAuxiliary]

// Single MTKView that both triggers EDR and provides the boost
let boostView = MTKView(frame: frame, device: device)
boostView.colorPixelFormat = .rgba16Float
boostView.colorspace = CGColorSpace(name: CGColorSpace.extendedLinearDisplayP3)
boostView.layer?.isOpaque = false
boostView.preferredFramesPerSecond = 10
let levelForScreen = min(boostLevel, Double(xdrScreen.maxEDR))
boostView.clearColor = MTLClearColor(red: levelForScreen, green: levelForScreen, blue: levelForScreen, alpha: 1.0)
if let layer = boostView.layer as? CAMetalLayer {
layer.wantsExtendedDynamicRangeContent = true
}
let renderer = Renderer(device: device)
boostView.delegate = renderer

// Multiply compositing on the content view layer — composites with
// the desktop content BEHIND the window, not within it
boostView.wantsLayer = true
window.contentView = boostView
window.contentView?.layer?.compositingFilter = "multiply"
window.orderFrontRegardless()
overlayWindows[xdrScreen.id] = window
boostRenderers[xdrScreen.id] = renderer
}

isActive = true
statusItem.button?.title = "☀︎"
toggleItem.title = "Turn Off"
fputs("XDR ON — \(boostLevel)x\n", stderr)
fputs("XDR ON — \(boostLevel)x on \(screens.count) display(s)\n", stderr)
}

func deactivate() {
overlayWindow?.orderOut(nil)
overlayWindow = nil
boostRenderer = nil
overlayWindows.values.forEach { $0.orderOut(nil) }
overlayWindows.removeAll()
boostRenderers.removeAll()

let wasActive = isActive
isActive = false
statusItem.button?.title = "☀"
toggleItem.title = "Turn On"
fputs("XDR OFF\n", stderr)
if wasActive {
fputs("XDR OFF\n", stderr)
}
}

@objc func quit() {
Expand Down