191 if (image != null) {
192 updateNativeImage(image);
193 }
194 }
195
196 void updateNativeImage(Image image) {
197 MediaTracker tracker = new MediaTracker(new Button(""));
198 tracker.addImage(image, 0);
199 try {
200 tracker.waitForAll();
201 } catch (InterruptedException ignore) { }
202
203 if (image.getWidth(null) <= 0 ||
204 image.getHeight(null) <= 0)
205 {
206 return;
207 }
208
209 CImage cimage = CImage.getCreator().createFromImage(image, observer);
210 boolean imageAutoSize = target.isImageAutoSize();
211 cimage.execute(imagePtr -> {
212 execute(ptr -> {
213 setNativeImage(ptr, imagePtr, imageAutoSize);
214 });
215 });
216 }
217
218 private native void setNativeImage(final long model, final long nsimage, final boolean autosize);
219
220 private void postEvent(final AWTEvent event) {
221 SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
222 public void run() {
223 SunToolkit.postEvent(SunToolkit.targetToAppContext(target), event);
224 }
225 });
226 }
227
228 //invocation from the AWTTrayIcon.m
229 private void handleMouseEvent(NSEvent nsEvent) {
230 int buttonNumber = nsEvent.getButtonNumber();
231 final SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit();
232 if ((buttonNumber > 2 && !tk.areExtraMouseButtonsEnabled())
233 || buttonNumber > tk.getNumberOfButtons() - 1) {
234 return;
235 }
236
340 }
341
342
343 /**
344 * Gets Aqua icon used in message dialog.
345 */
346 private static Icon getIconForMessageType(String messageType) {
347 if (messageType.equals("ERROR")) {
348 return UIManager.getIcon("OptionPane.errorIcon");
349 } else if (messageType.equals("WARNING")) {
350 return UIManager.getIcon("OptionPane.warningIcon");
351 } else {
352 // this is just an application icon
353 return UIManager.getIcon("OptionPane.informationIcon");
354 }
355 }
356
357 class IconObserver implements ImageObserver {
358 @Override
359 public boolean imageUpdate(Image image, int flags, int x, int y, int width, int height) {
360 if (image != target.getImage()) // if the image has been changed
361 {
362 return false;
363 }
364 if ((flags & (ImageObserver.FRAMEBITS | ImageObserver.ALLBITS |
365 ImageObserver.WIDTH | ImageObserver.HEIGHT)) != 0)
366 {
367 SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
368 public void run() {
369 updateNativeImage(image);
370 }
371 });
372 }
373 return (flags & ImageObserver.ALLBITS) == 0;
374 }
375 }
376 }
377
|
191 if (image != null) {
192 updateNativeImage(image);
193 }
194 }
195
196 void updateNativeImage(Image image) {
197 MediaTracker tracker = new MediaTracker(new Button(""));
198 tracker.addImage(image, 0);
199 try {
200 tracker.waitForAll();
201 } catch (InterruptedException ignore) { }
202
203 if (image.getWidth(null) <= 0 ||
204 image.getHeight(null) <= 0)
205 {
206 return;
207 }
208
209 CImage cimage = CImage.getCreator().createFromImage(image, observer);
210 boolean imageAutoSize = target.isImageAutoSize();
211 if (cimage != null) {
212 cimage.execute(imagePtr -> {
213 execute(ptr -> {
214 setNativeImage(ptr, imagePtr, imageAutoSize);
215 });
216 });
217 }
218 }
219
220 private native void setNativeImage(final long model, final long nsimage, final boolean autosize);
221
222 private void postEvent(final AWTEvent event) {
223 SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
224 public void run() {
225 SunToolkit.postEvent(SunToolkit.targetToAppContext(target), event);
226 }
227 });
228 }
229
230 //invocation from the AWTTrayIcon.m
231 private void handleMouseEvent(NSEvent nsEvent) {
232 int buttonNumber = nsEvent.getButtonNumber();
233 final SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit();
234 if ((buttonNumber > 2 && !tk.areExtraMouseButtonsEnabled())
235 || buttonNumber > tk.getNumberOfButtons() - 1) {
236 return;
237 }
238
342 }
343
344
345 /**
346 * Gets Aqua icon used in message dialog.
347 */
348 private static Icon getIconForMessageType(String messageType) {
349 if (messageType.equals("ERROR")) {
350 return UIManager.getIcon("OptionPane.errorIcon");
351 } else if (messageType.equals("WARNING")) {
352 return UIManager.getIcon("OptionPane.warningIcon");
353 } else {
354 // this is just an application icon
355 return UIManager.getIcon("OptionPane.informationIcon");
356 }
357 }
358
359 class IconObserver implements ImageObserver {
360 @Override
361 public boolean imageUpdate(Image image, int flags, int x, int y, int width, int height) {
362 if (target == null || image != target.getImage()) //if the image has been changed
363 {
364 return false;
365 }
366 if ((flags & (ImageObserver.FRAMEBITS | ImageObserver.ALLBITS |
367 ImageObserver.WIDTH | ImageObserver.HEIGHT)) != 0)
368 {
369 SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
370 public void run() {
371 updateNativeImage(image);
372 }
373 });
374 }
375 return (flags & ImageObserver.ALLBITS) == 0;
376 }
377 }
378 }
379
|