From ca6d04cd0edc3ba5e6a75a9598273c0b84e5bb0c Mon Sep 17 00:00:00 2001 From: Federico Terzi Date: Sat, 8 May 2021 12:33:31 +0200 Subject: [PATCH] feat(core): add macOS icon extraction --- espanso/src/cli/worker/ui/icon.rs | 22 ++++++++++++++++--- espanso/src/res/macos/iconsystemdisabled.png | Bin 0 -> 13927 bytes 2 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 espanso/src/res/macos/iconsystemdisabled.png diff --git a/espanso/src/cli/worker/ui/icon.rs b/espanso/src/cli/worker/ui/icon.rs index 5483935..eb12321 100644 --- a/espanso/src/cli/worker/ui/icon.rs +++ b/espanso/src/cli/worker/ui/icon.rs @@ -28,7 +28,13 @@ const WINDOWS_ICO_BINARY: &[u8] = include_bytes!("../../../res/windows/espanso.i #[cfg(target_os = "windows")] const WINDOWS_RED_ICO_BINARY: &[u8] = include_bytes!("../../../res/windows/espansored.ico"); -// TODO: macos + +#[cfg(target_os = "macos")] +const MAC_BINARY: &[u8] = include_bytes!("../../../res/macos/icon.png"); +#[cfg(target_os = "macos")] +const MAC_DISABLED_BINARY: &[u8] = include_bytes!("../../../res/macos/icondisabled.png"); +#[cfg(target_os = "macos")] +const MAC_SYSTEM_DISABLED_BINARY: &[u8] = include_bytes!("../../../res/macos/iconsystemdisabled.png"); #[derive(Debug, Default)] pub struct IconPaths { @@ -54,6 +60,18 @@ pub fn load_icon_paths(runtime_dir: &Path) -> Result { }) } +#[cfg(target_os = "macos")] +pub fn load_icon_paths(runtime_dir: &Path) -> Result { + Ok(IconPaths { + search_icon: Some(extract_icon(ICON_BINARY, &runtime_dir.join("search.png"))?), + tray_icon_normal: Some(extract_icon(MAC_BINARY, &runtime_dir.join("normal.png"))?), + tray_icon_disabled: Some(extract_icon(MAC_DISABLED_BINARY, &runtime_dir.join("disabled.png"))?), + tray_icon_system_disabled: Some(extract_icon(MAC_SYSTEM_DISABLED_BINARY, &runtime_dir.join("systemdisabled.png"))?), + logo: Some(extract_icon(ICON_BINARY, &runtime_dir.join("icon.png"))?), + ..Default::default() + }) +} + #[cfg(target_os = "linux")] pub fn load_icon_paths(runtime_dir: &Path) -> Result { Ok(IconPaths { @@ -63,8 +81,6 @@ pub fn load_icon_paths(runtime_dir: &Path) -> Result { }) } -// TODO: macos - // TODO: test fn extract_icon(data: &[u8], target_file: &Path) -> Result { if target_file.exists() { diff --git a/espanso/src/res/macos/iconsystemdisabled.png b/espanso/src/res/macos/iconsystemdisabled.png new file mode 100644 index 0000000000000000000000000000000000000000..7e87b2b911858d318d6185918320aa303ec67ec3 GIT binary patch literal 13927 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