hschumann2/TempleOS-Source-Code
0847
1 2/*Demonstrates symmetry.3Right-click and draw line of symmetry.4If the line of symmetry is a point, symmetry is turned-off.5*/6 7U0 SymmetryDemo()8{9 I64 msg_code,x1,y1,x2,y2,arg1,arg2;10 CDC *dc=DCAlias;11 12 SettingsPush; //See SettingsPush13 Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER;14 15 WinBorder;16 WinMax;17 DocClear;18 DCFill;19 dc->flags|=DCF_SYMMETRY;20 DCSymmetrySet(dc,Fs->pix_width/2,0,Fs->pix_width/2,1);21 do {22 msg_code=GetMsg(&arg1,&arg2,23 1<<MSG_KEY_DOWN+1<<MSG_MS_L_DOWN+24 1<<MSG_MS_R_DOWN);25 switch (msg_code) {26 case MSG_MS_R_DOWN:27 dc->flags&=~DCF_SYMMETRY;28 dc->color=ROP_XOR+RED^TRANSPARENT;29 x1=arg1; y1=arg2;30 x2=arg1; y2=arg2;31 while (msg_code!=MSG_MS_R_UP) {32 GrLine3(dc,x1,y1,0,x2,y2,0);33 msg_code=GetMsg(&arg1,&arg2,34 1<<MSG_MS_R_UP+1<<MSG_MS_MOVE);35 GrLine3(dc,x1,y1,0,x2,y2,0);36 x2=arg1; y2=arg2;37 }38 GrLine3(dc,x1,y1,0,x2,y2,0);39 if (DCSymmetry3Set(dc,x1,y1,0,x2,y2,0,x2,y2,1))40 dc->flags|=DCF_SYMMETRY;41 break;42 case MSG_MS_L_DOWN:43 dc->color=ROP_XOR+BLACK^TRANSPARENT;44 x1=arg1; y1=arg2;45 x2=arg1; y2=arg2;46 while (msg_code!=MSG_MS_L_UP) {47 GrLine3(dc,x1,y1,0,x2,y2,0);48 msg_code=GetMsg(&arg1,&arg2,49 1<<MSG_MS_L_UP+1<<MSG_MS_MOVE);50 GrLine3(dc,x1,y1,0,x2,y2,0);51 x2=arg1; y2=arg2;52 }53 GrLine3(dc,x1,y1,0,x2,y2,0);54 break;55 }56 } while (msg_code!=MSG_KEY_DOWN || (arg1!=CH_ESC && arg1!=CH_SHIFT_ESC));57 GetMsg(,,1<<MSG_KEY_UP);58 DCFill;59 DCDel(dc);60 SettingsPop;61}62 63SymmetryDemo; //Execute when #included64 