From ebe7c22ce1cf871fcfa13a821a3bb6cf800d9ff5 Mon Sep 17 00:00:00 2001 From: annes Date: Tue, 2 Dec 2025 00:03:56 +0800 Subject: [PATCH] Implement function to set macOS dock icon --- src/_cocoalayer.mm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/_cocoalayer.mm diff --git a/src/_cocoalayer.mm b/src/_cocoalayer.mm new file mode 100644 index 000000000..b8151f498 --- /dev/null +++ b/src/_cocoalayer.mm @@ -0,0 +1,20 @@ +#if defined(__APPLE__) +#import +#import +#include "_cocoalayer.h" +// Example: make a global function you can call +extern "C" void _cocoasetdockicon(unsigned char* data, int width, int height) +{ + NSImage *dockIcon = [[NSImage alloc] initWithSize:NSMakeSize(width, height)]; + CGDataProviderRef provider = CGDataProviderCreateWithData(nullptr, data, width*height*4, nullptr); + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGImageRef cgImage = CGImageCreate(width, height, 8, 32, width*4, colorSpace, + kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big, + provider, nullptr, false, kCGRenderingIntentDefault); + [dockIcon addRepresentation:[[NSBitmapImageRep alloc] initWithCGImage:cgImage]]; + [NSApp setApplicationIconImage:dockIcon]; + CGImageRelease(cgImage); + CGColorSpaceRelease(colorSpace); + CGDataProviderRelease(provider); +} +#endif