feat: add SF Symbol support to NativeImage::CreateFromNamedImage (#48772)

* feat: add SF Symbol support to NativeImage::CreateFromNamedImage

Co-authored-by: TheCommieAxolotl <87679354+TheCommieAxolotl@users.noreply.github.com>

* use obj-c name in NSImage constructor

Co-authored-by: TheCommieAxolotl <87679354+TheCommieAxolotl@users.noreply.github.com>

* add test for named symbol image

Co-authored-by: TheCommieAxolotl <87679354+TheCommieAxolotl@users.noreply.github.com>

* apply suggested simplification

Co-authored-by: TheCommieAxolotl <87679354+TheCommieAxolotl@users.noreply.github.com>

* fix: support NX cocoa prefix

Co-authored-by: TheCommieAxolotl <87679354+TheCommieAxolotl@users.noreply.github.com>

---------

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: TheCommieAxolotl <87679354+TheCommieAxolotl@users.noreply.github.com>
This commit is contained in:
trop[bot]
2025-11-10 21:18:00 +01:00
committed by GitHub
parent 6876eb2fe9
commit fe396ef002
3 changed files with 17 additions and 4 deletions

View File

@@ -202,8 +202,7 @@ Creates a new `NativeImage` instance from `dataUrl`, a base 64 encoded [Data URL
Returns `NativeImage`
Creates a new `NativeImage` instance from the `NSImage` that maps to the
given image name. See Apple's [`NSImageName`](https://developer.apple.com/documentation/appkit/nsimagename#2901388)
documentation for a list of possible values.
given image name. See Apple's [`NSImageName`](https://developer.apple.com/documentation/appkit/nsimagename#2901388) documentation and [SF Symbols](https://developer.apple.com/sf-symbols/) for a list of possible values.
The `hslShift` is applied to the image with the following rules:

View File

@@ -120,9 +120,18 @@ gin_helper::Handle<NativeImage> NativeImage::CreateFromNamedImage(
name.erase(pos, to_remove.length());
}
NSImage* image = [NSImage imageNamed:base::SysUTF8ToNSString(name)];
NSImage* image = nil;
NSString* ns_name = base::SysUTF8ToNSString(name);
if (!image.valid) {
// Treat non-Cocoa-prefixed names as SF Symbols first.
if (!base::StartsWith(name, "NS") && !base::StartsWith(name, "NX")) {
image = [NSImage imageWithSystemSymbolName:ns_name
accessibilityDescription:nil];
} else {
image = [NSImage imageNamed:ns_name];
}
if (!image || !image.valid) {
return CreateEmpty(args->isolate());
}

View File

@@ -348,6 +348,11 @@ describe('nativeImage module', () => {
expect(image.isEmpty()).to.be.false();
});
ifit(process.platform === 'darwin')('returns a valid named symbol on darwin', function () {
const image = nativeImage.createFromNamedImage('atom');
expect(image.isEmpty()).to.be.false();
});
ifit(process.platform === 'darwin')('returns allows an HSL shift for a valid image on darwin', function () {
const image = nativeImage.createFromNamedImage('NSActionTemplate', [0.5, 0.2, 0.8]);
expect(image.isEmpty()).to.be.false();