1
0

trayicon.rs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //! tray icon
  2. use dioxus_core::{
  3. prelude::{provide_context, try_consume_context},
  4. use_hook,
  5. };
  6. #[cfg(not(any(target_os = "ios", target_os = "android")))]
  7. pub use tray_icon::*;
  8. /// tray icon menu type trait
  9. #[cfg(not(any(target_os = "ios", target_os = "android")))]
  10. pub type DioxusTrayMenu = tray_icon::menu::Menu;
  11. #[cfg(any(target_os = "ios", target_os = "android"))]
  12. pub type DioxusTrayMenu = ();
  13. /// tray icon icon type trait
  14. #[cfg(not(any(target_os = "ios", target_os = "android")))]
  15. pub type DioxusTrayIcon = tray_icon::Icon;
  16. #[cfg(any(target_os = "ios", target_os = "android"))]
  17. pub type DioxusTrayIcon = ();
  18. /// tray icon type trait
  19. #[cfg(not(any(target_os = "ios", target_os = "android")))]
  20. pub type DioxusTray = tray_icon::TrayIcon;
  21. #[cfg(any(target_os = "ios", target_os = "android"))]
  22. pub type DioxusTray = ();
  23. /// initializes a tray icon
  24. #[allow(unused)]
  25. pub fn init_tray_icon(menu: DioxusTrayMenu, icon: Option<DioxusTrayIcon>) -> DioxusTray {
  26. #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))]
  27. {
  28. let builder = tray_icon::TrayIconBuilder::new()
  29. .with_menu(Box::new(menu))
  30. .with_menu_on_left_click(false)
  31. .with_icon(match icon {
  32. Some(value) => value,
  33. None => tray_icon::Icon::from_rgba(
  34. include_bytes!("./assets/default_icon.bin").to_vec(),
  35. 460,
  36. 460,
  37. )
  38. .expect("image parse failed"),
  39. });
  40. provide_context(builder.build().expect("tray icon builder failed"))
  41. }
  42. }
  43. /// Returns a default tray icon menu
  44. pub fn default_tray_icon() -> DioxusTrayMenu {
  45. #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))]
  46. {
  47. use tray_icon::menu::{Menu, PredefinedMenuItem};
  48. let tray_menu = Menu::new();
  49. tray_menu
  50. .append_items(&[&PredefinedMenuItem::quit(None)])
  51. .unwrap();
  52. tray_menu
  53. }
  54. }
  55. /// Provides a hook to the tray icon
  56. #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))]
  57. pub fn use_tray_icon() -> Option<tray_icon::TrayIcon> {
  58. use_hook(try_consume_context)
  59. }