(fullscreen: bool)
| 62 | static mut WINDOWED_RECT: RECT = RECT { left: 0, top: 0, right: 0, bottom: 0 }; |
| 63 | |
| 64 | pub fn set_fullscreen(fullscreen: bool) { |
| 65 | unsafe { |
| 66 | let Some(hwnd) = HWND_GLOBAL else { return }; |
| 67 | |
| 68 | if fullscreen && !IS_FULLSCREEN { |
| 69 | // Save current style and window rect for restore |
| 70 | WINDOWED_STYLE = GetWindowLongW(hwnd, GWL_STYLE) as u32; |
| 71 | let _ = GetWindowRect(hwnd, &mut WINDOWED_RECT); |
| 72 | |
| 73 | // Get monitor dimensions |
| 74 | let monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); |
| 75 | let mut mi: MONITORINFO = std::mem::zeroed(); |
| 76 | mi.cbSize = std::mem::size_of::<MONITORINFO>() as u32; |
| 77 | let _ = GetMonitorInfoW(monitor, &mut mi); |
| 78 | |
| 79 | // Set borderless fullscreen |
| 80 | SetWindowLongW(hwnd, GWL_STYLE, (WS_POPUP | WS_VISIBLE).0 as i32); |
| 81 | let _ = SetWindowPos( |
| 82 | hwnd, HWND_TOP, |
| 83 | mi.rcMonitor.left, mi.rcMonitor.top, |
| 84 | mi.rcMonitor.right - mi.rcMonitor.left, |
| 85 | mi.rcMonitor.bottom - mi.rcMonitor.top, |
| 86 | SWP_FRAMECHANGED | SWP_NOOWNERZORDER, |
| 87 | ); |
| 88 | IS_FULLSCREEN = true; |
| 89 | } else if !fullscreen && IS_FULLSCREEN { |
| 90 | // Restore windowed mode |
| 91 | SetWindowLongW(hwnd, GWL_STYLE, WINDOWED_STYLE as i32); |
| 92 | let _ = SetWindowPos( |
| 93 | hwnd, None, |
| 94 | WINDOWED_RECT.left, WINDOWED_RECT.top, |
| 95 | WINDOWED_RECT.right - WINDOWED_RECT.left, |
| 96 | WINDOWED_RECT.bottom - WINDOWED_RECT.top, |
| 97 | SWP_FRAMECHANGED | SWP_NOOWNERZORDER | SWP_NOZORDER, |
| 98 | ); |
| 99 | IS_FULLSCREEN = false; |
| 100 | } |
| 101 | } |
| 102 | } |
| 103 | |
| 104 | pub fn toggle_fullscreen() { |
| 105 | unsafe { set_fullscreen(!IS_FULLSCREEN); } |
no outgoing calls
no test coverage detected