Skip to content

Commit 258b2ce

Browse files
authored
feat: add ability to choose different status item icons (#19)
* feat: add ability to choose different status item icons
1 parent d7d0323 commit 258b2ce

42 files changed

Lines changed: 141 additions & 18 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

PixelPicker/AppDelegate+Menu.swift

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,15 @@ let focusModifiers: [(String, NSEvent.ModifierFlags)] = [
2929
("⇧ Shift ", .shift)
3030
]
3131

32+
// The available status item images that the user may pick from.
33+
let statusItemImages: [(String, String)] = [
34+
("Magnifying Glass (Default)", "icon-default"),
35+
("Palette", "icon-palette"),
36+
("Dropper", "icon-dropper"),
37+
("Magnifying Glass Dropper", "icon-mag-dropper"),
38+
("Magnifying Glass Dropper Flat", "icon-mag-dropper-flat")
39+
]
40+
3241
extension AppDelegate: NSMenuDelegate {
3342
// Unregister the activating shortcut when the menu is opened/closed so it can't be called when
3443
// setting a new shortcut. Also start a run loop observer so we know when the modifierFlags have
@@ -75,11 +84,12 @@ extension AppDelegate: NSMenuDelegate {
7584
contextMenu.removeAllItems()
7685

7786
let pickItem = contextMenu.addItem(withTitle: "Pick a pixel!", action: #selector(showPicker), keyEquivalent: "")
78-
pickItem.image = ICON
87+
pickItem.image = PPState.shared.statusItemImage(withName: PPState.shared.statusItemImageName)
7988

8089
buildRecentPicks()
8190

8291
contextMenu.addItem(.separator())
92+
buildAppIconMenu()
8393
buildShowGridMenu()
8494
buildColorSpaceItem()
8595
buildColorFormatsMenu()
@@ -95,6 +105,27 @@ extension AppDelegate: NSMenuDelegate {
95105
contextMenu.addItem(withTitle: "Quit \(APP_NAME)", action: #selector(quitApplication), keyEquivalent: "")
96106
}
97107

108+
// Choose the status item icon.
109+
private func buildAppIconMenu() {
110+
let submenu = NSMenu()
111+
for (name, imageName) in statusItemImages {
112+
let item = submenu.addItem(withTitle: name, action: #selector(selectAppIcon(_:)), keyEquivalent: "")
113+
item.representedObject = imageName
114+
item.state = PPState.shared.statusItemImageName == imageName ? .on : .off
115+
item.image = PPState.shared.statusItemImage(withName: imageName)
116+
}
117+
118+
let item = contextMenu.addItem(withTitle: "App Icon", action: nil, keyEquivalent: "")
119+
item.submenu = submenu
120+
}
121+
122+
@objc private func selectAppIcon(_ sender: NSMenuItem) {
123+
if let imageName = sender.representedObject as? String {
124+
menuBarItem.image = PPState.shared.statusItemImage(withName: imageName)
125+
PPState.shared.statusItemImageName = imageName
126+
}
127+
}
128+
98129
// Choose whether to always draw a grid, never draw one, or only draw one when in focus mode.
99130
private func buildShowGridMenu() {
100131
let submenu = NSMenu()

PixelPicker/AppDelegate.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
import MASShortcut
77
import CleanroomLogger
88

9-
// The app's menu bar item.
10-
let ICON = setupMenuBarIcon(NSImage(named: NSImage.Name(stringLiteral: "icon")))
11-
129
@NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate {
1310

1411
// This controller manages the pixel picker itself.
@@ -38,7 +35,7 @@ let ICON = setupMenuBarIcon(NSImage(named: NSImage.Name(stringLiteral: "icon")))
3835
func applicationDidFinishLaunching(_ aNotification: Notification) {
3936
contextMenu.delegate = self
4037

41-
menuBarItem.image = ICON
38+
menuBarItem.image = PPState.shared.statusItemImage(withName: PPState.shared.statusItemImageName)
4239
menuBarItem.action = #selector(onMenuClick)
4340
menuBarItem.sendAction(on: [.leftMouseUp, .rightMouseUp])
4441

PixelPicker/Assets.xcassets/icon.imageset/Contents.json renamed to PixelPicker/Assets.xcassets/icon-default.imageset/Contents.json

File renamed without changes.

PixelPicker/Assets.xcassets/icon.imageset/mag-1.png renamed to PixelPicker/Assets.xcassets/icon-default.imageset/mag-1.png

File renamed without changes.

PixelPicker/Assets.xcassets/icon.imageset/mag-2.png renamed to PixelPicker/Assets.xcassets/icon-default.imageset/mag-2.png

File renamed without changes.
File renamed without changes.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"images" : [
3+
{
4+
"idiom" : "universal",
5+
"filename" : "dropper.png",
6+
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "universal",
10+
"filename" : "dropper-1.png",
11+
"scale" : "2x"
12+
},
13+
{
14+
"idiom" : "universal",
15+
"filename" : "dropper-2.png",
16+
"scale" : "3x"
17+
}
18+
],
19+
"info" : {
20+
"version" : 1,
21+
"author" : "xcode"
22+
}
23+
}
27.1 KB
27.1 KB
27.1 KB

0 commit comments

Comments
 (0)