Native node.js addon that returns Objective-C [NSImage imageNamed]
calls as a PNG buffer, which simplifies using default macOS images in Electron apps.
npm install electron-named-image
While macOS is currently the only supported platform, this module can be safely installed and used on non-macOS platforms. (No need to wrap your require
in a conditional statement or other work-arounds).
This lets you use default macOS images/icons with little effort. So you can set up your TouchBar to look like this:
(Note the macOS TouchBar icons in there in between the defaults)
...or your menu to look like this:
(Note the icons on the menu items)
...without having to manually gather together a bunch of image files. These images/icons are included as a part of macOS and available to Objective-C and Swift via the NSImage
API. This module allows you to use it via Javascript.
new TouchBarButton({
icon: nativeImage.createFromBuffer(
namedImage.getImageNamed('NSTouchBarRefreshTemplate')
)
})
Menu.setApplicationMenu(Menu.buildFromTemplate([
{
label: 'My App',
submenu: [
{
label: 'Empty Trash',
icon: nativeImage.createFromBuffer(
namedImage.getImageNamed('NSTrashFull')
).resize({ width: 20 })
}
]
}
]));
For all possible "named images" on macOS, see this.
If you specify an invalid named image or are using it on a macOS version that pre-dates NSTouchBar*
icons, you'll get back an empty buffer. For example:
namedImage.getImageNamed('invalid').length // => 0
namedImage.getImageNamed('NSTrashFull').length // => 9166
The empty buffer will work as expected with Electron's nativeImage
module, you just won't have any actual image.
All of the NSTouchBar*
named images have been outputted as PNGs to the images
folder which you can use as well just by manually saving and importing them into your app.
See [https://github.com/electron/electron/blob/master/docs/tutorial/using-native-node-modules.md] for the easy, right way. Or you can also npm install -g node-gyp
and then run the same compile-for-electron
script I have in the package.json in the root of this module's folder.
Inspired by electron/electron#9414