//
/* ----------------------------------------------------------------------------------------------
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;
}
}
// 戻る