/*
* Created on Sep 13, 2005
*/
package org.seqcode.viz.paintable.layout;
import java.awt.*;
import java.util.*;
import javax.swing.Action;
import org.seqcode.viz.paintable.AbstractPaintable;
import org.seqcode.viz.paintable.Paintable;
import org.seqcode.viz.paintable.PaintableChangedEvent;
import org.seqcode.viz.paintable.PaintableChangedListener;
/**
* @author tdanford
*/
public class InsetPaintable extends AbstractPaintable implements PaintableChangedListener {
private Paintable inner;
private Integer xIn, yIn;
private Double xFracIn, yFracIn;
public InsetPaintable(int xInset, int yInset, Paintable p) {
super();
xIn = xInset; yIn = yInset;
xFracIn = yFracIn = null;
inner = p;
inner.addPaintableChangedListener(this);
}
public InsetPaintable(double xin, double yin, Paintable p) {
super();
xIn = yIn = null;
xFracIn = xin; yFracIn = yin;
inner = p;
inner.addPaintableChangedListener(this);
}
public void PaintableChanged(PaintableChangedEvent e) {
for(PaintableChangedListener l : fListeners) {
l.paintableChanged(e);
}
}
/* (non-Javadoc)
* @see org.seqcode.viz.paintable.Paintable#paintItem(java.awt.Graphics, int, int, int, int)
*/
public void paintItem(Graphics g, int x1, int y1, int x2, int y2) {
int w = x2 - x1, h = y2 - y1;
int xInset = xIn != null ? xIn : (int)Math.floor(xFracIn * (double)w) / 2;
int yInset = yIn != null ? yIn : (int)Math.floor(yFracIn * (double)h) / 2;
inner.paintItem(g, x1+xInset, y1+yInset, x2-xInset, y2-yInset);
}
/* (non-Javadoc)
* @see org.seqcode.viz.paintable.Paintable#getPaintableActions()
*/
public Collection<Action> getPaintableActions() {
return super.getPaintableActions();
}
}