//
/* ----------------------------------------------------------------------------------------------
    dot_font.java	ドットフォント							ver. 2.00  (JDK 1.02)
    														ueyama@infonet.co.jp  2002.10.20
    														update: 2007.09.12
---------------------------------------------------------------------------------------------- */

import java.applet.Applet;
import java.awt.*;


public class dot_font extends Applet
{
	boolean		Dd[][]= new boolean[24][24];							// フォントデータ  true: 黒
	int			P[]={19,13};											// ドットピッチ
	int			N[]={16,24};											// ドット数
	int			R[]={10,6};												// ドット半径
	int			Fx[]={34,30}, Fy[]={346,342};							// フォント原寸表示座標
	int			Dx[]={83,75}, Dy[]={338,330};							// フォント倍寸表示座標
	int			Bx=160, By=345;											// ボタン表示座標
	int			Cx=368, Cy=2;											// コード (16進数) 表示座標
	int			M=0;													// 0: 16×16  1: 24×24
	int			Dm=0;													// 0: フリーハンド  1: ラバーバンド
	int			Q=0;													// 黒ドットの数
	int			Mx, My, Xm, Ym;
	int			Xd, Yd;
	Graphics	gr;
	Image		Img;
	int			i=0, j=0;
	
	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){};
		gr=getGraphics();
	}
	
	public boolean inside(int n, int a, int b)
	{
		return (n<=Math.max(a,b) && n>=Math.min(a,b)) ? true:false;
	}

	public void dsp_dot()												// フォント拡大画面(編集用)の表示
	{
		gr.clearRect(0, 0, 313, 313);									// 表示領域のクリア
		gr.setColor(new Color(204,204,204));
		for(i=0; i<=N[M]; i+=4) gr.drawLine(i*P[M], 0, i*P[M],  P[M]*N[M]);	// 罫線を描く
		for(i=0; i<=N[M]; i+=4) gr.drawLine(0, i*P[M], P[M]*N[M], i*P[M]);
		for(i=0; i0))
			{
				if(inside(mx, Bx, Bx+65))								// 16×16 / 24×24 ボタンをクリック
				{
					M=(M==0)? 1:0;										// モードの変更
					dsp_g(Bx, By, 1, M, 3);								// 16×16 / 24×24 ボタンの緑色表示
				}
				if(inside(mx, Bx+100, Bx+126))							// クリアボタンをクリック
				{
					dsp_g(Bx+100, By, 1, 0, 4);							// クリア ボタンの緑色表示
					for(i=0; i=0)														// ドットの編集後
		{
			gr.drawRect(x,y,w,h);										// ラバーバンドの消去
			gr.setPaintMode();
			for(i=0; i0 && t.height>0)							// t がラバーバンド内であれば
					{
						dsp_g(i*m, j*m, (Dd[Mx/m][My/m])?1:0, 0, M);	// ドットの表示
						Dd[i][j]=Dd[Mx/m][My/m];						// データの更新
					}
				}
			}
			dsp_font();													// フォントの原寸・倍寸表示
			dsp_code();													// コード(16進数データ)の表示
		}
		if(my>By)														// ボタンをクリック
		{
			if(inside(mx, Bx, Bx+65)) dsp_g(Bx,By,0,(M==0)?1:0,3);			// 16×16 / 24×24 ボタンの表示更新
			if(inside(mx, Bx+71, Bx+97)) dsp_g(Bx+71,By,(Dm==0)?2:0,1,4);	// 軌跡/ラバーバンド ボタンの表示更新
			if(inside(mx, Bx+100, Bx+126)) dsp_g(Bx+100,By,(Q==0)?2:0,0,4);	// クリアボタンの表示更新
		}
		return true;
	}

	public boolean mouseDrag(Event e, int mx, int my)					// マウスがドラッグされたときの処理
	{
		int x, y, w, h;
		if(mx=0 && Dm==1)				// ラバーバンドモード
		{
			gr.setXORMode(new Color(200,66,66));
			x=Math.min(Mx,Xm); y=Math.min(My,Ym); w=Math.abs(Xm-Mx); h=Math.abs(Ym-My);
			gr.drawRect(x,y,w,h);										// 古い矩形を消去
			x=Math.min(Mx,mx); y=Math.min(My,my); w=Math.abs(mx-Mx); h=Math.abs(my-My);
			gr.drawRect(x,y,w,h);										// 新しい矩形を描く
			Xm=mx;Ym=my;
		}
		return true;
	}
}
//
戻る