diff --git a/src/lib.rs b/src/lib.rs index b590195..3674a1b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -39,6 +39,7 @@ mod borrowed; mod haiku; mod ohos; mod redox; +mod uefi; mod uikit; mod unix; mod web; @@ -50,6 +51,7 @@ pub use borrowed::{DisplayHandle, HasDisplayHandle, HasWindowHandle, WindowHandl pub use haiku::{HaikuDisplayHandle, HaikuWindowHandle}; pub use ohos::{OhosDisplayHandle, OhosNdkWindowHandle}; pub use redox::{OrbitalDisplayHandle, OrbitalWindowHandle}; +pub use uefi::{UefiDisplayHandle, UefiWindowHandle}; pub use uikit::{UiKitDisplayHandle, UiKitWindowHandle}; pub use unix::{ DrmDisplayHandle, DrmWindowHandle, GbmDisplayHandle, GbmWindowHandle, WaylandDisplayHandle, @@ -207,6 +209,11 @@ pub enum RawWindowHandle { /// ## Availability Hints /// This variant is used on HaikuOS. Haiku(HaikuWindowHandle), + /// A window handle for UEFI. + /// + /// ## Availability Hints + /// This variant is used on UEFI. + Uefi(UefiWindowHandle), } /// Display that wraps around a raw display handle. @@ -341,6 +348,11 @@ pub enum RawDisplayHandle { /// ## Availability Hints /// This variant is used on HaikuOS. Haiku(HaikuDisplayHandle), + /// A raw display handle for UEFI. + /// + /// ## Availability Hints + /// This variant is used on UEFI. + Uefi(UefiDisplayHandle), } /// An error that can occur while fetching a display or window handle. @@ -413,6 +425,7 @@ from_impl!(RawDisplayHandle, Windows, WindowsDisplayHandle); from_impl!(RawDisplayHandle, Web, WebDisplayHandle); from_impl!(RawDisplayHandle, Android, AndroidDisplayHandle); from_impl!(RawDisplayHandle, Haiku, HaikuDisplayHandle); +from_impl!(RawDisplayHandle, Uefi, UefiDisplayHandle); from_impl!(RawWindowHandle, UiKit, UiKitWindowHandle); from_impl!(RawWindowHandle, AppKit, AppKitWindowHandle); @@ -434,6 +447,7 @@ from_impl!( ); from_impl!(RawWindowHandle, AndroidNdk, AndroidNdkWindowHandle); from_impl!(RawWindowHandle, Haiku, HaikuWindowHandle); +from_impl!(RawWindowHandle, Uefi, UefiWindowHandle); #[cfg(test)] mod tests { diff --git a/src/uefi.rs b/src/uefi.rs new file mode 100644 index 0000000..06436cd --- /dev/null +++ b/src/uefi.rs @@ -0,0 +1,43 @@ +use core::ffi::c_void; +use core::ptr::NonNull; + +/// Raw display handle for UEFI. +#[non_exhaustive] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct UefiDisplayHandle { + /// The UEFI Graphics Output Protocol handle. + /// + /// From the UEFI spec on , can be found in versions since 2.0 as + /// `EFI_GRAPHICS_OUTPUT_PROTOCOL`. + pub handle: NonNull, +} + +impl UefiDisplayHandle { + /// Create a new empty display handle. + /// + /// + /// # Example + /// + /// ``` + /// # use core::ptr::NonNull; + /// # use raw_window_handle::UefiDisplayHandle; + /// # type GraphicsOutput = (); + /// let ptr: NonNull; + /// # ptr = NonNull::from(&()); + /// let handle = UefiDisplayHandle::new(ptr.cast()); + /// ``` + pub fn new(handle: NonNull) -> Self { + Self { handle } + } +} + +/// Raw window handle for UEFI. +#[non_exhaustive] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct UefiWindowHandle {} + +impl UefiWindowHandle { + pub fn new() -> Self { + Self {} + } +}