BorderDecorator.java
/*
* @(#)BorderDecorator.java
*
* Project: JHotdraw - a GUI framework for technical drawings
* http://www.jhotdraw.org
* http://jhotdraw.sourceforge.net
* Copyright: © by the original author(s) and all contributors
* License: Lesser GNU Public License (LGPL)
* http://www.opensource.org/licenses/lgpl-license.html
*/
package CH.ifa.draw.figures;
import java.awt.*;
import java.util.*;
import CH.ifa.draw.framework.*;
import CH.ifa.draw.standard.*;
/**
* BorderDecorator decorates an arbitrary Figure with
* a border.
*
* @version <$CURRENT_VERSION$>
*/
public class BorderDecorator extends DecoratorFigure {
/*
* Serialization support.
*/
private static final long serialVersionUID = 1205601808259084917L;
private int borderDecoratorSerializedDataVersion = 1;
private Point myBorderOffset;
private Color myBorderColor;
private Color myShadowColor;
public BorderDecorator() {
}
public BorderDecorator(Figure figure) {
super(figure);
}
/**
* Performs additional initialization code before the figure is decorated
* Subclasses may override this method.
*/
protected void initialize() {
setBorderOffset(new Point(3,3));
}
public void setBorderOffset(Point newBorderOffset) {
myBorderOffset = newBorderOffset;
}
public Point getBorderOffset() {
if (myBorderOffset == null) {
return new Point(0,0);
}
else {
return myBorderOffset;
}
}
/**
* Draws a the figure and decorates it with a border.
*/
public void draw(Graphics g) {
Rectangle r = displayBox();
super.draw(g);
g.setColor(Color.white);
g.drawLine(r.x, r.y, r.x, r.y + r.height);
g.drawLine(r.x, r.y, r.x + r.width, r.y);
g.setColor(Color.gray);
g.drawLine(r.x + r.width, r.y, r.x + r.width, r.y + r.height);
g.drawLine(r.x , r.y + r.height, r.x + r.width, r.y + r.height);
}
/**
* Gets the displaybox including the border.
*/
public Rectangle displayBox() {
Rectangle r = getDecoratedFigure().displayBox();
r.grow(getBorderOffset().x, getBorderOffset().y);
return r;
}
/**
* Invalidates the figure extended by its border.
*/
public void figureInvalidated(FigureChangeEvent e) {
Rectangle rect = e.getInvalidatedRectangle();
rect.grow(getBorderOffset().x, getBorderOffset().y);
super.figureInvalidated(new FigureChangeEvent(e.getFigure(), rect));
}
public Insets connectionInsets() {
Insets i = super.connectionInsets();
i.top -= getBorderOffset().y;
i.bottom -= getBorderOffset().y;
i.left -= getBorderOffset().x;
i.right -= getBorderOffset().x;
return i;
}
}