package tim.prune.gui.map;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import javax.swing.JPanel;
/**
* Semi-transparent panel to go on top of the map
* to contain a set of controls
*/
public class OverlayPanel extends JPanel
{
// Previous dimensions to see if calculations necessary
private int _prevWidth = -1, _prevHeight = -1;
// Previously calculated border limits
private int _minX, _minY, _width, _height;
/**
* Constructor
*/
public OverlayPanel()
{
setOpaque(false);
}
/**
* Paint the contents
*/
public void paint(Graphics g)
{
int panelWidth = getWidth();
int panelHeight = getHeight();
if (panelWidth != _prevWidth || panelHeight != _prevHeight)
{
calculateBorder();
_prevWidth = panelWidth;
_prevHeight = panelHeight;
}
// Draw white background
final Color BG = new Color(255, 255, 255, 200);
g.setColor(BG);
g.fillRect(_minX, _minY, _width, _height);
// Draw black border
g.setColor(Color.BLACK);
g.drawRect(_minX, _minY, _width, _height);
// Paint everything else
super.paint(g);
}
/**
* Calculate the boundaries to paint over
*/
private void calculateBorder()
{
final int PADDING = 2;
// Calculate where the border should be drawn
final Component firstComp = getComponent(0);
final Component lastComp = getComponent(getComponentCount()-1);
_minX = Math.max(firstComp.getX() - PADDING, 0);
final int maxX = Math.min(lastComp.getX() + lastComp.getWidth() + PADDING, getWidth()-1);
_width = maxX - _minX;
_minY = Math.max(Math.min(firstComp.getY(), lastComp.getY()) - PADDING, 0);
final int maxY = Math.max(firstComp.getY()+firstComp.getHeight(), lastComp.getY()+lastComp.getHeight()) + PADDING;
_height = maxY - _minY;
//System.out.println("x from " + minx + " to " + maxx + ", y from " + miny + " to " + maxy);
}
}