aboutsummaryrefslogtreecommitdiffstats
path: root/src/api/x11/monitor.rs
diff options
context:
space:
mode:
authorPierre Krieger <pierre.krieger1708@gmail.com>2015-05-07 13:14:09 +0200
committerPierre Krieger <pierre.krieger1708@gmail.com>2015-05-07 13:14:09 +0200
commit2414f87cebac12c6cde36ff6436642a50d122ed8 (patch)
treea786a98a48716776ce9839eceba61fe413b4c951 /src/api/x11/monitor.rs
parent3e29c6585b23fbf0df2c254001ef988716771311 (diff)
downloadglutin-2414f87cebac12c6cde36ff6436642a50d122ed8.tar.gz
glutin-2414f87cebac12c6cde36ff6436642a50d122ed8.zip
Make x11 dynamic
Diffstat (limited to 'src/api/x11/monitor.rs')
-rw-r--r--src/api/x11/monitor.rs32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/api/x11/monitor.rs b/src/api/x11/monitor.rs
index 274aef0..a563d2e 100644
--- a/src/api/x11/monitor.rs
+++ b/src/api/x11/monitor.rs
@@ -7,14 +7,16 @@ use native_monitor::NativeMonitorId;
pub struct MonitorID(pub u32);
pub fn get_available_monitors() -> VecDeque<MonitorID> {
- ensure_thread_init();
+ let xlib = ffi::Xlib::open().unwrap(); // FIXME: gracious handling
+
+ ensure_thread_init(&xlib);
let nb_monitors = unsafe {
- let display = ffi::XOpenDisplay(ptr::null());
+ let display = (xlib.XOpenDisplay)(ptr::null());
if display.is_null() {
panic!("get_available_monitors failed");
}
- let nb_monitors = ffi::XScreenCount(display);
- ffi::XCloseDisplay(display);
+ let nb_monitors = (xlib.XScreenCount)(display);
+ (xlib.XCloseDisplay)(display);
nb_monitors
};
@@ -24,14 +26,16 @@ pub fn get_available_monitors() -> VecDeque<MonitorID> {
}
pub fn get_primary_monitor() -> MonitorID {
- ensure_thread_init();
+ let xlib = ffi::Xlib::open().unwrap(); // FIXME: gracious handling
+
+ ensure_thread_init(&xlib);
let primary_monitor = unsafe {
- let display = ffi::XOpenDisplay(ptr::null());
+ let display = (xlib.XOpenDisplay)(ptr::null());
if display.is_null() {
panic!("get_available_monitors failed");
}
- let primary_monitor = ffi::XDefaultScreen(display);
- ffi::XCloseDisplay(display);
+ let primary_monitor = (xlib.XDefaultScreen)(display);
+ (xlib.XCloseDisplay)(display);
primary_monitor
};
@@ -50,13 +54,15 @@ impl MonitorID {
}
pub fn get_dimensions(&self) -> (u32, u32) {
+ let xlib = ffi::Xlib::open().unwrap(); // FIXME: gracious handling
+
let dimensions = unsafe {
- let display = ffi::XOpenDisplay(ptr::null());
+ let display = (xlib.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);
- ffi::XCloseDisplay(display);
+ let screen = (xlib.XScreenOfDisplay)(display, screen_num as i32);
+ let width = (xlib.XWidthOfScreen)(screen);
+ let height = (xlib.XHeightOfScreen)(screen);
+ (xlib.XCloseDisplay)(display);
(width as u32, height as u32)
};