mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-23 22:01:31 +11:00
Retrieve the monitors and their info for osx
This commit is contained in:
parent
605bf39b78
commit
9dd592600a
|
@ -29,3 +29,9 @@ git = "https://github.com/servo/rust-core-foundation"
|
|||
|
||||
[target.x86_64-apple-darwin.dependencies.core_foundation]
|
||||
git = "https://github.com/servo/rust-core-foundation"
|
||||
|
||||
[target.i686-apple-darwin.dependencies.core_graphics]
|
||||
git = "https://github.com/servo/rust-core-graphics"
|
||||
|
||||
[target.x86_64-apple-darwin.dependencies.core_graphics]
|
||||
git = "https://github.com/servo/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;
|
||||
|
||||
|
|
|
@ -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> {
|
||||
|
|
46
src/osx/monitor.rs
Normal file
46
src/osx/monitor.rs
Normal file
|
@ -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
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue