package tests;
import java.awt.Point;
import java.io.File;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Transform;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
public class SampleTransform {
protected Shell shell;
private Image img;
private Display display;
private int rotation = 0;
private Point mousePos = new Point(0, 0);
/**
* Launch the application.
*
* @param args
*/
public static void main(String[] args) {
try {
SampleTransform window = new SampleTransform();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
private int getNextRotation() {
rotation = (rotation + 1) % 360;
return rotation;
}
/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application");
shell.setLayout(new GridLayout(3, false));
Group grpOriginal = new Group(shell, SWT.NONE);
grpOriginal.setLayout(new GridLayout(1, false));
grpOriginal.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false,
1, 1));
grpOriginal.setText("Original");
img = new Image(display, new File("").getAbsolutePath()
+ "/res/loading.png");
Composite cOrig = new Composite(grpOriginal, SWT.NONE);
cOrig.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
e.gc.drawImage(img, 0, 0);
}
});
Group grpRotated = new Group(shell, SWT.NONE);
grpRotated.setLayout(new GridLayout(1, false));
grpRotated.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false,
1, 1));
grpRotated.setText("Rotated");
final Composite cRotated = new Composite(grpRotated, SWT.NONE
| SWT.DOUBLE_BUFFERED);
cRotated.addMouseMoveListener(new MouseMoveListener() {
@Override
public void mouseMove(MouseEvent arg0) {
cRotated.redraw();
}
});
cRotated.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
Transform oldTransform = new Transform(display);
e.gc.getTransform(oldTransform);
Transform t = new Transform(display);
t.translate(img.getBounds().width / 2,
img.getBounds().height / 2);
t.rotate(getNextRotation());
t.translate(-(img.getBounds().width / 2),
-(img.getBounds().height / 2));
e.gc.setTransform(t);
e.gc.drawImage(img, 0, 0);
t.dispose();
e.gc.setTransform(oldTransform);
oldTransform.dispose();
}
});
Group grpRotatedOnTarget = new Group(shell, SWT.NONE);
grpRotatedOnTarget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
true, 1, 1));
grpRotatedOnTarget.setText("Rotated on target");
grpRotatedOnTarget.setLayout(new GridLayout(1, false));
final Composite cBig = new Composite(grpRotatedOnTarget, SWT.NONE | SWT.DOUBLE_BUFFERED);
cBig.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
cBig.addMouseMoveListener(new MouseMoveListener() {
@Override
public void mouseMove(MouseEvent me) {
mousePos.x = me.x;
mousePos.y = me.y;
cBig.redraw();
}
});
cBig.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
Transform oldTransform = new Transform(display);
e.gc.getTransform(oldTransform);
Transform t = new Transform(display);
t.translate(img.getBounds().width / 2,
img.getBounds().height / 2);
t.rotate(getNextRotation());
t.translate(-(img.getBounds().width / 2),
-(img.getBounds().height / 2));
e.gc.setTransform(t);
e.gc.drawImage(img, mousePos.x, mousePos.y);
t.dispose();
e.gc.setTransform(oldTransform);
oldTransform.dispose();
}
});
}
}