When you say "superimposed over the dock icon", do you mean you use [NSApp 
dockTile], or actually put an NSPanel over the dock? I'm using dockTile to put 
up a progress bar - it's a custom one that's gray & white, but it works fine. 
The sample app for dockTile is easily tweaked.

On Aug 14, 2012, at 8:39 AM, Tim Hewett wrote:

> My app has been displaying a progress indicator superimposed over the dock 
> icon successfully until more recent MacOS versions. With the latter it 
> appears as a black bar instead of blue (currently testing on Mountain Lion 
> but suspect Lion has the same problem, Snow Leopard and previous ones are ok).
> 
> Previously to get it to work it was necessary to subclass NSPanel and 
> override the isKey selector to always return YES, to make sure that the image 
> generated from the progress indicator (using the dataWithPDFInsideRect: 
> selector) was blue and not grey. The panel itself is never displayed, it is 
> just a dummy one to give the indicator a "key" window to be part of to allow 
> it to show a blue bar.
> 
> The NSView drawRect: selector has been tried instead to fill in the image in 
> place of dataWithPDFInsideRect:, now it is grey and no longer updates after 
> the first progress increment. This alternative approach works fine on 10.5.8 
> as does the original one, but not on Mountain Lion again.
> 
> If the progress indicator is temporarily added to the content view of a 
> normal key window instead of the dummy one then it displays fine as a blue 
> bar in the dock icon, so the challenge seems to be to get the NSPanel 
> subclass to spoof a key window and get the indicator to display its blue bar. 
> Somehow that seems to have been lost.
> 
> I've tried overriding the panel isVisible and isMainWindow selectors to 
> always return YES, to no effect.
> 
> N.B. the progress indicator is also subclassed to allow control over the wave 
> animation, saved a lot of CPU time on older Macs.
> 
> Anyone solved this one on Mountain Lion/Lion?
> 
> (Also slightly OT, I need to find out how to download Lion to keep it 
> available as a bootable volume for testing. It never showed in App Store as I 
> never purchased it there due to my Mac coming with it pre-installed, and 
> still doesn't show now even when option-clicking on the Purchases icon. Is 
> there a way to get a (legitimate and official) copy down somehow?)
> 
> Regards,
> 
> Tim.
> 
> 
> Code snippets:
> 
> Initialisation:
> 
>    // *** Create/init an off-screen progress indicator - has no window or 
> superview.
>    // *** Set the width to 128 to match that of the dock icon.
>    dockProgressBar = [[MyStaticProgressIndicator alloc] init];
>    NSRect rect = {{0.0,0.0},{128.0,12.0}};
>    [dockProgressBar setFrame:rect];
>    [dockProgressBar setIndeterminate:NO];
>    [dockProgressBar setControlTint:NSBlueControlTint];
>    [dockProgressBar setControlSize:NSSmallControlSize];
> 
>    dockProgressBarWindow = [[MyAlwaysKeyPanel alloc] init];
>    [dockProgressBarWindow setContentView:dockProgressBar];
> 
> 
> Use:
> 
>            [dockProgressBar setDoubleValue:0.0L];  // needed for OS 10.6.1 
> Snow Leopard or else progress bar doesn't update beyond first step
>           [dockProgressBar setDoubleValue:barValue];
> 
>            // *** Snap the progress indicator into an image (NSView 
> dataWithPDFInsideRect: selector - very useful).
>            NSImage *dockProgressBarImage = [[NSImage alloc] 
> initWithData:[dockProgressBar dataWithPDFInsideRect:[dockProgressBar frame]]];
> 
>            // *** Get the app's default icon.
>            NSImage *mainIcon = [dockIcon copy];
> 
>            // *** Lock image ops onto the default icon.
>            [mainIcon lockFocus];
> 
>            // *** composite the progress indicator image onto the dock icon.
>            NSPoint point = { 0.0, 0.0 };
>            [dockProgressBarImage drawAtPoint:point fromRect:NSZeroRect 
> operation:NSCompositeSourceOver fraction:1.0];
>            [mainIcon unlockFocus];
> 
>            // *** Replace the dock icon with the image containing the 
> progress bar.
>            [NSApp setApplicationIconImage:mainIcon];
>            [dockProgressBarImage release];
>            [mainIcon release];
> 
>            lastDockBarValue = barValue;
> 
> 
> NSPanel subclass:
> 
> // This is needed for the progress bars used in the dock icon and the 
> floating progress panel, so they are given
> // a dummy window (which never gets displayed) which they think is key, and 
> so show the blue colour (grey is less
> // visible hence all this effort)
> 
> @implementation MyAlwaysKeyPanel
> 
> - (BOOL)isKeyWindow
> {
>    return TRUE;
> }
> 
> @end
> 
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/lrucker%40vmware.com
> 
> This email sent to lruc...@vmware.com


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to