mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 22:01:35 +00:00
feat!(mac): add ui screens + text clawdis-mac
This commit is contained in:
44
apps/macos/Sources/Clawdis/UIScreenService.swift
Normal file
44
apps/macos/Sources/Clawdis/UIScreenService.swift
Normal file
@@ -0,0 +1,44 @@
|
||||
import AppKit
|
||||
import ClawdisIPC
|
||||
import CoreGraphics
|
||||
|
||||
enum UIScreenService {
|
||||
static func listScreens() -> [UIScreenInfo] {
|
||||
let screens = NSScreen.screens
|
||||
let mainScreen = NSScreen.main
|
||||
|
||||
return screens.enumerated().map { index, screen in
|
||||
UIScreenInfo(
|
||||
index: index,
|
||||
name: screen.peekabooName,
|
||||
frame: screen.frame,
|
||||
visibleFrame: screen.visibleFrame,
|
||||
isPrimary: screen == mainScreen,
|
||||
scaleFactor: screen.backingScaleFactor,
|
||||
displayID: screen.displayID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private extension NSScreen {
|
||||
var displayID: UInt32 {
|
||||
if let num = self.deviceDescription[NSDeviceDescriptionKey("NSScreenNumber")] as? NSNumber {
|
||||
return num.uint32Value
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
/// Match Peekaboo's `ScreenService` naming (built-in vs. resolution fallback).
|
||||
var peekabooName: String {
|
||||
let id = self.displayID
|
||||
guard id != 0 else { return "Display" }
|
||||
if CGDisplayIsBuiltin(id) != 0 { return "Built-in Display" }
|
||||
|
||||
if let mode = CGDisplayCopyDisplayMode(id) {
|
||||
return "\(mode.pixelWidth)×\(mode.pixelHeight) Display"
|
||||
}
|
||||
|
||||
return "External Display"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user