aboutsummaryrefslogtreecommitdiffstats
path: root/src/os
diff options
context:
space:
mode:
authorPierre Krieger <pierre.krieger1708@gmail.com>2015-09-25 18:04:55 +0200
committerPierre Krieger <pierre.krieger1708@gmail.com>2015-10-03 09:53:37 +0200
commit8c6a27d42615fc97b1aed31c20c3aff3d25c88d4 (patch)
tree1e08975b0bbfa982ead924ac67b2c873ec55ea53 /src/os
parent9fccb2e06e15f56f270da4f7cbd5fa39b49b6826 (diff)
downloadglutin-8c6a27d42615fc97b1aed31c20c3aff3d25c88d4.tar.gz
glutin-8c6a27d42615fc97b1aed31c20c3aff3d25c88d4.zip
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()
+ }
+}