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