Files
onyx/Packages/OnyxKit/Sources/OnyxNotch/TriggerArea.swift
Scarriffle a84e5a0c8e Auslösefläche einstellbar, Blitz immer lesbar, Menüleiste schmaler
Der Blitz war ein Loch in der Füllung — über dem gefüllten Teil liest man
ihn, über dem leeren ist es Transparenz auf Transparenz. Bei wenig Ladung
sitzt er fast ganz im Leeren und verschwindet.

Statt zwischen Schwarz und Weiß zu faden geht er den Weg von macOS: geteilt
gezeichnet, über der Füllung ausgestanzt, daneben ausgemalt. Damit ist er
bei jedem Ladestand lesbar, ohne Bewegung in der Menüleiste. Ein Test
prüft, dass sich die beiden Teile an der Kante treffen statt zu überlappen —
sonst wäre der Blitz an der Nahtstelle dicker.

Die Auslösefläche der Notch lässt sich jetzt einstellen, mit Vorschau. Wie
genau jemand die Notch trifft, hängt an Hand und Zeigegerät; feste Werte im
Code waren dafür die falsche Antwort. Die Vorschau zeigt einen
nachgebildeten Bildschirm mit Notch und eingefärbter Fläche — „24 Punkte
unter der Notch" ist keine Vorstellung, die jemand im Kopf hat.

Die Menüleistenbreiten folgen jetzt dem, was dasteht. „Temp 53°" stand in
einer Box für „Temp 100 °C", und in der Menüleiste ist Platz das knappste
Gut. Dieselbe Hysterese wie beim Netzwerk: sofort wachsen, zögernd
schrumpfen.

Das Mixer-Symbol war ausgeschaltet auf 55 % abgeblendet. Das war meine Idee
und ein Fehlgriff: über einem hellen Schreibtischhintergrund ist es damit
praktisch weg. Ob der Mixer läuft, erfährt man beim Klick — dafür muss man
das Symbol aber erst finden.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 12:46:02 +02:00

40 lines
1.5 KiB
Swift

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)
}
}