package org.seqcode.viz.paintable.layout;
import java.awt.Graphics;
import java.util.Collection;
import javax.swing.Action;
import org.seqcode.viz.paintable.AbstractPaintable;
import org.seqcode.viz.paintable.Paintable;
public class ScaledPaintable
extends AbstractPaintable {
private Paintable fBase;
private Double fXFrac, fYFrac, fWidthFrac, fHeightFrac;
public ScaledPaintable(Paintable p) {
super();
fBase = p;
fXFrac = fYFrac = new Double(0.0);
fWidthFrac = fHeightFrac = new Double(1.0);
}
public ScaledPaintable(Paintable p,
double x, double y,
double w, double h) {
super();
fBase = p;
fXFrac = new Double(x);
fYFrac = new Double(y);
fWidthFrac = new Double(w);
fHeightFrac = new Double(h);
}
public void setX(double x) { fXFrac = new Double(x); }
public void setY(double y) { fYFrac = new Double(y); }
public void setHeight(double h) { fHeightFrac = new Double(h); }
public void setWidth(double w) { fWidthFrac = new Double(w); }
public double getXFrac() { return fXFrac.doubleValue(); }
public double getYFrac() { return fYFrac.doubleValue(); }
public double getWidthFrac() { return fWidthFrac.doubleValue(); }
public double getHeightFrac() { return fHeightFrac.doubleValue(); }
public Collection<Action> getPaintableActions() {
return fBase.getPaintableActions();
}
public void paintItem(Graphics g,
int x1, int y1, int x2, int y2) {
int w = x2 - x1;
int h = y2 - y1;
int nx1 = x1;
int ny1 = y1;
int nx2 = y2;
int ny2 = y2;
if(fXFrac != null) {
nx1 = x1 + (int)Math.round(fXFrac.doubleValue() * (double)w);
}
if(fYFrac != null) {
ny1 = y1 + (int)Math.round(fYFrac.doubleValue() * (double)h);
}
if(fWidthFrac != null) {
nx2 = nx1 + (int)Math.round(fWidthFrac.doubleValue() * (double)w);
}
if(fHeightFrac != null) {
ny2 = ny1 + (int)Math.round(fHeightFrac.doubleValue() * (double)h);
}
//System.out.println("Painting Scaled Item...");
//System.out.println(x1 + " " + y1 + " -- " + y1 + " " + y2);
//System.out.println(nx1 + " " + ny1 + " -- " + ny1 + " " + ny2);
fBase.paintItem(g, nx1, ny1, nx2, ny2);
}
}