//
/* ----------------------------------------------------------------------------------------------
    font.java		フォント									ver. 2.00 (JDK 1.02)
    															ueyama@infonet.co.jp  1998.09.04
    															update: 2007.09.14
---------------------------------------------------------------------------------------------- */
import java.applet.Applet;
import java.awt.*;
import java.awt.image.*;


public class font extends Applet
{
	int			Px[]=new int[384*384];									// アウトラインフォント データ
	int			Bx[]={0,68,136,204,272,340,40,111,165,260,340};			// チェックボタン表示 X座標
	int			By[]={405,424};											// チェックボタン表示 Y座標
	int			Bw[]={60,60,60,60,60,84,60,40,82,56,44};				// チェックボタン表示幅
	int			Ck[]={5,0};												// ラジオボタンチェック位置
	boolean		Dt[][]=new boolean[96][96];								// ドットフォント 表示用データ
	boolean		Bgr=false;												// true: ドットフォント背景表示
	boolean		Chg=false;												// true: ドットサイズ変更
	int			Dp[]={16, 12, 8, 6, 4, 0};								// ドットサイズデータ
	int			Ds;														// 表示用ドットサイズ
	int			Dbg, Bgc;												// ドットフォント背景色, 背景色
	int			Ox=19;													// X 軸表示オフセット
	Image		Img;
	Graphics	gr;
	
	public void init()
	{
		String bg=getParameter("bgcolor");
		Bgc=Integer.valueOf(bg,16).intValue();
		setBackground(new Color(Bgc));									// 背景色 
		bg=getParameter("font_bgc");
		Dbg=Integer.valueOf(bg,16).intValue();							// ドットフォント背景色
		MediaTracker mt=new MediaTracker(this);
		Img=getImage(getCodeBase(), getParameter("figure"));			// 画像ファイル
		mt.addImage(Img, 0);
		try
		{
			mt.waitForAll();
		}
		catch(InterruptedException e){};
		get_fontdata();
		gr=getGraphics();
	}
	
	public void update(Graphics g)
	{
		paint(g);
	}
	
	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_g(int x, int y, int m, int n, int c)				// 画像の表示
	{
		int w=0,h=0, ox=0,oy=0;
		switch(c)
		{
			case  0: w=384; h=384; ox=   0; oy=  0; break;				// フォント
			case  1: w= 12; h= 13; ox=1536; oy=  0; break;				// ラジオボタン
			case  2: w= 13; h= 13; ox=1560; oy=  0; break;				// チェックボックス
			case  3: w= 69; h= 13; ox=1536; oy= 13; break;				// 文字
		}
		Graphics gx=gr.create();
		gx.clipRect(x,y,w,h);
		if(c<3) gx.clearRect(x,y,w,h);
		gx.drawImage(Img, x-(ox+w*m), y-(oy+h*n), this);
		gx.dispose();
	}
	
	public void get_fontdata()											// フォントのピクセルデータ取得
	{
		PixelGrabber pg=new PixelGrabber(Img,Ck[1]*384,0,384,384,Px,0,384);
		try
		{
			pg.grabPixels();											// フォントデータの読込
		}
		catch(InterruptedException ie) {return;}
		if((pg.status() & ImageObserver.ABORT) != 0) return;
	}

	public void dsp_dotfont()											// ドットフォントの表示
	{
		int i,j,k,l,c;
		gr.setColor(Color.black);
		for(i=0; i<384; i+=Ds)											// ドットの表示
		{
			for(c=0,j=0; j<384; j+=Ds)
			{
				if(Chg)
				{
					for(k=0;k0)  dsp_dotfont();										// ドットフォントの表示
	}
	
	public boolean mouseDown(Event e, int mx, int my)
	{
		int i,x,y;
		if(inside(mx,Ox,Ox+383) && my<384 && Ds>0)						// ドットフォント表示のマウス編集
		{
			x=(mx-Ox)/Ds; y=my/Ds;
			Dt[x][y]=!Dt[x][y];											// データの反転
			if(Dt[x][y]) gr.setColor(Color.black);
			else gr.setColor(new Color((Bgr)?Dbg:Bgc));
			gr.fillRect(x*Ds+Ox,y*Ds+1,Ds-1,Ds-1);						// ドットの表示
		}
		else
		{
			for(i=0; i<11; i++) if(inside(mx,Bx[i],Bx[i]+Bw[i]) && inside(my,By[i/6]-2,By[i/6]+17)) break;
			if(i<11)													// チェックボタンをクリック
			{
				if(i<6) {Ck[0]=i; Ds=Dp[i]; Chg=true;}					// ピクセル数 or アウトラインフォント
				else if(i<10) {Ck[1]=i-6; get_fontdata(); Chg=true;}	// フォントの変更
				if(i==10 && Ck[0]<5) Bgr=!Bgr;							// 背景の変更
				if(!(i==10 && Ck[0]==5)) repaint();
			}
		}
		return true;
	}
}
//
戻る