74 lines
1.8 KiB
Plaintext
74 lines
1.8 KiB
Plaintext
//This is a drawing program
|
|
|
|
void DrawIt()
|
|
{
|
|
ClearWindowText;
|
|
}
|
|
|
|
I4 dx,dy,dd,scale=10;
|
|
|
|
void DoodlePlot(GrBitMap *base,I4 x,I4 y,I4 z)
|
|
{
|
|
z;
|
|
GrLine3(base,x/scale+dy,y/scale-dx,0,
|
|
x/scale-dy,y/scale+dx,0);
|
|
}
|
|
|
|
public void DoodleLine(GrBitMap *base,I4 x1,I4 y1,I4 x2,I4 y2)
|
|
{
|
|
Line(base,x1,y1,0,x2,y2,0,&DoodlePlot);
|
|
}
|
|
|
|
//This is good for drawing palm trees
|
|
public void Doodle2()
|
|
{
|
|
I8 cmd,x1,y1,x2,y2,p1,p2,color=GR_BLACK;
|
|
U4 old_update_window=Fs->update_window;
|
|
U4 old_ip_double=Bts(&Fs->crt_flags,CRTf_NO_DOUBLE_CLICK);
|
|
U4 old_inhibit=ip_inhibit_win_operations;
|
|
GrBitMap *base=GrNew(grbase);
|
|
base->color=ROP_EQU+(color ^ GR_WHITE);
|
|
ip_inhibit_win_operations=TRUE;
|
|
MaximizeWindow;
|
|
Fs->update_window=&DrawIt;
|
|
GrClear;
|
|
PutS("$$CL$$");
|
|
while (TRUE) {
|
|
cmd=GetMsg(&p1,&p2,
|
|
(1<<MSG_KEY_DOWN)+(1<<MSG_IP_L_DOWN)+
|
|
(1<<MSG_IP_R_UP));
|
|
if (cmd==MSG_KEY_DOWN) {
|
|
Fs->update_window=old_update_window;
|
|
GrClear;
|
|
AssignBit(&Fs->crt_flags,CRTf_NO_DOUBLE_CLICK,old_ip_double);
|
|
ip_inhibit_win_operations=old_inhibit;
|
|
GrDel(base);
|
|
return;
|
|
} else if (cmd==MSG_IP_R_UP) {
|
|
ip_inhibit_win_operations=FALSE;
|
|
color=PopUpColor;
|
|
base->color=ROP_EQU+(color ^ GR_WHITE);
|
|
ip_inhibit_win_operations=TRUE;
|
|
} else {
|
|
x1=p1; y1=p2;
|
|
x2=p1; y2=p2;
|
|
while (cmd!=MSG_IP_L_UP) {
|
|
dx=x2-x1; dy=y2-y1;
|
|
dd=Sqrt(dx*dx+dy*dy);
|
|
if (dd) {
|
|
dx=dx*ip_speed/dd/0x5000000;
|
|
dy=dy*ip_speed/dd/0x5000000;
|
|
DoodleLine(base,x1*scale,y1*scale,x2*scale,y2*scale);
|
|
}
|
|
cmd=GetMsg(&p1,&p2,
|
|
(1<<MSG_IP_L_UP)+(1<<MSG_IP_MOVE));
|
|
x1=x2; y1=y2;
|
|
x2=p1; y2=p2;
|
|
}
|
|
GrLine3(base,x1,y1,0,x2,y2,0);
|
|
}
|
|
}
|
|
}
|
|
|
|
Doodle2; //Execute when #included
|
|
|