#[cfg(windows)]
pub(crate) fn cloak_window(window: &dyn iced::window::Window, cloaked: bool) {
use iced::window::raw_window_handle::RawWindowHandle;
use windows_sys::Win32::Foundation::{BOOL, FALSE, HWND, TRUE};
use windows_sys::Win32::Graphics::Dwm::{DWMWA_CLOAK, DwmSetWindowAttribute};
let Ok(handle) = window.window_handle() else {
return;
};
let RawWindowHandle::Win32(win32) = handle.as_raw() else {
return;
};
let hwnd = win32.hwnd.get() as HWND;
let value: BOOL = if cloaked { TRUE } else { FALSE };
unsafe {
let _ = DwmSetWindowAttribute(
hwnd,
DWMWA_CLOAK as u32,
std::ptr::from_ref(&value).cast(),
std::mem::size_of::<BOOL>() as u32,
);
}
}
#[cfg(windows)]
pub(crate) fn set_rounded_corners(window: &dyn iced::window::Window) {
use iced::window::raw_window_handle::RawWindowHandle;
use windows_sys::Win32::Foundation::HWND;
use windows_sys::Win32::Graphics::Dwm::{
DWM_WINDOW_CORNER_PREFERENCE, DWMWA_WINDOW_CORNER_PREFERENCE, DWMWCP_ROUND,
DwmSetWindowAttribute,
};
let Ok(handle) = window.window_handle() else {
return;
};
let RawWindowHandle::Win32(win32) = handle.as_raw() else {
return;
};
let hwnd = win32.hwnd.get() as HWND;
let value: DWM_WINDOW_CORNER_PREFERENCE = DWMWCP_ROUND;
unsafe {
let _ = DwmSetWindowAttribute(
hwnd,
DWMWA_WINDOW_CORNER_PREFERENCE as u32,
std::ptr::from_ref(&value).cast(),
std::mem::size_of::<DWM_WINDOW_CORNER_PREFERENCE>() as u32,
);
}
}
#[cfg(not(windows))]
pub(crate) fn cloak_window(_window: &dyn iced::window::Window, _cloaked: bool) {}
#[cfg(not(windows))]
pub(crate) fn set_rounded_corners(_window: &dyn iced::window::Window) {}
pub(crate) const SUPPORTS_HIDDEN_WINDOW_REUSE: bool = cfg!(windows);