mod macos;
mod windows;
pub use macos::NSVisualEffectMaterial;
#[cfg(windows)]
pub use windows::{is_win10_swca as is_win10, is_win11, is_win7};
pub type Color = (u8, u8, u8, u8);
pub fn apply_blur(window: impl raw_window_handle::HasRawWindowHandle, #[allow(unused)] color: Option<Color>) -> Result<(), Error> {
match window.raw_window_handle() {
#[cfg(target_os = "windows")]
raw_window_handle::RawWindowHandle::Win32(handle) => windows::apply_blur(handle.hwnd as _, color),
_ => Err(Error::UnsupportedPlatform("\"apply_blur()\" is only supported on Windows."))
}
}
pub fn clear_blur(window: impl raw_window_handle::HasRawWindowHandle) -> Result<(), Error> {
match window.raw_window_handle() {
#[cfg(target_os = "windows")]
raw_window_handle::RawWindowHandle::Win32(handle) => windows::clear_blur(handle.hwnd as _),
_ => Err(Error::UnsupportedPlatform("\"clear_blur()\" is only supported on Windows."))
}
}
pub fn apply_acrylic(window: impl raw_window_handle::HasRawWindowHandle, #[allow(unused)] color: Option<Color>) -> Result<(), Error> {
match window.raw_window_handle() {
#[cfg(target_os = "windows")]
raw_window_handle::RawWindowHandle::Win32(handle) => windows::apply_acrylic(handle.hwnd as _, color),
_ => Err(Error::UnsupportedPlatform("\"apply_acrylic()\" is only supported on Windows."))
}
}
pub fn clear_acrylic(window: impl raw_window_handle::HasRawWindowHandle) -> Result<(), Error> {
match window.raw_window_handle() {
#[cfg(target_os = "windows")]
raw_window_handle::RawWindowHandle::Win32(handle) => windows::clear_acrylic(handle.hwnd as _),
_ => Err(Error::UnsupportedPlatform("\"clear_acrylic()\" is only supported on Windows."))
}
}
pub fn apply_mica(window: impl raw_window_handle::HasRawWindowHandle) -> Result<(), Error> {
match window.raw_window_handle() {
#[cfg(target_os = "windows")]
raw_window_handle::RawWindowHandle::Win32(handle) => windows::apply_mica(handle.hwnd as _),
_ => Err(Error::UnsupportedPlatform("\"apply_mica()\" is only supported on Windows."))
}
}
pub fn clear_mica(window: impl raw_window_handle::HasRawWindowHandle) -> Result<(), Error> {
match window.raw_window_handle() {
#[cfg(target_os = "windows")]
raw_window_handle::RawWindowHandle::Win32(handle) => windows::clear_mica(handle.hwnd as _),
_ => Err(Error::UnsupportedPlatform("\"clear_mica()\" is only supported on Windows."))
}
}
pub fn apply_vibrancy(window: impl raw_window_handle::HasRawWindowHandle, #[allow(unused)] effect: NSVisualEffectMaterial) -> Result<(), Error> {
match window.raw_window_handle() {
#[cfg(target_os = "macos")]
raw_window_handle::RawWindowHandle::AppKit(handle) => macos::apply_vibrancy(handle.ns_window as _, effect),
_ => Err(Error::UnsupportedPlatform("\"apply_vibrancy()\" is only supported on macOS."))
}
}
#[derive(Debug)]
pub enum Error {
UnsupportedPlatform(&'static str),
UnsupportedPlatformVersion(&'static str),
NotMainThread(&'static str)
}
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Error::UnsupportedPlatform(e) | Error::UnsupportedPlatformVersion(e) | Error::NotMainThread(e) => {
write!(f, "{}", e)
}
}
}
}