import java.applet.Applet; import java.awt.event.*; import java.awt.*; public class ColorSelectorCanvas extends Canvas implements MouseListener { Manager M; ListenSquare[] R=new ListenSquare[16]; ListenSquare[] G=new ListenSquare[16]; ListenSquare[] B=new ListenSquare[16]; ListenSquare[] T=new ListenSquare[32]; ListenSquare DO; Color C; Color CC; public ColorSelectorCanvas(int W,int H) { addMouseListener(this); double x=0; double y=0; double w=W/4.0; double h=H/18.0; for(int i=0;i<16;++i) { y=i*h*1.0; R[i]=new ListenSquare(0,y,w,h,Color.gray); } for(int i=0;i<16;++i) { y=i*h*1.0; G[i]=new ListenSquare(1*w,y,w,h,Color.gray); } for(int i=0;i<16;++i) { y=i*h*1.0; B[i]=new ListenSquare(2*w,y,w,h,Color.gray); } for(int i=0;i<16;++i) { y=i*h*1.0; T[i]=new ListenSquare(3*w+2,y,w-2,h,new Color(40,40,40)); } DO=new ListenSquare(0,H-13,12,12,Color.black); DO.on=1; /**initial choices*/ R[15].on=1; G[0].on=1; B[0].on=1; T[15].on=1; C=new Color(255,0,0); CC=new Color(255,0,0); } public ColorSelectorCanvas addManager(Manager MM) { ColorSelectorCanvas Q=this; Q.M=MM; return(Q); } public void paint(Graphics gfx) { Graphics2D g=(Graphics2D) gfx; g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); for(int i=0;i<16;++i) R[i].renderSmooth(g,Color.red,new Color(200,200,200)); for(int i=0;i<16;++i) G[i].renderSmooth(g,Color.green,new Color(200,200,200)); for(int i=0;i<16;++i) B[i].renderSmooth(g,new Color(50,100,255),new Color(200,200,200)); for(int i=0;i<16;++i) T[i].renderSmooth(g,new Color(100,100,100),new Color(100,100,100)); computeColor(); Dimension D=this.getSize(); g.setColor(Color.white); g.fillRect(0,8*D.height/9,D.width,D.height/9); g.setColor(Color.black); g.drawLine(0,8*D.height/9,D.width,D.height); g.drawLine(D.width,8*D.height/9,0,D.height); g.setColor(C); g.fillRect(0,8*D.height/9,D.width,D.height/9); g.setColor(Color.white); g.drawRect(0,8*D.height/9,D.width,D.height/9); g.setColor(Color.white); g.drawRect(0,0,D.width-1,D.height-1); } public void computeColor() { int r=0; int g=0; int b=0; int t=0; for(int i=0;i<16;++i) { if(R[i].on==1) r=255*i/15; } for(int i=0;i<16;++i) { if(G[i].on==1) g=255*i/15; } for(int i=0;i<16;++i) { if(B[i].on==1) b=255*i/15; } for(int i=0;i<16;++i) { if(T[i].on==1) t=255*i/15; } C=new Color(r,g,b,t); CC=new Color(r,g,b); } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseClicked(MouseEvent e) { Point X=new Point(); e.consume(); X.x=e.getX(); X.y=e.getY(); int tr=-1; int tg=-1; int tb=-1; int tt=-1; for(int i=0;i<16;++i) { if(R[i].inside(X)==1) tr=i; } for(int i=0;i<16;++i) { if(G[i].inside(X)==1) tg=i; } for(int i=0;i<16;++i) { if(B[i].inside(X)==1) tb=i; } for(int i=0;i<16;++i) { if(T[i].inside(X)==1) tt=i; } if(tr>=0) { for(int i=0;i<16;++i) R[i].on=0; R[tr].on=1; } if(tg>=0) { for(int i=0;i<16;++i) G[i].on=0; G[tg].on=1; } if(tb>=0) { for(int i=0;i<16;++i) B[i].on=0; B[tb].on=1; } if(tt>=0) { for(int i=0;i<16;++i) T[i].on=0; T[tt].on=1; } repaint(); } }