Panel wächst aus der Notch, statt einzublenden
Die Fläche wird nicht eingeblendet — sie beginnt exakt in der Notch-Silhouette und wächst von dort nach unten und zur Seite, deckungsgleich mit der schwarzen Hardware darüber. Eingeblendetes Panel wirkt wie Glas; Onyx soll sich wie ein fester Körper anfühlen, der herausfährt. Der Inhalt hat eine eigene Kurve: beim Öffnen um 90 ms verzögert, damit die Fläche vorweg läuft und kein Text sich mitdehnt; beim Schließen sofort weg, damit beim Einfahren nichts gestaucht wird. Die Eckenrundung wandert mit (10 → 26), sonst sieht die kleine Form aufgeblasen aus. Drei Fallstricke, die im Code stehen: Der Fensterschatten folgt dem Fensterrahmen, nicht der gezeichneten Form. Das Fenster hat immer volle Panelgröße, damit die Animation Platz hat — der Systemschatten läge also die ganze Zeit um eine unsichtbare Fläche. Deshalb hasShadow = false und Schatten aus SwiftUI. Ausgefahren wird erst im nächsten Runloop-Durchlauf. Im selben Durchlauf wie orderFrontRegardless sieht SwiftUI keinen Zustandswechsel, sondern nur den Endzustand, und das Panel wäre schlagartig da. NotchHostingView nimmt Klicks nur dort an, wo etwas zu sehen ist. Sonst verschluckt das volle Fenster während des Aus- und Einfahrens Klicks in seiner leeren Fläche.
This commit is contained in:
@@ -30,7 +30,11 @@ public final class NotchPanel: NSPanel {
|
||||
|
||||
backgroundColor = .clear
|
||||
isOpaque = false
|
||||
hasShadow = true
|
||||
// Der Fensterschatten folgt dem Fensterrahmen, nicht der gezeichneten
|
||||
// Form. Da das Fenster immer die volle Panelgröße hat, läge der Schatten
|
||||
// während der ganzen Animation um eine unsichtbare Fläche. Den Schatten
|
||||
// zeichnet deshalb SwiftUI, wo er der wachsenden Form folgt.
|
||||
hasShadow = false
|
||||
isMovable = false
|
||||
isMovableByWindowBackground = false
|
||||
animationBehavior = .none
|
||||
|
||||
Reference in New Issue
Block a user