windows.rs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright 2019-2024 Tauri Programme within The Commons Conservancy
  2. // SPDX-License-Identifier: Apache-2.0
  3. // SPDX-License-Identifier: MIT
  4. #![allow(non_snake_case)]
  5. #![allow(non_camel_case_types)]
  6. #![allow(clippy::upper_case_acronyms)]
  7. use std::ffi::c_void;
  8. use crate::utils::config::WindowEffectsConfig;
  9. use crate::window::{Color, Effect};
  10. use raw_window_handle::HasWindowHandle;
  11. use windows::Win32::Foundation::HWND;
  12. pub fn apply_effects(window: impl HasWindowHandle, effects: WindowEffectsConfig) {
  13. let WindowEffectsConfig { effects, color, .. } = effects;
  14. let effect = if let Some(effect) = effects.iter().find(|e| {
  15. matches!(
  16. e,
  17. Effect::Mica
  18. | Effect::MicaDark
  19. | Effect::MicaLight
  20. | Effect::Acrylic
  21. | Effect::Blur
  22. | Effect::Tabbed
  23. | Effect::TabbedDark
  24. | Effect::TabbedLight
  25. )
  26. }) {
  27. effect
  28. } else {
  29. return;
  30. };
  31. match effect {
  32. Effect::Blur => window_vibrancy::apply_blur(window, color.map(Into::into)),
  33. Effect::Acrylic => window_vibrancy::apply_acrylic(window, color.map(Into::into)),
  34. Effect::Mica => window_vibrancy::apply_mica(window, None),
  35. Effect::MicaDark => window_vibrancy::apply_mica(window, Some(true)),
  36. Effect::MicaLight => window_vibrancy::apply_mica(window, Some(false)),
  37. Effect::Tabbed => window_vibrancy::apply_tabbed(window, None),
  38. Effect::TabbedDark => window_vibrancy::apply_tabbed(window, Some(true)),
  39. Effect::TabbedLight => window_vibrancy::apply_tabbed(window, Some(false)),
  40. _ => unreachable!(),
  41. };
  42. }
  43. pub fn clear_effects(window: impl HasWindowHandle) {
  44. window_vibrancy::clear_blur(&window);
  45. window_vibrancy::clear_acrylic(&window);
  46. window_vibrancy::clear_mica(&window);
  47. }