#help_index "Graphics/Input" public I64 PopUpColor(U8 *header=NULL, Bool allow_transparent=TRUE,Bool allow_dft=TRUE) {//Chooser for 16-color, default or transparent. I64 i; CDoc *doc=DocNew; if (header) DocPrint(doc,"%s",header); if (allow_transparent) DocPrint(doc,"$MU,\"TRANSPARENT\",LE=TRANSPARENT$\n"); for (i=0; i<COLORS_NUM; i++) DocPrint(doc,"$BG,%d$$MU,\"__%-8Z__\",LE=%d$$BG$\n",i,i,"ST_COLORS",i); if (allow_dft) DocPrint(doc,"$BG,WHITE$$MU,\"DEFAULT\",LE=DOC_DFT$$BG$"); i=PopUpMenu(doc); DocDel(doc); return i; } public I64 PopUpColorLighting(U8 *header=NULL) {//Chooser for std TempleOS DCLighting() color. I64 i; CDoc *doc=DocNew; if (header) DocPrint(doc,"%s",header); DocPrint(doc,"\nSingle-Sided means front and back different." "\nDouble-Sided means front and back same." "\n" "\nHalf-Range means 0 to [0,7]" "\n [8,15]-8 to [8,15]" "\nFull-Range means 0 to [0,7] to [0,7]+8" "\n"); DocPrint(doc, "\n$LTPURPLE$Single-Sided Full-Range Double-Sided Full-Range\n$BLACK$"); for (i=0; i<COLORS_NUM/2; i++) { DocPrint(doc,"$BG,%d$$MU,\"__%-19Z__\",LE=%d$$BG$ ",i,i,"ST_COLORS",i); DocPrint(doc,"$BG,%d$$MU,\"__%-19Z__\",LE=%d$$BG$\n",i,i,"ST_COLORS", ROPF_TWO_SIDED+i); } DocPrint(doc, "\n$LTPURPLE$Single-Sided Half-Range Double-Sided Half-Range\n$BLACK$"); for (i=0; i<COLORS_NUM; i++) { DocPrint(doc,"$BG,%d$$MU,\"__%-19Z__\",LE=%d$$BG$ ", i,i,"ST_COLORS",ROPF_HALF_RANGE_COLOR+i); DocPrint(doc,"$BG,%d$$MU,\"__%-19Z__\",LE=%d$$BG$\n", i,i,"ST_COLORS",ROPF_TWO_SIDED+ROPF_HALF_RANGE_COLOR+i); } i=PopUpMenu(doc); DocDel(doc); return i; } class CTransformForm { F64 x_scale format "$DA-TRM,A=\"X Scale :%12.6f\"$\n"; F64 y_scale format "$DA-TRM,A=\"Y Scale :%12.6f\"$\n"; F64 z_scale format "$DA-TRM,A=\"Z Scale :%12.6f\"$\n"; F64 theta_z format "\nAngles are in degrees\n" "$DA-TRM,A=\"Z-Axis :%12.6f\"$\n"; F64 theta_y format "$DA-TRM,A=\"Y-Axis :%12.6f\"$\n"; F64 theta_x format "$DA-TRM,A=\"X-Axis :%12.6f\"$\n"; F64 x_offset format "\n$DA-TRM,A=\"X Offset:%12.6f\"$\n"; F64 y_offset format "$DA-TRM,A=\"Y Offset:%12.6f\"$\n"; F64 z_offset format "$DA-TRM,A=\"Z Offset:%12.6f\"$\n"; }; #help_index "Graphics/Input;Graphics/Math/3D Transformation" public Bool PopUpTransform(I64 *r) {//Prompt for Mat4x4 transform. CTransformForm *tf=MAlloc(sizeof(CTransformForm)); tf->x_scale=1.0; tf->y_scale=1.0; tf->z_scale=1.0; tf->theta_x=0.0; tf->theta_y=0.0; tf->theta_z=0.0; tf->x_offset=0.0; tf->y_offset=0.0; tf->z_offset=0.0; if (PopUpForm(tf)) { MemSet(r,0,16*sizeof(I64)); r[0] =tf->x_scale*GR_SCALE; r[5] =tf->y_scale*GR_SCALE; r[10]=tf->z_scale*GR_SCALE; r[15]=GR_SCALE; Mat4x4RotZ(r,tf->theta_z*pi/180.0); Mat4x4RotY(r,tf->theta_y*pi/180.0); Mat4x4RotX(r,tf->theta_x*pi/180.0); r[3] =tf->x_offset*GR_SCALE; r[7] =tf->y_offset*GR_SCALE; r[11]=tf->z_offset*GR_SCALE; return TRUE; } else return FALSE; } #help_index "Graphics/Input" #define PU_SPACING 10 U0 DrawIt(CTask *task,CDC *dc) { I64 i,j,i1,j1; CDoc *doc=DocPut(task); for (j=0; j<17; j++) for (i=0; i<17; i++) { if (j<16) j1=j; else j1=TRANSPARENT; if (i<16) i1=i; else i1=TRANSPARENT; dc->color=j1+i1<<16+ROPF_DITHER; GrRect(dc,i*PU_SPACING,j*PU_SPACING+FramePtr("DitherFrame",task), PU_SPACING,PU_SPACING); } i=(17*PU_SPACING+FONT_WIDTH-1)/FONT_WIDTH; if (doc->max_x>i) i=doc->max_x; WinHorz(task->win_left,task->win_left+i,task); WinVert(task->win_top,task->win_top+doc->max_y+ (17*PU_SPACING+FONT_WIDTH-1)/FONT_WIDTH,task); } I64 DitherColor2(U8 *header=NULL) { I64 msg_code,arg1,arg2,res=-1,i,j; DocClear; "%s" ,header; DocRecalc(DocPut); FramePtrAdd("DitherFrame",(DocPut->max_y+1)*FONT_HEIGHT); SettingsPush; //See SettingsPush Fs->draw_it=&DrawIt; do { msg_code=GetMsg(&arg1,&arg2,1<<MSG_MS_L_DOWN|1<<MSG_KEY_DOWN); if (msg_code==MSG_MS_L_DOWN) { msg_code=GetMsg(&arg1,&arg2,1<<MSG_MS_L_UP); i=arg1/PU_SPACING; j=(arg2-FramePtr("DitherFrame"))/PU_SPACING; if (arg1>=0 && arg2>=0 && 0<=j<17 && 0<=i<17) { if (j==16) j=TRANSPARENT; if (i==16) i=TRANSPARENT; res=j+i<<16+ROPF_DITHER; goto dc_done; } } } while (!(msg_code==MSG_KEY_DOWN && (arg1==CH_ESC || arg1==CH_SHIFT_ESC))); do GetMsg(&arg1,&arg2,1<<MSG_KEY_UP); while (!arg1); dc_done: SettingsPop; FramePtrDel("DitherFrame"); return res; } public I64 PopUpColorDither(U8 *header=NULL) {//Chooser for 2 x 16 colors or transparent. U8 buf[STR_LEN]; StrPrint(buf,"DitherColor2(0x%X);",header); return PopUp(buf,Fs); }