It appears that CTrayIcon has an option to use template images.

apple.awt.enableTemplateImages

So, either this option is off or your image does not satisfy the rules for 
template images.




> On Aug 10, 2022, at 7:28 AM, Jeremy Wood <[email protected]> wrote:
> 
> I like that theory, thanks. Is it possible to make/assign a template image in 
> Java?
> 
> Glancing around just now didn’t turn up any leads. Specifically:
> 
> In CTrayIcon#updateNativeImage(Image), we call:
> CImage.getCreator().createFromImage(image, observer)
> 
> … and that method appears to convert ‘image’ (a java.awt.Image) into a 
> TYPE_INT_ARGB_PRE formatted int array. The word “template” isn’t in the 
> CImage class at all. So even if I had the imagePtr I don’t see how I can 
> toggle the template attribute.
> 
> Regards,
>  - Jeremy
> 
> ------ Original Message ------
> From "Alan Snyder" <[email protected] <mailto:[email protected]>>
> To "Jeremy Wood" <[email protected] <mailto:[email protected]>>
> Cc "[email protected] <mailto:[email protected]>" 
> <[email protected] <mailto:[email protected]>>
> Date 8/10/2022 8:25:11 AM
> Subject Re: Mac Tray Icon Question
> 
>> I suspect the images that work are template images, rather than pairs of 
>> images.
>> 
>> See 
>> https://developer.apple.com/documentation/appkit/nsimage/1520017-template 
>> <https://developer.apple.com/documentation/appkit/nsimage/1520017-template>
>> 
>> 
>> 
>>> On Aug 9, 2022, at 7:12 PM, Jeremy Wood <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> On Macs the tray can present black or white icons, depending on the color 
>>> of the desktop underneath the menubar.
>>> 
>>> For example:
>>> 
>>> <galpmnvf.png>
>>> 
>>> <qtqoidmn.png>
>>> 
>>> Most icons switch from a black icon to a white icon as needed. A few 3rd 
>>> party app icons do not switch to a white icon against the black background 
>>> (for ex: Evernote). And interestingly: Apple’s Airdrop icon (the concentric 
>>> circles shaped like a sideways pacman) also appears to do the wrong thing 
>>> too.
>>> 
>>> Is there a way in a Java desktop app to set up a tray icon that can toggle 
>>> between white and black icons as needed?
>>> 
>>> Obviously we’d love it if this “just worked” without further intervention 
>>> by inverting our icon, but we’d also be happy if a solution involved adding 
>>> a PropertyChangeListener somewhere to identify the menubar change and we 
>>> could update the tray icons ourselves.
>>> 
>>> For ex:
>>> If I change the highlight/accent color (in “System Preferences -> 
>>> General”), then 8 UIManager Colors change (including “textHighlight”, 
>>> “Button.light”, etc.) as of JDK 18. As far as I can tell: there is no 
>>> similar model to identify when the menubar changes colors.
>>> 
>>> For now we’ve made a work-around by using the Robot class to grab a pixel 
>>> from the Apple menu icon every few seconds to determine if it’s light or 
>>> dark.
>>> 
>>> Is there an existing way to resolve this we don’t know about?
>>> 
>>> Or if not: is anyone reading this with “author” status interested in 
>>> helping write this up as an openjdk bug?
>>> 
>>> Regards,
>>>  - Jeremy

Reply via email to