//
/* ----------------------------------------------------------------------------------------------
    color.java		タグ(色の指定)						ver. 1.00 (JDK 1.02)
    														ueyama@infonet.co.jp  2006.03.13
    														update: 2008.07.28
---------------------------------------------------------------------------------------------- */
import java.applet.Applet;
import java.awt.*;


public class color extends Applet
{
	int			R=127, G=127, B=127;									// RGB 初期値 (0x7f)
	Image		Img;
	
	public void init()
	{
		String bg=getParameter("bgcolor");								// 背景色の設定
		int bgc=Integer.valueOf(bg,16).intValue();
		setBackground(new Color(bgc)); 
		MediaTracker mt=new MediaTracker(this);
		Img=getImage(getCodeBase(), getParameter("figure"));			// 画像ファイルの読み込み
		mt.addImage(Img, 0);
		try
		{
			mt.waitForID(0);
		}
		catch(InterruptedException e){};
	}
	
	public boolean inside(int x, int a, int b)
	{
		return (x<=Math.max(a,b) && x>=Math.min(a,b)) ? true:false;
	}
	
	public void dsp_g(int x, int y, int m, int n, int c)				// 図の表示
	{
		Graphics gx=getGraphics();
		int      w=0, h=0, ox=0, oy=0;
		switch(c)
		{
			case 0: w=284; h= 15; ox=  0; oy=  0; break;				// カラーバー
			case 1: w=  9; h= 10; ox=284; oy=  0; break;				// ▲
			case 2: w= 11; h= 11; ox=  0; oy= 60; break;				// 16進数
		}
		gx.clipRect(x,y,w,h);
		gx.drawImage(Img, x-(ox+m*w), y-(oy+n*h), this);
		gx.dispose();
	}
	
	public void dsp_hex(int x, int n)									// 16進数の表示
	{
		int i, m, c;
		c=(R+G+B)/384;													// c: 表示色
		String hex=Integer.toString(n,16);
		if(hex.length()==1) hex="0"+hex;
		for(i=1; i>=0; i--)
		{
			m=Integer.parseInt(hex.substring(i,i+1),16);
			dsp_g(x+11*i, 12, m, c, 2);
		}
	}
	
	public void dsp_col()												// 色の諸情報の表示
	{
		Graphics gr=getGraphics();
		gr.setColor(new Color(R*65536+G*256+B));						// 色の設定
		gr.fillRect(90, 0, 104, 35);									// RGB 色で長方形を塗りつぶす
		if((R+G+B)/720==1)												// 明るい色には枠をつける
		{
			gr.setColor(new Color(0xcccccc)); 
			gr.drawRect(90, 0, 103, 34);
		}
		dsp_hex(110, R);												// 16進数(カラーコード)を表示
		dsp_hex(132, G);
		dsp_hex(154, B);
		dsp_g(10+R, 85, 0, 0, 1);										// ▲ (R) の表示
		dsp_g(10+G,115, 0, 1, 1);										// ▲ (G)
		dsp_g(10+B,145, 0, 2, 1);										// ▲ (B)
	}

	public void paint(Graphics g)
	{
		int i,j;
		g.clearRect(0, 0, size().width, size().height);
		dsp_g(  0, 70, 0, 0, 0);										// カラーバー R
		dsp_g(  0,100, 0, 1, 0);										// カラーバー G
		dsp_g(  0,130, 0, 2, 0);										// カラーバー B
		dsp_g(  0,160, 0, 3, 0);										// カラーバー W
		dsp_col();
	}
	
	public boolean mouseDown(Event e, int x, int y)						// マウスがクリックされたときの処理
	{
		int i=0,j=0;
		if(y>70)
		{
			dsp_g(10+R, 85, 0, 4, 1);									// ▲を消去
			dsp_g(10+G,115, 0, 4, 1);
			dsp_g(10+B,145, 0, 4, 1);
			if(inside(x, 13,268) && inside(y, 70, 95)) R=x-13;			// R の値を変更
			if(inside(x, 13,268) && inside(y,100,125)) G=x-13;			// G     〃
			if(inside(x, 13,268) && inside(y,130,155)) B=x-13;			// B     〃
			if(inside(x, 13,268) && inside(y,160,175)) R=G=B=x-13;		// 3色   〃
			if(x< 13 && inside(y, 70, 95)) R=0;							// R を 0 にする
			if(x< 13 && inside(y,100,125)) G=0;							// G     〃
			if(x< 13 && inside(y,130,155)) B=0;							// B     〃
			if(x< 13 && inside(y,160,175)) R=G=B=0;						// 3色   〃
			if(x>270 && inside(y, 70, 95)) R=255;						// R を 255 にする
			if(x>270 && inside(y,100,125)) G=255;						// G     〃
			if(x>270 && inside(y,130,155)) B=255;						// B     〃
			if(x>270 && inside(y,160,175)) R=G=B=255;					// 3色   〃
			dsp_col();
		}
		return true;
	}
	
	public boolean mouseDrag(Event e, int x, int y)						// マウスがドラッグされたときの処理
	{
		if(inside(x, 13, 268))
		{
			dsp_g(10+R, 85, 0, 4, 1);									// ▲を消去
			dsp_g(10+G,115, 0, 4, 1);
			dsp_g(10+B,145, 0, 4, 1);
			if(inside(y, 70, 95)) R=x-13;								// R の値を変更
			if(inside(y,100,125)) G=x-13;								// G     〃
			if(inside(y,130,155)) B=x-13;								// B     〃
			if(inside(y,160,175)) R=G=B=x-13;							// 3色   〃
			dsp_col();
		}
		return true;
	}
}
//
戻る