summaryrefslogtreecommitdiffstats
path: root/third_party/rust/raw-window-handle/src/unix.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/raw-window-handle/src/unix.rs')
-rw-r--r--third_party/rust/raw-window-handle/src/unix.rs252
1 files changed, 252 insertions, 0 deletions
diff --git a/third_party/rust/raw-window-handle/src/unix.rs b/third_party/rust/raw-window-handle/src/unix.rs
new file mode 100644
index 0000000000..9035fc2563
--- /dev/null
+++ b/third_party/rust/raw-window-handle/src/unix.rs
@@ -0,0 +1,252 @@
+use core::ffi::c_void;
+use core::ptr;
+
+use cty::{c_int, c_ulong};
+
+/// Raw display handle for Xlib.
+///
+/// ## Construction
+/// ```
+/// # use raw_window_handle::XlibDisplayHandle;
+/// let display_handle = XlibDisplayHandle::empty();
+/// /* set fields */
+/// ```
+#[non_exhaustive]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct XlibDisplayHandle {
+ /// A pointer to an Xlib `Display`.
+ pub display: *mut c_void,
+
+ /// An X11 screen to use with this display handle.
+ ///
+ /// Note, that X11 could have multiple screens, however
+ /// graphics APIs could work only with one screen at the time,
+ /// given that multiple screens usually reside on different GPUs.
+ pub screen: c_int,
+}
+
+/// Raw window handle for Xlib.
+///
+/// ## Construction
+/// ```
+/// # use raw_window_handle::XlibWindowHandle;
+/// let window_handle = XlibWindowHandle::empty();
+/// /* set fields */
+/// ```
+#[non_exhaustive]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct XlibWindowHandle {
+ /// An Xlib `Window`.
+ pub window: c_ulong,
+ /// An Xlib visual ID, or 0 if unknown.
+ pub visual_id: c_ulong,
+}
+
+/// Raw display handle for Xcb.
+///
+/// ## Construction
+/// ```
+/// # use raw_window_handle::XcbDisplayHandle;
+/// let display_handle = XcbDisplayHandle::empty();
+/// /* set fields */
+/// ```
+#[non_exhaustive]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct XcbDisplayHandle {
+ /// A pointer to an X server `xcb_connection_t`.
+ pub connection: *mut c_void,
+
+ /// An X11 screen to use with this display handle.
+ ///
+ /// Note, that X11 could have multiple screens, however
+ /// graphics APIs could work only with one screen at the time,
+ /// given that multiple screens usually reside on different GPUs.
+ pub screen: c_int,
+}
+
+/// Raw window handle for Xcb.
+///
+/// ## Construction
+/// ```
+/// # use raw_window_handle::XcbWindowHandle;
+/// let window_handle = XcbWindowHandle::empty();
+/// /* set fields */
+/// ```
+#[non_exhaustive]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct XcbWindowHandle {
+ /// An X11 `xcb_window_t`.
+ pub window: u32, // Based on xproto.h
+ /// An X11 `xcb_visualid_t`, or 0 if unknown.
+ pub visual_id: u32,
+}
+
+/// Raw display handle for Wayland.
+///
+/// ## Construction
+/// ```
+/// # use raw_window_handle::WaylandDisplayHandle;
+/// let display_handle = WaylandDisplayHandle::empty();
+/// /* set fields */
+/// ```
+#[non_exhaustive]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct WaylandDisplayHandle {
+ /// A pointer to a `wl_display`.
+ pub display: *mut c_void,
+}
+
+/// Raw window handle for Wayland.
+///
+/// ## Construction
+/// ```
+/// # use raw_window_handle::WaylandWindowHandle;
+/// let window_handle = WaylandWindowHandle::empty();
+/// /* set fields */
+/// ```
+#[non_exhaustive]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct WaylandWindowHandle {
+ /// A pointer to a `wl_surface`.
+ pub surface: *mut c_void,
+}
+
+/// Raw display handle for the Linux Kernel Mode Set/Direct Rendering Manager.
+///
+/// ## Construction
+/// ```
+/// # use raw_window_handle::DrmDisplayHandle;
+/// let display_handle = DrmDisplayHandle::empty();
+/// /* set fields */
+/// ```
+#[non_exhaustive]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct DrmDisplayHandle {
+ /// The drm file descriptor.
+ pub fd: i32,
+}
+
+/// Raw window handle for the Linux Kernel Mode Set/Direct Rendering Manager.
+///
+/// ## Construction
+/// ```
+/// # use raw_window_handle::DrmWindowHandle;
+/// let handle = DrmWindowHandle::empty();
+/// /* set fields */
+/// ```
+#[non_exhaustive]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct DrmWindowHandle {
+ /// The primary drm plane handle.
+ pub plane: u32,
+}
+
+/// Raw display handle for the Linux Generic Buffer Manager.
+///
+/// ## Construction
+/// ```
+/// # use raw_window_handle::GbmDisplayHandle;
+/// let display_handle = GbmDisplayHandle::empty();
+/// /* set fields */
+/// ```
+#[non_exhaustive]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct GbmDisplayHandle {
+ /// The gbm device.
+ pub gbm_device: *mut c_void,
+}
+
+/// Raw window handle for the Linux Generic Buffer Manager.
+///
+/// ## Construction
+/// ```
+/// # use raw_window_handle::GbmWindowHandle;
+/// let handle = GbmWindowHandle::empty();
+/// /* set fields */
+/// ```
+#[non_exhaustive]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub struct GbmWindowHandle {
+ /// The gbm surface.
+ pub gbm_surface: *mut c_void,
+}
+
+impl XlibDisplayHandle {
+ pub fn empty() -> Self {
+ Self {
+ display: ptr::null_mut(),
+ screen: 0,
+ }
+ }
+}
+
+impl XlibWindowHandle {
+ pub fn empty() -> Self {
+ Self {
+ window: 0,
+ visual_id: 0,
+ }
+ }
+}
+
+impl XcbDisplayHandle {
+ pub fn empty() -> Self {
+ Self {
+ connection: ptr::null_mut(),
+ screen: 0,
+ }
+ }
+}
+
+impl XcbWindowHandle {
+ pub fn empty() -> Self {
+ Self {
+ window: 0,
+ visual_id: 0,
+ }
+ }
+}
+
+impl WaylandDisplayHandle {
+ pub fn empty() -> Self {
+ Self {
+ display: ptr::null_mut(),
+ }
+ }
+}
+
+impl WaylandWindowHandle {
+ pub fn empty() -> Self {
+ Self {
+ surface: ptr::null_mut(),
+ }
+ }
+}
+
+impl DrmDisplayHandle {
+ pub fn empty() -> Self {
+ Self { fd: 0 }
+ }
+}
+
+impl DrmWindowHandle {
+ pub fn empty() -> Self {
+ Self { plane: 0 }
+ }
+}
+
+impl GbmDisplayHandle {
+ pub fn empty() -> Self {
+ Self {
+ gbm_device: ptr::null_mut(),
+ }
+ }
+}
+
+impl GbmWindowHandle {
+ pub fn empty() -> Self {
+ Self {
+ gbm_surface: ptr::null_mut(),
+ }
+ }
+}