fix: restore talk orb hit testing
This commit is contained in:
@@ -126,7 +126,10 @@ final class TalkOverlayController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func targetFrame() -> NSRect {
|
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 size = NSSize(width: Self.overlaySize, height: Self.overlaySize)
|
||||||
let visible = screen.visibleFrame
|
let visible = screen.visibleFrame
|
||||||
let origin = CGPoint(
|
let origin = CGPoint(
|
||||||
@@ -140,15 +143,4 @@ private final class TalkOverlayHostingView: NSHostingView<TalkOverlayView> {
|
|||||||
override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
|
override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
|
||||||
true
|
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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ struct TalkOverlayView: View {
|
|||||||
var body: some View {
|
var body: some View {
|
||||||
ZStack(alignment: .topTrailing) {
|
ZStack(alignment: .topTrailing) {
|
||||||
let isPaused = self.controller.model.isPaused
|
let isPaused = self.controller.model.isPaused
|
||||||
|
Color.clear
|
||||||
TalkOrbView(
|
TalkOrbView(
|
||||||
phase: self.controller.model.phase,
|
phase: self.controller.model.phase,
|
||||||
level: self.controller.model.level,
|
level: self.controller.model.level,
|
||||||
@@ -40,11 +41,13 @@ struct TalkOverlayView: View {
|
|||||||
.offset(x: -2, y: -2)
|
.offset(x: -2, y: -2)
|
||||||
.opacity(self.hoveringWindow ? 1 : 0)
|
.opacity(self.hoveringWindow ? 1 : 0)
|
||||||
.animation(.easeOut(duration: 0.12), value: self.hoveringWindow)
|
.animation(.easeOut(duration: 0.12), value: self.hoveringWindow)
|
||||||
.allowsHitTesting(self.hoveringWindow)
|
|
||||||
}
|
}
|
||||||
.onHover { self.hoveringWindow = $0 }
|
.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)
|
private static let defaultSeamColor = Color(red: 79 / 255.0, green: 122 / 255.0, blue: 154 / 255.0)
|
||||||
|
|||||||
Reference in New Issue
Block a user