aboutsummaryrefslogtreecommitdiffstats
path: root/src/os
diff options
context:
space:
mode:
authortomaka <pierre.krieger1708@gmail.com>2015-10-03 10:11:11 +0200
committertomaka <pierre.krieger1708@gmail.com>2015-10-03 10:11:11 +0200
commitc8fd077e17f7a7147d6877f2343c82790b187bd2 (patch)
tree5ecb913e185ea471fb6f3892537b0f5677614ee1 /src/os
parent5e1e7436af2b06350d30420c43e8b4a0dcf8ddfe (diff)
parent8c6a27d42615fc97b1aed31c20c3aff3d25c88d4 (diff)
downloadglutin-c8fd077e17f7a7147d6877f2343c82790b187bd2.tar.gz
glutin-c8fd077e17f7a7147d6877f2343c82790b187bd2.zip
Merge pull request #617 from tomaka/platform-specific
Add an `os` module containing platform-specific traits
Diffstat (limited to 'src/os')
-rw-r--r--src/os/mod.rs9
-rw-r--r--src/os/unix.rs40
-rw-r--r--src/os/windows.rs21
3 files changed, 70 insertions, 0 deletions
diff --git a/src/os/mod.rs b/src/os/mod.rs
new file mode 100644
index 0000000..251a8d4
--- /dev/null
+++ b/src/os/mod.rs
@@ -0,0 +1,9 @@
+//! Contains traits with platform-specific methods in them.
+//!
+//! Contains the follow modules:
+//!
+//! - `unix`
+//! - `windows`
+//!
+pub mod unix;
+pub mod windows;
diff --git a/src/os/unix.rs b/src/os/unix.rs
new file mode 100644
index 0000000..4fef6ef
--- /dev/null
+++ b/src/os/unix.rs
@@ -0,0 +1,40 @@
+#![cfg(any(target_os = "linux", target_os = "dragonfly", target_os = "freebsd"))]
+
+use libc;
+use Window;
+use platform::Window as LinuxWindow;
+
+/// Additional methods on `Window` that are specific to unix.
+pub trait WindowExt {
+ /// Returns a pointer to the `Window` object of xlib that is used by this window.
+ ///
+ /// Returns `None` if the window doesn't use xlib (if it uses wayland for example).
+ ///
+ /// The pointer will become invalid when the glutin `Window` is destroyed.
+ fn get_xlib_window(&self) -> Option<*mut libc::c_void>;
+
+ /// Returns a pointer to the `Display` object of xlib that is used by this window.
+ ///
+ /// Returns `None` if the window doesn't use xlib (if it uses wayland for example).
+ ///
+ /// The pointer will become invalid when the glutin `Window` is destroyed.
+ fn get_xlib_display(&self) -> Option<*mut libc::c_void>;
+}
+
+impl WindowExt for Window {
+ #[inline]
+ fn get_xlib_window(&self) -> Option<*mut libc::c_void> {
+ match self.window {
+ LinuxWindow::X(ref w) => Some(w.get_xlib_window()),
+ _ => None
+ }
+ }
+
+ #[inline]
+ fn get_xlib_display(&self) -> Option<*mut libc::c_void> {
+ match self.window {
+ LinuxWindow::X(ref w) => Some(w.get_xlib_window()),
+ _ => None
+ }
+ }
+}
diff --git a/src/os/windows.rs b/src/os/windows.rs
new file mode 100644
index 0000000..e9ab056
--- /dev/null
+++ b/src/os/windows.rs
@@ -0,0 +1,21 @@
+#![cfg(target_os = "windows")]
+
+use libc;
+use Window;
+
+/// Additional methods on `Window` that are specific to unix.
+pub trait WindowExt {
+ /// Returns a pointer to the `Window` object of xlib that is used by this window.
+ ///
+ /// Returns `None` if the window doesn't use xlib (if it uses wayland for example).
+ ///
+ /// The pointer will become invalid when the glutin `Window` is destroyed.
+ fn get_hwnd(&self) -> *mut libc::c_void;
+}
+
+impl WindowExt for Window {
+ #[inline]
+ fn get_hwnd(&self) -> *mut libc::c_void {
+ self.window.platform_window()
+ }
+}