From ac74db979c9e1daa73c5f232e9a144e9f355990a Mon Sep 17 00:00:00 2001 From: DavidPartouche Date: Fri, 19 Sep 2014 15:42:47 +0200 Subject: Get the monitors attached to the display, and their resolution for X11 --- src/x11/monitor.rs | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/x11/monitor.rs (limited to 'src/x11/monitor.rs') diff --git a/src/x11/monitor.rs b/src/x11/monitor.rs new file mode 100644 index 0000000..2774d5f --- /dev/null +++ b/src/x11/monitor.rs @@ -0,0 +1,54 @@ +use std::{ptr}; +use super::ffi; + +pub struct MonitorID(uint); + +pub fn get_available_monitors() -> Vec { + let nb_monitors = unsafe { + let display = ffi::XOpenDisplay(ptr::null()); + if display.is_null() { + fail!("get_available_monitors failed"); + } + let nb_monitors = ffi::XScreenCount(display); + ffi::XCloseDisplay(display); + nb_monitors + }; + + let mut vec = Vec::new(); + vec.grow_fn(nb_monitors as uint, |i| MonitorID(i)); + vec +} + +pub fn get_primary_monitor() -> MonitorID { + let primary_monitor = unsafe { + let display = ffi::XOpenDisplay(ptr::null()); + if display.is_null() { + fail!("get_available_monitors failed"); + } + let primary_monitor = ffi::XDefaultScreen(display); + ffi::XCloseDisplay(display); + primary_monitor + }; + + MonitorID(primary_monitor as uint) +} + +impl MonitorID { + pub fn get_name(&self) -> Option { + Some("".to_string()) + } + + pub fn get_dimensions(&self) -> (uint, uint) { + let dimensions = unsafe { + let display = ffi::XOpenDisplay(ptr::null()); + let MonitorID(screen_num) = *self; + let screen = ffi::XScreenOfDisplay(display, screen_num as i32); + let width = ffi::XWidthOfScreen(screen); + let height = ffi::XHeightOfScreen(screen); + (width as uint, height as uint) + }; + + dimensions + } +} + -- cgit v1.2.3 From 4222d12e6746bff2765e7a716eed4f4158f1906f Mon Sep 17 00:00:00 2001 From: DavidPartouche Date: Fri, 19 Sep 2014 19:57:52 +0200 Subject: Added output to get_name for x11 monitors --- src/x11/monitor.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/x11/monitor.rs') diff --git a/src/x11/monitor.rs b/src/x11/monitor.rs index 2774d5f..f1b861b 100644 --- a/src/x11/monitor.rs +++ b/src/x11/monitor.rs @@ -35,7 +35,8 @@ pub fn get_primary_monitor() -> MonitorID { impl MonitorID { pub fn get_name(&self) -> Option { - Some("".to_string()) + let MonitorID(screen_num) = *self; + Some(format!("Monitor #{}", screen_num)) } pub fn get_dimensions(&self) -> (uint, uint) { -- cgit v1.2.3