telar_platform_winit/
window.rs1use std::sync::Arc;
2
3use platform_core::Window as PlatformWindow;
4use raw_window_handle::{
5 DisplayHandle, HandleError, HasDisplayHandle, HasWindowHandle, WindowHandle,
6};
7use winit::window::Window as WinitInnerWindow;
8
9#[derive(Clone)]
10pub struct WinitWindow(pub Arc<WinitInnerWindow>);
11
12impl HasWindowHandle for WinitWindow {
13 fn window_handle(&self) -> Result<WindowHandle<'_>, HandleError> {
14 self.0.window_handle()
15 }
16}
17
18impl HasDisplayHandle for WinitWindow {
19 fn display_handle(&self) -> Result<DisplayHandle<'_>, HandleError> {
20 self.0.display_handle()
21 }
22}
23
24impl PlatformWindow for WinitWindow {
25 fn width(&self) -> u32 {
26 self.0.inner_size().width
27 }
28
29 fn height(&self) -> u32 {
30 self.0.inner_size().height
31 }
32
33 fn request_redraw(&self) {
34 self.0.request_redraw();
35 }
36
37 fn scale_factor(&self) -> f64 {
38 self.0.scale_factor()
39 }
40
41 fn prefers_dark(&self) -> Option<bool> {
42 self.0.theme().map(|t| t == winit::window::Theme::Dark)
45 }
46
47 fn drag_window(&self) {
48 let _ = self.0.drag_window();
49 }
50
51 fn set_minimized(&self, minimized: bool) {
52 self.0.set_minimized(minimized);
53 }
54
55 fn set_maximized(&self, maximized: bool) {
56 self.0.set_maximized(maximized);
57 }
58
59 fn is_maximized(&self) -> bool {
60 self.0.is_maximized()
61 }
62
63 fn set_title(&self, title: &str) {
64 self.0.set_title(title);
65 }
66
67 fn focus_window(&self) {
68 self.0.focus_window();
69 }
70
71 fn set_cursor(&self, cursor: platform_core::Cursor) {
72 use platform_core::Cursor;
73 use winit::window::CursorIcon;
74 self.0.set_cursor(match cursor {
75 Cursor::Default => CursorIcon::Default,
76 Cursor::Pointer => CursorIcon::Pointer,
77 Cursor::Crosshair => CursorIcon::Crosshair,
78 Cursor::Grab => CursorIcon::Grab,
79 Cursor::Grabbing => CursorIcon::Grabbing,
80 Cursor::ColResize => CursorIcon::ColResize,
81 Cursor::RowResize => CursorIcon::RowResize,
82 Cursor::Text => CursorIcon::Text,
83 Cursor::NotAllowed => CursorIcon::NotAllowed,
84 Cursor::Wait => CursorIcon::Wait,
85 });
86 }
87}