< prev index next >
src/java.desktop/macosx/classes/sun/lwawt/macosx/CTrayIcon.java
Print this page
*** 41,50 ****
--- 41,51 ----
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
+ import java.awt.image.ImageObserver;
import java.awt.peer.TrayIconPeer;
import javax.swing.Icon;
import javax.swing.UIManager;
*** 59,68 ****
--- 60,70 ----
// In order to construct MouseEvent object, we need to specify a
// Component target. Because TrayIcon isn't Component's subclass,
// we use this dummy frame instead
private final Frame dummyFrame;
+ IconObserver observer = new IconObserver();
// A bitmask that indicates what mouse buttons produce MOUSE_CLICKED events
// on MOUSE_RELEASE. Click events are only generated if there were no drag
// events between MOUSE_PRESSED and MOUSE_RELEASED for particular button
private static int mouseClickButtons = 0;
*** 141,151 ****
// obtain icon to show along the message
Icon icon = getIconForMessageType(messageType);
CImage cimage = null;
if (icon != null) {
BufferedImage image = scaleIcon(icon, 0.75);
! cimage = CImage.getCreator().createFromImage(image);
}
if (cimage != null) {
cimage.execute(imagePtr -> {
execute(ptr -> nativeShowNotification(ptr, caption, text,
imagePtr));
--- 143,153 ----
// obtain icon to show along the message
Icon icon = getIconForMessageType(messageType);
CImage cimage = null;
if (icon != null) {
BufferedImage image = scaleIcon(icon, 0.75);
! cimage = CImage.getCreator().createFromImage(image, null);
}
if (cimage != null) {
cimage.execute(imagePtr -> {
execute(ptr -> nativeShowNotification(ptr, caption, text,
imagePtr));
*** 182,194 ****
//Not used. The popupmenu is shown from the native code.
}
@Override
public void updateImage() {
Image image = target.getImage();
! if (image == null) return;
MediaTracker tracker = new MediaTracker(new Button(""));
tracker.addImage(image, 0);
try {
tracker.waitForAll();
} catch (InterruptedException ignore) { }
--- 184,201 ----
//Not used. The popupmenu is shown from the native code.
}
@Override
public void updateImage() {
+
Image image = target.getImage();
! if (image != null) {
! updateNativeImage(image);
! }
! }
+ void updateNativeImage(Image image) {
MediaTracker tracker = new MediaTracker(new Button(""));
tracker.addImage(image, 0);
try {
tracker.waitForAll();
} catch (InterruptedException ignore) { }
*** 197,207 ****
image.getHeight(null) <= 0)
{
return;
}
! CImage cimage = CImage.getCreator().createFromImage(image);
boolean imageAutoSize = target.isImageAutoSize();
cimage.execute(imagePtr -> {
execute(ptr -> {
setNativeImage(ptr, imagePtr, imageAutoSize);
});
--- 204,214 ----
image.getHeight(null) <= 0)
{
return;
}
! CImage cimage = CImage.getCreator().createFromImage(image, observer);
boolean imageAutoSize = target.isImageAutoSize();
cimage.execute(imagePtr -> {
execute(ptr -> {
setNativeImage(ptr, imagePtr, imageAutoSize);
});
*** 344,350 ****
--- 351,377 ----
} else {
// this is just an application icon
return UIManager.getIcon("OptionPane.informationIcon");
}
}
+
+ class IconObserver implements ImageObserver {
+ @Override
+ public boolean imageUpdate(Image image, int flags, int x, int y, int width, int height) {
+ if (image != target.getImage()) // if the image has been changed
+ {
+ return false;
+ }
+ if ((flags & (ImageObserver.FRAMEBITS | ImageObserver.ALLBITS |
+ ImageObserver.WIDTH | ImageObserver.HEIGHT)) != 0)
+ {
+ SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
+ public void run() {
+ updateNativeImage(image);
+ }
+ });
+ }
+ return (flags & ImageObserver.ALLBITS) == 0;
+ }
+ }
}
< prev index next >