diff --git a/UI/platform-osx.mm b/UI/platform-osx.mm index af66ab723..1a5ab3f13 100644 --- a/UI/platform-osx.mm +++ b/UI/platform-osx.mm @@ -202,9 +202,57 @@ void EnableOSXDockIcon(bool enable) NSApplicationActivationPolicyProhibited]; } -// Not implemented yet +@interface DockView : NSView { +@private + QIcon icon; +} +@end + +@implementation DockView +- (id)initWithIcon:(QIcon)icon +{ + self = [super init]; + self->icon = icon; + return self; +} +- (void)drawRect:(NSRect)dirtyRect +{ + CGSize size = dirtyRect.size; + + /* Draw regular app icon */ + NSImage *appIcon = [[NSWorkspace sharedWorkspace] + iconForFile:[[NSBundle mainBundle] bundlePath]]; + [appIcon drawInRect:CGRectMake(0, 0, size.width, size.height)]; + + /* Draw small icon on top */ + float iconSize = 0.45; + CGImageRef image = + icon.pixmap(size.width, size.height).toImage().toCGImage(); + CGContextRef context = [[NSGraphicsContext currentContext] CGContext]; + CGContextDrawImage(context, + CGRectMake(size.width * (1 - iconSize), 0, + size.width * iconSize, + size.height * iconSize), + image); + CGImageRelease(image); +} +@end + void TaskbarOverlayInit() {} -void TaskbarOverlaySetStatus(TaskbarOverlayStatus) {} +void TaskbarOverlaySetStatus(TaskbarOverlayStatus status) +{ + QIcon icon; + if (status == TaskbarOverlayStatusActive) + icon = QIcon::fromTheme("obs-active", + QIcon(":/res/images/active_mac.png")); + else if (status == TaskbarOverlayStatusPaused) + icon = QIcon::fromTheme("obs-paused", + QIcon(":/res/images/paused_mac.png")); + + NSDockTile *tile = [NSApp dockTile]; + [tile setContentView:[[DockView alloc] initWithIcon:icon]]; + [tile display]; +} /* * This custom NSApplication subclass makes the app compatible with CEF. Qt