From ed76cd7574536fb899ce7e2626eb1f48c986dc0b Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 30 Dec 2025 20:25:52 +0100 Subject: [PATCH] fix: restore talk orb hit testing --- apps/macos/Sources/Clawdis/TalkOverlay.swift | 16 ++++------------ apps/macos/Sources/Clawdis/TalkOverlayView.swift | 7 +++++-- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/apps/macos/Sources/Clawdis/TalkOverlay.swift b/apps/macos/Sources/Clawdis/TalkOverlay.swift index 258ac2beb..57dd56c80 100644 --- a/apps/macos/Sources/Clawdis/TalkOverlay.swift +++ b/apps/macos/Sources/Clawdis/TalkOverlay.swift @@ -126,7 +126,10 @@ final class TalkOverlayController { } private func targetFrame() -> NSRect { - guard let screen = NSScreen.main else { return .zero } + let screen = self.window?.screen + ?? NSScreen.main + ?? NSScreen.screens.first + guard let screen else { return .zero } let size = NSSize(width: Self.overlaySize, height: Self.overlaySize) let visible = screen.visibleFrame let origin = CGPoint( @@ -140,15 +143,4 @@ private final class TalkOverlayHostingView: NSHostingView { override func acceptsFirstMouse(for event: NSEvent?) -> Bool { true } - - override func hitTest(_ point: NSPoint) -> NSView? { - let center = CGPoint( - x: self.bounds.maxX - TalkOverlayController.orbPadding - (TalkOverlayController.orbSize / 2), - y: self.bounds.maxY - TalkOverlayController.orbPadding - (TalkOverlayController.orbSize / 2)) - let radius = (TalkOverlayController.orbSize / 2) + TalkOverlayController.orbHitSlop - let dx = point.x - center.x - let dy = point.y - center.y - guard dx * dx + dy * dy <= radius * radius else { return nil } - return super.hitTest(point) - } } diff --git a/apps/macos/Sources/Clawdis/TalkOverlayView.swift b/apps/macos/Sources/Clawdis/TalkOverlayView.swift index d6c9a3a73..154a948a7 100644 --- a/apps/macos/Sources/Clawdis/TalkOverlayView.swift +++ b/apps/macos/Sources/Clawdis/TalkOverlayView.swift @@ -9,6 +9,7 @@ struct TalkOverlayView: View { var body: some View { ZStack(alignment: .topTrailing) { let isPaused = self.controller.model.isPaused + Color.clear TalkOrbView( phase: self.controller.model.phase, level: self.controller.model.level, @@ -40,11 +41,13 @@ struct TalkOverlayView: View { .offset(x: -2, y: -2) .opacity(self.hoveringWindow ? 1 : 0) .animation(.easeOut(duration: 0.12), value: self.hoveringWindow) - .allowsHitTesting(self.hoveringWindow) } .onHover { self.hoveringWindow = $0 } } - .frame(width: TalkOverlayController.overlaySize, height: TalkOverlayController.overlaySize, alignment: .center) + .frame( + width: TalkOverlayController.overlaySize, + height: TalkOverlayController.overlaySize, + alignment: .topTrailing) } private static let defaultSeamColor = Color(red: 79 / 255.0, green: 122 / 255.0, blue: 154 / 255.0)