phonto 0.5.0

GPU-accelerated video wallpaper program for wayland compositors & MacOS
use anyhow::Context;
use objc2_app_kit::NSScreen;
use objc2_foundation::MainThreadMarker;

use crate::displays::DisplayInfo;

pub fn list_displays() -> anyhow::Result<Vec<DisplayInfo>> {
    let mtm =
        MainThreadMarker::new().context("macOS display enumeration must run on the main thread")?;
    let screens = NSScreen::screens(mtm);
    let mut out = Vec::new();
    for screen in screens.iter() {
        let name = screen.localizedName().to_string();
        let frame = screen.frame();
        let backing = screen.backingScaleFactor();
        let width = (frame.size.width * backing).round() as u32;
        let height = (frame.size.height * backing).round() as u32;
        out.push(DisplayInfo {
            id: name.clone(),
            description: name,
            width,
            height,
        });
    }
    Ok(out)
}