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 | |
| parent | dc7e72961a67ba8f0eab623dd0172df3ced7f74d (diff) | |
| download | fparkan-a0a4089e4b75296e43a89f9a9ca2592f7fc2f68f.tar.xz fparkan-a0a4089e4b75296e43a89f9a9ca2592f7fc2f68f.zip | |
feat: expose native window handles
Diffstat (limited to 'adapters')
| -rw-r--r-- | adapters/fparkan-platform-winit/Cargo.toml | 1 | ||||
| -rw-r--r-- | adapters/fparkan-platform-winit/src/lib.rs | 19 |
2 files changed, 18 insertions, 2 deletions
diff --git a/adapters/fparkan-platform-winit/Cargo.toml b/adapters/fparkan-platform-winit/Cargo.toml index e0ec438..d8bbc58 100644 --- a/adapters/fparkan-platform-winit/Cargo.toml +++ b/adapters/fparkan-platform-winit/Cargo.toml @@ -7,6 +7,7 @@ repository.workspace = true [dependencies] fparkan-platform = { path = "../../crates/fparkan-platform" } +raw-window-handle = "0.6" winit = "0.30" [lints] 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] |
