diff options
| author | tomaka <pierre.krieger1708@gmail.com> | 2014-11-05 12:11:42 +0100 | 
|---|---|---|
| committer | tomaka <pierre.krieger1708@gmail.com> | 2014-11-05 12:11:42 +0100 | 
| commit | a69c2209a58e2fb1354aae1c6e45cc5f555669cc (patch) | |
| tree | 51daa7cf63cf83d440bae1b5ee0216f46d6e3d94 | |
| parent | 605bf39b78c0afc38f8d14b12605f9e3a27bac65 (diff) | |
| parent | 0ce2fd00dd09bde26bb785232712c469320c50d0 (diff) | |
| download | glutin-a69c2209a58e2fb1354aae1c6e45cc5f555669cc.tar.gz glutin-a69c2209a58e2fb1354aae1c6e45cc5f555669cc.zip | |
Merge pull request #97 from DavidPartouche/cocoa_monitors
Retrieve the monitors and their info for osx
| -rw-r--r-- | Cargo.toml | 10 | ||||
| -rw-r--r-- | src/lib.rs | 2 | ||||
| -rw-r--r-- | src/osx/mod.rs | 23 | ||||
| -rw-r--r-- | src/osx/monitor.rs | 46 | 
4 files changed, 59 insertions, 22 deletions
| @@ -25,7 +25,13 @@ git = "https://github.com/DavidPartouche/rust-cocoa"  git = "https://github.com/DavidPartouche/rust-cocoa"  [target.i686-apple-darwin.dependencies.core_foundation] -git = "https://github.com/servo/rust-core-foundation" +git = "https://github.com/DavidPartouche/rust-core-foundation"  [target.x86_64-apple-darwin.dependencies.core_foundation] -git = "https://github.com/servo/rust-core-foundation" +git = "https://github.com/DavidPartouche/rust-core-foundation" + +[target.i686-apple-darwin.dependencies.core_graphics] +git = "https://github.com/DavidPartouche/rust-core-graphics" + +[target.x86_64-apple-darwin.dependencies.core_graphics] +git = "https://github.com/DavidPartouche/rust-core-graphics" @@ -37,6 +37,8 @@ extern crate libc;  extern crate cocoa;  #[cfg(target_os = "macos")]  extern crate core_foundation; +#[cfg(target_os = "macos")] +extern crate core_graphics;  #[cfg(target_os = "linux")]  extern crate sync; diff --git a/src/osx/mod.rs b/src/osx/mod.rs index 3e0d668..3dda56a 100644 --- a/src/osx/mod.rs +++ b/src/osx/mod.rs @@ -22,6 +22,9 @@ use {MouseInput, Pressed, Released, LeftMouseButton, RightMouseButton, MouseMove  use events; +pub use self::monitor::{MonitorID, get_available_monitors, get_primary_monitor}; + +mod monitor;  mod event;  static mut shift_pressed: bool = false; @@ -43,26 +46,6 @@ impl Deref<Window> for HeadlessContext {      }  } -pub struct MonitorID; - -pub fn get_available_monitors() -> Vec<MonitorID> { -    unimplemented!() -} - -pub fn get_primary_monitor() -> MonitorID { -    unimplemented!() -} - -impl MonitorID { -    pub fn get_name(&self) -> Option<String> { -        unimplemented!() -    } - -    pub fn get_dimensions(&self) -> (uint, uint) { -        unimplemented!() -    } -} -  #[cfg(feature = "window")]  impl Window {      pub fn new(builder: WindowBuilder) -> Result<Window, String> { diff --git a/src/osx/monitor.rs b/src/osx/monitor.rs new file mode 100644 index 0000000..383fd32 --- /dev/null +++ b/src/osx/monitor.rs @@ -0,0 +1,46 @@ +use core_graphics::display; + +pub struct MonitorID(u32); + +pub fn get_available_monitors() -> Vec<MonitorID> { +    let mut monitors = Vec::new(); +    unsafe { +        let max_displays = 10u32; +        let mut active_displays = [0u32, ..10]; +        let mut display_count = 0; +        display::CGGetActiveDisplayList(max_displays, +                                                        &mut active_displays[0], +                                                        &mut display_count); +        for i in range(0u, display_count as uint) { +            monitors.push(MonitorID(active_displays[i])); +        } +    } +    monitors +} + +pub fn get_primary_monitor() -> MonitorID { +    let id = unsafe { +        MonitorID(display::CGMainDisplayID()) +    }; +    id +} + +impl MonitorID { +    pub fn get_name(&self) -> Option<String> { +        let MonitorID(display_id) = *self; +        let screen_num = unsafe { +            display::CGDisplayModelNumber(display_id) +        }; +        Some(format!("Monitor #{}", screen_num)) +    } + +    pub fn get_dimensions(&self) -> (uint, uint) { +        let MonitorID(display_id) = *self; +        let dimension = unsafe { +            let height = display::CGDisplayPixelsHigh(display_id); +            let width = display::CGDisplayPixelsWide(display_id); +            (width as uint, height as uint) +        }; +        dimension +    } +} | 
