Panel deckt die Menüleiste nicht mehr zu
Die Fläche reichte über die ganze Breite bis an die Bildschirmoberkante, damit sie mit der schwarzen Notch zu einem Körper verschmilzt. Bei einer Kachel ging das auf; bei sechs deckt sie die komplette Menüleiste zu, samt aller Statuselemente. Die Silhouette ist jetzt ein T: oben ein Steg in Notch-Breite, ab Unterkante der Menüleiste die volle Fläche. Die Notch bleibt verschmolzen, die Menüleiste bleibt frei. Das allein hätte nur so ausgesehen, als wäre es gelöst. Das Fenster liegt weiterhin über der Leiste, dort nur durchsichtig — und ein durchsichtiges Fenster schluckt Klicks trotzdem. Die Trefferprüfung reicht sie jetzt durch: links und rechts der Notch gehört der oberste Streifen der Menüleiste. Aus demselben Grund fragt der Koordinator nicht mehr den Fensterrahmen, sondern die sichtbare Fläche. Wer den Rahmen befragt, hält einen Klick auf ein fremdes Statuselement für einen Klick ins Panel — und einen Zeiger über der Menüleiste für einen im Panel. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -75,15 +75,25 @@ public final class NotchScreenController {
|
||||
// groß wie das ausgefahrene Panel, damit die Animation Platz hat —
|
||||
// würde man `panel.frame` nehmen, hielte ein Zeiger in der noch leeren
|
||||
// Fläche das Panel offen.
|
||||
let inside = geometry.triggerRect.contains(point)
|
||||
|| (presentation.isExpanded && panel.frame.contains(point))
|
||||
let inside = geometry.triggerRect.contains(point) || containsVisiblePoint(point)
|
||||
send(inside ? .pointerEntered : .pointerExited)
|
||||
}
|
||||
|
||||
public func click() { send(.click) }
|
||||
public func clickedOutside() { send(.clickedOutside) }
|
||||
/// Für den Koordinator: wo das Panel gerade steht.
|
||||
public var panelFrame: CGRect { panel.frame }
|
||||
|
||||
/// Ob ein Punkt auf der **sichtbaren** Fläche des Panels liegt.
|
||||
///
|
||||
/// Nicht `panel.frame`: das Fenster reicht bis an die Bildschirmoberkante
|
||||
/// und ist links und rechts der Notch dort durchsichtig — dieser Streifen
|
||||
/// gehört der Menüleiste. Wer den Fensterrahmen befragt, hält einen Klick
|
||||
/// auf ein fremdes Statuselement für einen Klick ins Panel.
|
||||
public func containsVisiblePoint(_ point: CGPoint) -> Bool {
|
||||
guard presentation.isExpanded, panel.frame.contains(point) else { return false }
|
||||
let menuBarBand = panel.frame.maxY - geometry.rect.height
|
||||
guard point.y > menuBarBand else { return true }
|
||||
return abs(point.x - panel.frame.midX) <= geometry.rect.width / 2
|
||||
}
|
||||
public func escape() { send(.escape) }
|
||||
public func setSuppressed(_ suppressed: Bool) {
|
||||
guard suppressed != machine.isSuppressed else { return }
|
||||
|
||||
Reference in New Issue
Block a user