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}