import AppKit public extension NSScreen { /// Die `CGDirectDisplayID` dieses Bildschirms. Anders als der Index in /// `NSScreen.screens` überlebt sie ein Umstecken oder Umsortieren. var displayID: CGDirectDisplayID { deviceDescription[NSDeviceDescriptionKey("NSScreenNumber")] as? CGDirectDisplayID ?? 0 } var isBuiltInDisplay: Bool { CGDisplayIsBuiltin(displayID) != 0 } /// Reduziert den Bildschirm auf genau die Werte, die die Geometrie braucht. /// Alles Weitere bleibt draußen, damit `NotchGeometry` ohne Fenstersystem /// prüfbar bleibt. var onyxMetrics: ScreenMetrics { ScreenMetrics(frame: frame, safeAreaTop: safeAreaInsets.top, auxiliaryTopLeft: auxiliaryTopLeftArea, auxiliaryTopRight: auxiliaryTopRightArea, isBuiltIn: isBuiltInDisplay, displayID: displayID) } /// Verdeckt gerade ein Vollbildfenster die Menüleiste? /// /// Es gibt keine öffentliche API, die „hier läuft ein Vollbildvideo" meldet. /// Der verlässliche Hinweis ist die verschwundene Menüleiste: bei echtem /// Vollbild reicht `visibleFrame` bis an die Oberkante von `frame`. var isShowingFullScreenWindow: Bool { frame.maxY - visibleFrame.maxY < 1 } }