diff options
| author | Valentin Popov <valentin@popov.link> | 2026-06-23 21:50:32 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-06-23 21:50:32 +0300 |
| commit | a0a4089e4b75296e43a89f9a9ca2592f7fc2f68f (patch) | |
| tree | 0ccc308da703508e274379385e54ad11d33609bf /adapters/fparkan-platform-winit/src/lib.rs | |
| parent | dc7e72961a67ba8f0eab623dd0172df3ced7f74d (diff) | |
| download | fparkan-a0a4089e4b75296e43a89f9a9ca2592f7fc2f68f.tar.xz fparkan-a0a4089e4b75296e43a89f9a9ca2592f7fc2f68f.zip | |
feat: expose native window handles
Diffstat (limited to 'adapters/fparkan-platform-winit/src/lib.rs')
| -rw-r--r-- | adapters/fparkan-platform-winit/src/lib.rs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/adapters/fparkan-platform-winit/src/lib.rs b/adapters/fparkan-platform-winit/src/lib.rs index 496d955..9a9941c 100644 --- a/adapters/fparkan-platform-winit/src/lib.rs +++ b/adapters/fparkan-platform-winit/src/lib.rs @@ -21,9 +21,10 @@ //! Minimal `winit`-backed platform adapter shim. use fparkan_platform::{ - EventSource, MonotonicClock, MonotonicInstant, PhysicalSize, PlatformError, PlatformEvent, - RenderRequest, WindowHandle, WindowPort, + EventSource, MonotonicClock, MonotonicInstant, NativeWindowHandles, PhysicalSize, + PlatformError, PlatformEvent, RenderRequest, WindowHandle, WindowPort, }; +use raw_window_handle::{HasDisplayHandle, HasWindowHandle}; use std::collections::VecDeque; use std::sync::atomic::{AtomicU64, Ordering}; use std::time::{SystemTime, UNIX_EPOCH}; @@ -153,6 +154,7 @@ pub struct WinitWindow { focused: bool, minimized: bool, occluded: bool, + native_handles: Option<NativeWindowHandles>, } impl WinitWindow { @@ -171,6 +173,7 @@ impl WinitWindow { focused: true, minimized: false, occluded: false, + native_handles: native_handles(window), } } @@ -187,6 +190,7 @@ impl WinitWindow { focused: true, minimized: false, occluded: false, + native_handles: None, } } @@ -224,6 +228,16 @@ impl WindowPort for WinitWindow { fn handle(&self) -> WindowHandle { self.handle } + + fn native_handles(&self) -> Option<NativeWindowHandles> { + self.native_handles + } +} + +fn native_handles(window: &Window) -> Option<NativeWindowHandles> { + let display = window.display_handle().ok()?.as_raw(); + let window = window.window_handle().ok()?.as_raw(); + Some(NativeWindowHandles { display, window }) } #[cfg(test)] @@ -259,6 +273,7 @@ mod tests { height: 360 } ); + assert!(window.native_handles().is_none()); } #[test] |
