diff --git a/CodexLinxDisplay.xcodeproj/project.pbxproj b/CodexLinxDisplay.xcodeproj/project.pbxproj index 549cbec..2382591 100644 --- a/CodexLinxDisplay.xcodeproj/project.pbxproj +++ b/CodexLinxDisplay.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + A1C0A55E0000000000000001 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A1C0A55E0000000000000002 /* Assets.xcassets */; }; 19603256ADE889638AF0F1A3 /* UsageCardRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57966CEDE2F0E2EBF43CDCA1 /* UsageCardRenderer.swift */; }; 1C12E0F24452CBE735D2C41D /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27519CC2F435B5DB276ACC36 /* main.swift */; }; 20785F3A780E830C7CB33CCB /* ImageAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8F06F104E1BF95F00951024 /* ImageAPIClient.swift */; }; @@ -42,6 +43,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + A1C0A55E0000000000000002 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 0C0A9F7078CF4808E985B531 /* MenuBarContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarContentView.swift; sourceTree = ""; }; 1AAE642680E0C1C25BC8F331 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 27519CC2F435B5DB276ACC36 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; @@ -105,12 +107,21 @@ children = ( 1139D66A6A163C213807C508 /* App */, 822552AA42889C6D179D08FA /* Preview */, + A1C0A55E0000000000000003 /* Resources */, 95B6FE6A0AF26F19F07D3B1C /* Shared */, 04330F53A8AEB47BB6776726 /* Tests */, 4ACF797FA7096EE9FC07B331 /* Products */, ); sourceTree = ""; }; + A1C0A55E0000000000000003 /* Resources */ = { + isa = PBXGroup; + children = ( + A1C0A55E0000000000000002 /* Assets.xcassets */, + ); + path = Resources; + sourceTree = ""; + }; 4ACF797FA7096EE9FC07B331 /* Products */ = { isa = PBXGroup; children = ( @@ -152,6 +163,7 @@ buildPhases = ( 5F5AF8DA6E270CFC1298D6C5 /* Sources */, B3ED7D4125E0B120B9908BE4 /* Frameworks */, + A1C0A55E0000000000000004 /* Resources */, ); buildRules = ( ); @@ -235,6 +247,17 @@ }; /* End PBXProject section */ +/* Begin PBXResourcesBuildPhase section */ + A1C0A55E0000000000000004 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A1C0A55E0000000000000001 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 5F5AF8DA6E270CFC1298D6C5 /* Sources */ = { isa = PBXSourcesBuildPhase; diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..64dc11e --- /dev/null +++ b/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "filename" : "icon_16x16.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "filename" : "icon_16x16@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "filename" : "icon_32x32.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "filename" : "icon_32x32@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "filename" : "icon_128x128.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "filename" : "icon_128x128@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "filename" : "icon_256x256.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "filename" : "icon_256x256@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "filename" : "icon_512x512.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "filename" : "icon_512x512@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon_128x128.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon_128x128.png new file mode 100644 index 0000000..a641bd1 Binary files /dev/null and b/Resources/Assets.xcassets/AppIcon.appiconset/icon_128x128.png differ diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png new file mode 100644 index 0000000..0fdb4c4 Binary files /dev/null and b/Resources/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png differ diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon_16x16.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon_16x16.png new file mode 100644 index 0000000..129c420 Binary files /dev/null and b/Resources/Assets.xcassets/AppIcon.appiconset/icon_16x16.png differ diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png new file mode 100644 index 0000000..b7e9931 Binary files /dev/null and b/Resources/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png differ diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon_256x256.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon_256x256.png new file mode 100644 index 0000000..0fdb4c4 Binary files /dev/null and b/Resources/Assets.xcassets/AppIcon.appiconset/icon_256x256.png differ diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png new file mode 100644 index 0000000..eaaaaa5 Binary files /dev/null and b/Resources/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png differ diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon_32x32.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon_32x32.png new file mode 100644 index 0000000..b7e9931 Binary files /dev/null and b/Resources/Assets.xcassets/AppIcon.appiconset/icon_32x32.png differ diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png new file mode 100644 index 0000000..58a1ae1 Binary files /dev/null and b/Resources/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png differ diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon_512x512.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon_512x512.png new file mode 100644 index 0000000..eaaaaa5 Binary files /dev/null and b/Resources/Assets.xcassets/AppIcon.appiconset/icon_512x512.png differ diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png new file mode 100644 index 0000000..59934fc Binary files /dev/null and b/Resources/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png differ diff --git a/Resources/Assets.xcassets/Contents.json b/Resources/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Resources/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Resources/Assets.xcassets/MenuBarIcon.imageset/Contents.json b/Resources/Assets.xcassets/MenuBarIcon.imageset/Contents.json new file mode 100644 index 0000000..107fbb3 --- /dev/null +++ b/Resources/Assets.xcassets/MenuBarIcon.imageset/Contents.json @@ -0,0 +1,25 @@ +{ + "images" : [ + { + "filename" : "menu-bar-template.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "menu-bar-template@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Resources/Assets.xcassets/MenuBarIcon.imageset/menu-bar-template.png b/Resources/Assets.xcassets/MenuBarIcon.imageset/menu-bar-template.png new file mode 100644 index 0000000..5f07487 Binary files /dev/null and b/Resources/Assets.xcassets/MenuBarIcon.imageset/menu-bar-template.png differ diff --git a/Resources/Assets.xcassets/MenuBarIcon.imageset/menu-bar-template@2x.png b/Resources/Assets.xcassets/MenuBarIcon.imageset/menu-bar-template@2x.png new file mode 100644 index 0000000..d8ae3d6 Binary files /dev/null and b/Resources/Assets.xcassets/MenuBarIcon.imageset/menu-bar-template@2x.png differ diff --git a/Sources/App/AppLifecycleController.swift b/Sources/App/AppLifecycleController.swift index 7bbe193..fb884bd 100644 --- a/Sources/App/AppLifecycleController.swift +++ b/Sources/App/AppLifecycleController.swift @@ -133,12 +133,14 @@ final class StatusItemController: NSObject { private func updateStatusItem() { guard let button = statusItem.button else { return } - let symbolName = model.displayMode == .customImage ? "photo" : "rectangle.portrait" - let image = NSImage( - systemSymbolName: symbolName, - accessibilityDescription: "Codex 屏显" - ) + let image = NSImage(named: "MenuBarIcon") + ?? NSImage( + systemSymbolName: "rectangle.portrait", + accessibilityDescription: "Codex 屏显" + ) image?.isTemplate = true + image?.size = NSSize(width: 18, height: 18) + image?.accessibilityDescription = "Codex 屏显" button.image = image button.toolTip = statusDescription } diff --git a/Tests/AppLifecycleTests.swift b/Tests/AppLifecycleTests.swift index 95a81d1..0c2d4bf 100644 --- a/Tests/AppLifecycleTests.swift +++ b/Tests/AppLifecycleTests.swift @@ -24,6 +24,8 @@ final class AppLifecycleTests: XCTestCase { @MainActor func testStatusItemUsesAVisibleFixedWidthButton() { + XCTAssertNotNil(NSImage(named: "MenuBarIcon")) + let model = AppModel() let controller = StatusItemController( model: model, @@ -36,6 +38,8 @@ final class AppLifecycleTests: XCTestCase { XCTAssertNotNil(controller.statusItem.button) XCTAssertNotNil(controller.statusItem.button?.image) XCTAssertEqual(controller.statusItem.button?.imagePosition, .imageOnly) + XCTAssertEqual(controller.statusItem.button?.image?.size, NSSize(width: 18, height: 18)) + XCTAssertTrue(controller.statusItem.button?.image?.isTemplate ?? false) } } diff --git a/project.yml b/project.yml index 0da9773..1a38d8c 100644 --- a/project.yml +++ b/project.yml @@ -25,6 +25,7 @@ targets: sources: - path: Sources/Shared - path: Sources/App + - path: Resources/Assets.xcassets info: path: Resources/Info.plist properties: