ImageViewer.java
package com.codeaffine.extras.imageviewer.internal;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
public class ImageViewer {
private final ScrolledComposite scrolledComposite;
final Label imageLabel;
private ImageData[] imageDatas;
private Image image;
public ImageViewer( Composite parent ) {
scrolledComposite = new ScrolledComposite( parent, SWT.H_SCROLL | SWT.V_SCROLL );
scrolledComposite.setBackground( getBackgroundColor() );
imageLabel = new Label( scrolledComposite, SWT.NONE );
imageLabel.setBackground( getBackgroundColor() );
scrolledComposite.setContent( imageLabel );
scrolledComposite.addListener( SWT.Dispose, this::handleDispose );
}
public Control getControl() {
return scrolledComposite;
}
public void setImageDatas( ImageData... imageDatas ) {
if( image != null ) {
image.dispose();
image = null;
}
this.imageDatas = imageDatas;
if( imageDatas != null && imageDatas.length > 0 ) {
image = new Image( scrolledComposite.getDisplay(), imageDatas[ 0 ] );
}
imageLabel.setImage( image );
imageLabel.pack();
}
public ImageData[] getImageDatas() {
return imageDatas;
}
@SuppressWarnings("unused")
private void handleDispose( Event event ) {
setImageDatas( ( ImageData[] )null );
}
private Color getBackgroundColor() {
return scrolledComposite.getDisplay().getSystemColor( SWT.COLOR_LIST_BACKGROUND );
}
}