From 03526aaa44cd99c5f6adeaf8abcbaa600314d9fc Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Wed, 11 Jun 2025 04:17:00 -0700 Subject: [PATCH] WIP: Attempt to actually use the custom icons Signed-off-by: Christopher Snowhill --- Application/DockIconController.h | 2 + Application/DockIconController.m | 71 +++++++++++++++++++++++--------- 2 files changed, 54 insertions(+), 19 deletions(-) diff --git a/Application/DockIconController.h b/Application/DockIconController.h index c60e8d694..cd9c26029 100644 --- a/Application/DockIconController.h +++ b/Application/DockIconController.h @@ -28,6 +28,8 @@ NSImageView *imageView; NSProgressIndicator *progressIndicator; + + NSGlassEffectContainerView *glassView API_AVAILABLE(macosx(26.0)); } @end diff --git a/Application/DockIconController.m b/Application/DockIconController.m index 10ea9de35..93e8efcd5 100644 --- a/Application/DockIconController.m +++ b/Application/DockIconController.m @@ -43,10 +43,18 @@ static NSString *CogCustomDockIconsReloadNotification = @"CogCustomDockIconsRelo } static NSString *getBadgeName(NSString *baseName, BOOL colorfulIcons) { - if(colorfulIcons) { - return [baseName stringByAppendingString:@"Colorful"]; + if(@available(macOS 26.0, *)) { + if(colorfulIcons) { + return [@"Cog26" stringByAppendingString:[baseName stringByAppendingString:@"Colorful"]]; + } else { + return [@"Cog26" stringByAppendingString:baseName]; + } } else { - return [baseName stringByAppendingString:@"Normal"]; + if(colorfulIcons) { + return [baseName stringByAppendingString:@"Colorful"]; + } else { + return [baseName stringByAppendingString:@"Normal"]; + } } } @@ -137,6 +145,11 @@ static NSString *getCustomIconName(NSString *baseName) { drawIcon = YES; } + BOOL glassIcons = NO; + if(@available(macOS 26.0, *)) { + glassIcons = YES; + } + NSDockTile *dockTile = [NSApp dockTile]; if(drawIcon) { @@ -154,20 +167,30 @@ static NSString *getCustomIconName(NSString *baseName) { } NSSize badgeSize = [badgeImage size]; - - NSImage *newDockImage = (useCustomDockIcons && !useCustomDockIconsPlaque) ? [[NSImage alloc] initWithSize:NSMakeSize(1024, 1024)] : [dockImage copy]; - [newDockImage lockFocus]; - - [badgeImage drawInRect:NSMakeRect(0, 0, 1024, 1024) - fromRect:NSMakeRect(0, 0, badgeSize.width, badgeSize.height) - operation:NSCompositingOperationSourceOver - fraction:1.0]; - - [newDockImage unlockFocus]; - - imageView = [[NSImageView alloc] init]; - [imageView setImage:newDockImage]; - [dockTile setContentView:imageView]; + + if(!glassIcons || useCustomDockIcons) { + NSImage *newDockImage = (useCustomDockIcons && !useCustomDockIconsPlaque) ? [[NSImage alloc] initWithSize:NSMakeSize(2048, 2048)] : [dockImage copy]; + [newDockImage lockFocus]; + + [badgeImage drawInRect:NSMakeRect(0, 0, 2048, 2048) + fromRect:NSMakeRect(0, 0, badgeSize.width, badgeSize.height) + operation:NSCompositingOperationSourceOver + fraction:1.0]; + + [newDockImage unlockFocus]; + + imageView = [[NSImageView alloc] init]; + [imageView setImage:newDockImage]; + [dockTile setContentView:imageView]; + } else { + if (@available(macOS 26.0, *)) { + glassView = [[NSGlassEffectContainerView alloc] initWithFrame:NSMakeRect(0, 0, badgeSize.width, badgeSize.height)]; + } + imageView = [[NSImageView alloc] init]; + [imageView setImage:badgeImage]; + [glassView setContentView:imageView]; + [dockTile setContentView:glassView]; + } progressIndicator = [[NSProgressIndicator alloc] initWithFrame:NSMakeRect(0.0, 0.0, dockTile.size.width, 10.0)]; [progressIndicator setStyle:NSProgressIndicatorStyleBar]; @@ -184,9 +207,19 @@ static NSString *getCustomIconName(NSString *baseName) { if(displayProgress) { if(!imageView) { + NSImage *dockImage = [NSApp applicationIconImage]; + NSSize size = [dockImage size]; + if(@available(macOS 26.0, *)) { + glassView = [[NSGlassEffectContainerView alloc] initWithFrame:NSMakeRect(0, 0, size.width, size.height)]; + } imageView = [[NSImageView alloc] init]; - [imageView setImage:[NSApp applicationIconImage]]; - [dockTile setContentView:imageView]; + [imageView setImage:dockImage]; + if(@available(macOS 26.0, *)) { + [glassView setContentView:imageView]; + [dockTile setContentView:glassView]; + } else { + [dockTile setContentView:imageView]; + } } if(!progressIndicator) {