/* Copyright Andy C. Deck 1999 All rights reserved. */    
import java.awt.*;

public class colorPicker extends Canvas {

drawPanel dp;
int rgb[] = { 100,100,100 };
int index = 0;
Color red = new Color(140,0,0);
Color green = new Color(0,80,0);
Color blue = new Color(0,0,140);
palette pal=null;

	public colorPicker(drawPanel dp){
		super();
		this.dp = dp;
		setBackground(Color.darkGray);
	}
	
	public void update(Graphics g){
		paint(g);
	}

    public void paint(Graphics g){
		g.clearRect(0,0,8,100-rgb[0]);
		g.clearRect(10,0,8,100-rgb[1]);
		g.clearRect(21,0,8,100-rgb[2]);
		g.setColor(red);
		g.fill3DRect(0,100-rgb[0],8,rgb[0],true);
		g.setColor(green);
		g.fill3DRect(10,100-rgb[1],8,rgb[1],true);
		g.setColor(blue);
		g.fill3DRect(21,100-rgb[2],8,rgb[2],true);
		g.setColor(dp.col = new Color((float)rgb[0]/100,(float)rgb[1]/100,(float)rgb[2]/100));
		g.fill3DRect(0,110,30,30,true);
	}

	public boolean handleEvent(Event e){
		if(e.y>104){ 
			if(e.id==Event.MOUSE_DOWN) 
				if(pal==null) pal = new palette(dp,this);
				else if(pal.isVisible()) pal.hide();
				else pal.show();
			return true; 
		}
		else if(e.y>99) e.y=100;
		else if(e.y<0) e.y = 0;
		switch(e.id){
			case Event.MOUSE_DOWN:
		    if(e.x<=10) index=0;
			else if(e.x<=20) index=1;
			else if(e.x<=30) index=2;
		
		    case Event.MOUSE_DRAG:
		         if(e.x<=10) rgb[index]=(100-e.y);
			else if(e.x<=20) rgb[index]=(100-e.y);
			else if(e.x<=30) rgb[index]=(100-e.y);
			if(rgb[index]>100) rgb[index] = 100;
			if(rgb[index]<0) rgb[index] = 0;
			repaint();
			break;
		}
		return true;	
	}
}


class palette extends Frame {

drawPanel dp;
colorPicker cpick;

public palette(drawPanel dp,colorPicker cpick) {
     super("Palette");
     this.dp = dp;
     this.cpick = cpick;
     setLayout(new FlowLayout());
     setBackground(Color.lightGray);
     setForeground(Color.black);

        CheckboxGroup group = new CheckboxGroup();
    Checkbox cb;
    for(int i=0;i<Env.ctab.length;i++){
           cb = new Checkbox("",group,false);
           cb.setBackground(Env.ctab[i]);
           add(cb);
    }
        pack();
        show();
}

        public boolean handleEvent(Event e){
                if(e.target instanceof Checkbox){
                        for(int i=0;i<Env.ctab.length;i++){
               if(Env.ctab[i]==((Component)e.target).getBackground()){
                   dp.col = Env.ctab[i];
                   dp.g.setColor(Env.ctab[i]);
                                   cpick.rgb[0]=(int)(dp.col.getRed()/2.55);
                                   cpick.rgb[1]=(int)(dp.col.getGreen()/2.55);
                                   cpick.rgb[2]=(int)(dp.col.getBlue()/2.55);
                                   cpick.repaint();
                   break;
               }                             
           }
                        return true;
                }
                else if(e.id == Event.WINDOW_DESTROY){
                        this.hide(); // button down
                }
                return true;
        }
}                     
