import Foundation import CoreGraphics /// Wie weit die Auslösefläche über die Notch hinausreicht. /// /// Feste Werte im Code waren dafür die falsche Antwort: wie genau jemand die /// Notch trifft, hängt an der Hand und am Zeigegerät. Wer mit dem Trackpad /// grob nach oben fährt, will eine großzügige Fläche; wer die Menüleiste viel /// benutzt, will sie knapp, damit das Panel nicht dauernd aufgeht. public struct TriggerArea: Codable, Equatable, Sendable { /// Zugabe je Seite. public let extraWidth: CGFloat /// Zugabe nach unten. public let extraHeight: CGFloat public static let maximumExtraWidth: CGFloat = 200 public static let maximumExtraHeight: CGFloat = 120 /// Was bisher fest im Code stand. Wer nichts einstellt, merkt nichts. public static let standard = TriggerArea(extraWidth: 16, extraHeight: 14) public init(extraWidth: CGFloat, extraHeight: CGFloat) { self.extraWidth = min(max(extraWidth, 0), Self.maximumExtraWidth) self.extraHeight = min(max(extraHeight, 0), Self.maximumExtraHeight) } /// Die Fläche, deren Betreten das Panel scharf schaltet. /// /// Zur Seite wächst sie symmetrisch, nach unten einseitig — nach oben ist /// der Bildschirmrand, von dort kommt niemand. public func rect(notch: CGRect, screen: CGRect) -> CGRect { CGRect(x: notch.minX - extraWidth, y: notch.minY - extraHeight, width: notch.width + 2 * extraWidth, height: notch.height + extraHeight) .intersection(screen) } }