aboutsummaryrefslogtreecommitdiff
path: root/adapters/fparkan-platform-winit/src/lib.rs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-06-23 21:50:32 +0300
committerValentin Popov <valentin@popov.link>2026-06-23 21:50:32 +0300
commita0a4089e4b75296e43a89f9a9ca2592f7fc2f68f (patch)
tree0ccc308da703508e274379385e54ad11d33609bf /adapters/fparkan-platform-winit/src/lib.rs
parentdc7e72961a67ba8f0eab623dd0172df3ced7f74d (diff)
downloadfparkan-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.rs19
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]