/**
*
*/
package ch.fusun.baron.coatofarms.ui;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
/**
* Displays a {@link CoatOfArmsData} in a {@link Composite}
*/
public class CoatOfArmsViewer extends Composite {
/**
* Data to be displayed
*/
private CoatOfArmsData data;
/**
* @param parent
* The parent
* @param style
* The SWT style
*/
public CoatOfArmsViewer(Composite parent, int style) {
super(parent, style);
this.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent event) {
Image image = new Image(getDisplay(), getClientArea());
drawOnGC(data, image, image.getBounds().width / 2,
image.getBounds().height / 2, image.getBounds().width,
image.getBounds().height);
event.gc.drawImage(image, 0, 0);
image.dispose();
}
});
}
/**
* Draws the data onto the graphics context
*
* @param data
* The coat of arms data
* @param image
* The image to draw on
* @param width
* The width of the flag
* @param height
* The height of the flag
* @param x
* x position
* @param y
* y position
*/
public static void drawOnGC(CoatOfArmsData data, Image image, int x, int y,
int width, int height) {
for (int i = x - width / 2; i < x + width / 2; i++) {
for (int j = y - height / 2; j < y + height / 2; j++) {
image.getImageData().setAlpha(i, j, 255);
}
}
GC gc = new GC(image);
gc.setAntialias(SWT.ON);
data.getBackground().drawBackground(gc, x, y, width, height);
if (data.getForeground() != null) {
data.getForeground().drawForeground(gc);
}
gc.dispose();
}
/**
* Returns the coat of arms
*
* @return the data
*/
public CoatOfArmsData getCoatOfArms() {
return data;
}
/**
* Sets the new coat of arms and redraws the widget
*
* @param data
*/
public void setCoatOfArms(CoatOfArmsData data) {
this.data = data;
redraw();
}
}