package cnp.ew.util;

import java.awt.*;
import java.awt.image.*;

public class CpFocusRect
{
        // Used for drawing focus rects. Yuck.
    static Image verticalDottedLine;
    static Image horizontalDottedLine;

    public static final int COLOR_CLEAR=0;
    public static final int COLOR_YELLOW=1;

    public static final int clearFocusColor = 0xff000000;
    public static final int yellowFocusColor = Color.yellow.getRGB();

    static int currentFocusColor = clearFocusColor;

    static int [] getPixData(int size, int clearColor)
    {
        int [] pixData = new int[size];
        int blackColor = 0;

        for (int i = 0; i < size; i++) {
            pixData[i] = (i % 2 == 0) ? blackColor : clearColor;
        }
        return pixData;
    }

    static Image getVerticalDottedLine(int height, int clearColor)
    {
        if (verticalDottedLine == null || verticalDottedLine.getHeight(CpToolkit.defaultComponent()) != height || clearColor != currentFocusColor) {
            verticalDottedLine = Toolkit.getDefaultToolkit().createImage(
                new MemoryImageSource(
                    1,
                    height,
                    getPixData(height, clearColor),
                    0,
                    1
                )
            );
            currentFocusColor = clearColor;
        }
        return verticalDottedLine;
    }

    static Image getHorizontalDottedLine(int width, int clearColor)
    {
        if (horizontalDottedLine == null || horizontalDottedLine.getWidth(CpToolkit.defaultComponent()) != width || clearColor != currentFocusColor) {
            horizontalDottedLine = Toolkit.getDefaultToolkit().createImage(
                new MemoryImageSource(
                    width,
                    1,
                    getPixData(width, clearColor),
                    0,
                    width
                )
            );
            currentFocusColor = clearColor;
        }
        return horizontalDottedLine;
    }

    static public void drawFocusRect(Graphics g, Rectangle rect)
    {
        drawFocusRect(g, rect, clearFocusColor);
    }

    static public void drawFocusRect(Graphics g, int x, int y, int width, int height)
    {
        drawFocusRect(g, x, y, width, height, clearFocusColor);
    }

    static public void drawFocusRect(Graphics g, Rectangle rect, int clearColor)
    {
        drawFocusRect(g, rect.x, rect.y, rect.width, rect.height, clearColor);
    }

	static public void drawFocusRect(Graphics g, int x, int y, int width, int height, int clearColor)
    {
        g.drawImage(getHorizontalDottedLine(width, clearColor), x, y, CpToolkit.defaultComponent());
        g.drawImage(getHorizontalDottedLine(width, clearColor), x, y + height - 1, CpToolkit.defaultComponent());
        g.drawImage(getVerticalDottedLine(height, clearColor), x, y, CpToolkit.defaultComponent());
        g.drawImage(getVerticalDottedLine(height, clearColor), x + width - 1, y, CpToolkit.defaultComponent());
    }
}
