screen.rs

 1use std::any::Any;
 2
 3use crate::{
 4    geometry::vector::{vec2f, Vector2F},
 5    platform,
 6};
 7use cocoa::{
 8    appkit::NSScreen,
 9    base::{id, nil},
10    foundation::NSArray,
11};
12
13#[derive(Debug)]
14pub struct Screen {
15    pub(crate) native_screen: id,
16}
17
18impl Screen {
19    pub fn all() -> Vec<Self> {
20        let mut screens = Vec::new();
21        unsafe {
22            let native_screens = NSScreen::screens(nil);
23            for ix in 0..native_screens.count() {
24                screens.push(Screen {
25                    native_screen: native_screens.objectAtIndex(ix),
26                });
27            }
28        }
29        screens
30    }
31}
32
33impl platform::Screen for Screen {
34    fn as_any(&self) -> &dyn Any {
35        self
36    }
37
38    fn size(&self) -> Vector2F {
39        unsafe {
40            let frame = self.native_screen.frame();
41            vec2f(frame.size.width as f32, frame.size.height as f32)
42        }
43    }
44}