diff --git a/MicStatusAI/Models/MicrophoneStatus.swift b/MicStatusAI/Models/MicrophoneStatus.swift index fcbc1e7..b9d12d3 100644 --- a/MicStatusAI/Models/MicrophoneStatus.swift +++ b/MicStatusAI/Models/MicrophoneStatus.swift @@ -31,26 +31,29 @@ enum MicrophoneStatus: Equatable { } } - @MainActor var statusBarImage: NSImage { - let iconSize = 18.0 - let renderer = ImageRenderer( - content: Image(systemName: symbolName) - .symbolRenderingMode(.monochrome) - .font(.system(size: 14, weight: .semibold)) - .foregroundStyle(color) - .frame(width: iconSize, height: iconSize) - ) - renderer.scale = NSScreen.main?.backingScaleFactor ?? 2 + private var statusBarAssetName: String { + switch self { + case .active: + "StatusBarActive" + case .muted: + "StatusBarMuted" + case .stopped: + "StatusBarStopped" + case .unavailable: + "StatusBarUnavailable" + } + } - guard let image = renderer.nsImage else { - let fallbackImage = NSImage( - systemSymbolName: symbolName, - accessibilityDescription: accessibilityLabel - ) ?? NSImage() - fallbackImage.isTemplate = true - return fallbackImage + @MainActor var statusBarImage: NSImage { + let assetName = NSImage.Name(statusBarAssetName) + guard let sourceImage = NSImage(named: assetName), + let image = sourceImage.copy() as? NSImage + else { + assertionFailure("Missing status bar image asset: \(statusBarAssetName)") + return NSImage() } + image.size = NSSize(width: 18, height: 18) image.isTemplate = false return image } diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/Contents.json b/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/Contents.json new file mode 100644 index 0000000..77de1b0 --- /dev/null +++ b/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "StatusBarActive.png", + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "StatusBarActive@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive.png new file mode 100644 index 0000000..19b3069 Binary files /dev/null and b/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive.png differ diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive@2x.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive@2x.png new file mode 100644 index 0000000..c688a6a Binary files /dev/null and b/MicStatusAI/Resources/Assets.xcassets/StatusBarActive.imageset/StatusBarActive@2x.png differ diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/Contents.json b/MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/Contents.json new file mode 100644 index 0000000..501b08c --- /dev/null +++ b/MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "StatusBarMuted.png", + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "StatusBarMuted@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/StatusBarMuted.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/StatusBarMuted.png new file mode 100644 index 0000000..87528a4 Binary files /dev/null and b/MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/StatusBarMuted.png differ diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/StatusBarMuted@2x.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/StatusBarMuted@2x.png new file mode 100644 index 0000000..f5a354b Binary files /dev/null and b/MicStatusAI/Resources/Assets.xcassets/StatusBarMuted.imageset/StatusBarMuted@2x.png differ diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/Contents.json b/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/Contents.json new file mode 100644 index 0000000..aa4b646 --- /dev/null +++ b/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "StatusBarStopped.png", + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "StatusBarStopped@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped.png new file mode 100644 index 0000000..21e4392 Binary files /dev/null and b/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped.png differ diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped@2x.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped@2x.png new file mode 100644 index 0000000..25ddfb5 Binary files /dev/null and b/MicStatusAI/Resources/Assets.xcassets/StatusBarStopped.imageset/StatusBarStopped@2x.png differ diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/Contents.json b/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/Contents.json new file mode 100644 index 0000000..b8f9d67 --- /dev/null +++ b/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "StatusBarUnavailable.png", + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "StatusBarUnavailable@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable.png new file mode 100644 index 0000000..08e3eac Binary files /dev/null and b/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable.png differ diff --git a/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable@2x.png b/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable@2x.png new file mode 100644 index 0000000..8c0312c Binary files /dev/null and b/MicStatusAI/Resources/Assets.xcassets/StatusBarUnavailable.imageset/StatusBarUnavailable@2x.png differ