Description
#1496 introduces an incompatibility which breaks existing implementations.
Following pattern is used where the base image is disposed directly after creating an instance of DecorationOverlayIcon.
Image tempImage = descriptor.createImage();
ImageDescriptor[] overlaysArray = new ImageDescriptor[6];
overlaysArray[IDecoration.BOTTOM_LEFT] = getDecorator(stateDecoratorLocation);
overlaysArray[IDecoration.TOP_RIGHT] = getDecorator(testPoolDecoratorLocation);
image = new DecorationOverlayIcon(tempImage, overlaysArray).createImage();
tempImage.dispose(); // <!--------------------------
this.imageCache.put(imageId, image);
This produces now a "Graphic is disposed" exception on Windows with following stack:
org.eclipse.swt.SWTException: Graphic is disposed
at org.eclipse.swt.SWT.error(SWT.java:4922)
at org.eclipse.swt.SWT.error(SWT.java:4837)
at org.eclipse.swt.SWT.error(SWT.java:4808)
at org.eclipse.swt.graphics.Image.getImageData(Image.java:1380)
at org.eclipse.jface.resource.CompositeImageDescriptor$CachedImageImageDataProvider.getImageData(CompositeImageDescriptor.java:114)
at org.eclipse.jface.resource.CompositeImageDescriptor.getZoomedImageData(CompositeImageDescriptor.java:457)
at org.eclipse.jface.resource.CompositeImageDescriptor.drawImage(CompositeImageDescriptor.java:267)
at org.eclipse.jface.viewers.DecorationOverlayIcon.drawCompositeImage(DecorationOverlayIcon.java:217)
at org.eclipse.jface.resource.CompositeImageDescriptor.getImageData(CompositeImageDescriptor.java:375)
at org.eclipse.swt.internal.DPIUtil.lambda$2(DPIUtil.java:543)
at org.eclipse.swt.internal.DPIUtil.getElementAtZoom(DPIUtil.java:572)
at org.eclipse.swt.internal.DPIUtil.validateAndGetImageDataAtZoom(DPIUtil.java:543)
at org.eclipse.swt.graphics.Image.getImageMetadata(Image.java:768)
at org.eclipse.swt.graphics.Image.getBounds(Image.java:1306)
at org.eclipse.swt.graphics.Image.getBounds(Image.java:1301)
at org.eclipse.swt.internal.ImageList.add(ImageList.java:61)
at org.eclipse.swt.widgets.Button._setImage(Button.java:144)
at org.eclipse.swt.widgets.Button.setImage(Button.java:875)
Could you please improve the enhancements of #1496 so that this exception does no longer occur?
Thanks and best regards,
Tobias
Metadata
Metadata
Assignees
Labels
No labels