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]>
To "Jeremy Wood" <[email protected]>
Cc "[email protected]" <[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
On Aug 9, 2022, at 7:12 PM, Jeremy Wood <[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