Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
Transform.txt224 linesDownload Raw Back to Graphics
1 2/*This highlights the 4th dimension3of the transformation matrix which4is used for storing translations (shifts)5in matricies so they can be combined6with a matrix multiplication.7 8Scroll bar works.9 10The multiplication takes place in the11Sprite3ZB routine.12*/13 14#define SLIDER_SPACING 2015#define SLIDER_RANGE   3016#define SLIDER_BORDER  217 18class CSliderState19{20  I64 s1,s2,s3;21  F64 arg1,arg2,scale;22} s;23 24U0 DrawCtrlSlider(CDC *dc,CCtrl *c)25{26  CSliderState *s=c->state;27 28  dc->color=LTGREEN;29  GrRect(dc, c->left,c->top,SLIDER_SPACING*4+3,SLIDER_SPACING*2+SLIDER_RANGE);30  dc->color=BROWN;31  GrRect(dc, c->left+SLIDER_BORDER,c->top+SLIDER_BORDER,32        SLIDER_SPACING*4+3-2*SLIDER_BORDER,33        SLIDER_SPACING*2+SLIDER_RANGE-2*SLIDER_BORDER);34  dc->color=BLACK;35  GrLine(dc,c->left+SLIDER_SPACING,c->top+SLIDER_SPACING,36        c->left+SLIDER_SPACING,c->top+SLIDER_SPACING+SLIDER_RANGE-1);37  GrLine(dc,c->left+2*SLIDER_SPACING+1,c->top+SLIDER_SPACING,38        c->left+2*SLIDER_SPACING+1,c->top+SLIDER_SPACING+SLIDER_RANGE-1);39  GrLine(dc,c->left+3*SLIDER_SPACING+2,c->top+SLIDER_SPACING,40        c->left+3*SLIDER_SPACING+2,c->top+SLIDER_SPACING+SLIDER_RANGE-1);41 42  dc->color=LTGREEN;43  GrPrint(dc,c->left+SLIDER_SPACING-FONT_WIDTH/2,44        c->top+SLIDER_SPACING+SLIDER_RANGE+3,45        "%d",s->s1*10/SLIDER_RANGE);46  GrPrint(dc,c->left+2*SLIDER_SPACING+1-FONT_WIDTH/2,47        c->top+SLIDER_SPACING+SLIDER_RANGE+3,48        "%d",s->s2*10/SLIDER_RANGE);49  GrPrint(dc,c->left+3*SLIDER_SPACING+2-FONT_WIDTH/2,50        c->top+SLIDER_SPACING+SLIDER_RANGE+3,51        "%d",s->s3*10/SLIDER_RANGE);52  GrRect(dc,c->left+SLIDER_SPACING-3,53        c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->s1-2 ,7,5);54  GrRect(dc,c->left+2*SLIDER_SPACING+1-3,55        c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->s2-2,7,5);56  GrRect(dc,c->left+3*SLIDER_SPACING+2-3,57        c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->s3-2,7,5);58  dc->color=GREEN;59  GrRect(dc,c->left+SLIDER_SPACING-2,60        c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->s1-1 ,5,3);61  GrRect(dc,c->left+2*SLIDER_SPACING+1-2,62        c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->s2-1,5,3);63  GrRect(dc,c->left+3*SLIDER_SPACING+2-2,64        c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->s3-1,5,3);65}66 67U0 UpdateDerivedCtrlSlider(CCtrl *c)68{69  CSliderState *s=c->state;70  c->left=c->win_task->pix_width/2-(SLIDER_SPACING*4+3)/2;71  c->right=c->left+SLIDER_SPACING*4+3;72  c->top=c->win_task->pix_height/2-(SLIDER_SPACING*2+SLIDER_RANGE)/2;73  c->bottom=c->top+SLIDER_SPACING*2+SLIDER_RANGE;74  s->s1=ClampI64(s->s1,0,SLIDER_RANGE-1);75  s->s2=ClampI64(s->s2,0,SLIDER_RANGE-1);76  s->s3=ClampI64(s->s3,1,SLIDER_RANGE-1);77  s->arg1=pi/2.0*s->s1/SLIDER_RANGE;78  s->arg2=1.0*(s->s2-SLIDER_RANGE/2)/SLIDER_RANGE;79  s->scale=2.0*s->s3/SLIDER_RANGE;80}81 82U0 LeftClickSlider(CCtrl *c,I64 x,I64 y,Bool)83{84  CSliderState *s=c->state;85  if (x<c->left+(c->right-c->left)/3)86    s->s1=SLIDER_RANGE-1-(y-(c->top+SLIDER_SPACING));87  else if (x<c->left+2*(c->right-c->left)/3)88    s->s2=SLIDER_RANGE-1-(y-(c->top+SLIDER_SPACING));89  else90    s->s3=SLIDER_RANGE-1-(y-(c->top+SLIDER_SPACING));91  if (c->update_derived_vals)92    (*c->update_derived_vals)(c);93}94 95CCtrl *SliderNew()96{97  CCtrl *c=CAlloc(sizeof(CCtrl));98  c->win_task=Fs;99  c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS;100  c->type=CTRLT_GENERIC;101  c->state=&s;102  MemSet(&s,0,sizeof(s));103  c->draw_it=&DrawCtrlSlider;104  c->left_click=&LeftClickSlider;105  c->update_derived_vals=&UpdateDerivedCtrlSlider;106  QueIns(c,Fs->last_ctrl);107  TaskDerivedValsUpdate;108  return c;109}110 111U0 SliderDel(CCtrl *c)112{113  QueRem(c);114  Free(c);115}116 117 118 119 120 121<1>/* Graphics Not Rendered in HTML */122 123#define MAP_HEIGHT      2048124#define MAP_WIDTH       2048125 126#define TREES_NUM       256127 128I64 tree_x[TREES_NUM],tree_y[TREES_NUM];129 130class MPCtrl {131  I64 mp_cnt;132  I64 r[16];133  F64 a;134} mp;135 136I64 mp_not_done_flags;137 138U0 MPDrawIt(CTask *task)139{140  CDC *dc=DCAlias(gr.dc2,task);141  I64 i,lo=Gs->num*TREES_NUM/mp.mp_cnt,hi=(Gs->num+1)*TREES_NUM/mp.mp_cnt;142  MemCpy(dc->r,mp.r,sizeof(I64)*16);143  dc->flags|=DCF_TRANSFORMATION;144  for (i=lo;i<hi;i++)145    Sprite3ZB(dc,tree_x[i],146          tree_y[i],0,<tree>,mp.a);147  DCDel(dc);148  LBtr(&mp_not_done_flags,Gs->num);149}150 151U0 DrawIt(CTask *task,CDC *dc)152{153  I64 i,h,v;154  task->horz_scroll.min=-s.scale*MAP_HEIGHT*Sin(s.arg1);155  task->horz_scroll.max=s.scale*MAP_WIDTH*Cos(s.arg1)-task->pix_width;156  task->vert_scroll.min=0;157  task->vert_scroll.max=s.scale*(MAP_HEIGHT*Cos(s.arg1)+MAP_WIDTH*Sin(s.arg1))158  -task->pix_height;159  TaskDerivedValsUpdate(task);160 161  h=task->horz_scroll.pos;162  v=task->vert_scroll.pos;163 164  Mat4x4RotZ(dc->r,s.arg1);165  Mat4x4Scale(dc->r,s.scale);166  DCMat4x4Set(dc,dc->r);167  Mat4x4TranslationEqu(dc->r,-h,-v,0);168  MemCpy(mp.r,dc->r,sizeof(I64)*16);169  mp.a=s.arg2;170 171  mp_not_done_flags=1<<mp_cnt-1;172  for (i=0;i<mp.mp_cnt;i++)173    JobQue(&MPDrawIt,task,i);174  while (mp_not_done_flags)175    Yield;176 177  dc->flags|=DCF_TRANSFORMATION;178  dc->color=BROWN;179  dc->thick=4;180  GrLine3(dc,2,2,0,MAP_WIDTH-3,2,0);181  GrLine3(dc,2,MAP_HEIGHT-3,0,MAP_WIDTH-3,MAP_HEIGHT-3,0);182  GrLine3(dc,2,2,0,2,MAP_HEIGHT-3,0);183  GrLine3(dc,MAP_WIDTH-3,2,0,MAP_WIDTH-3,MAP_HEIGHT-3,0);184}185 186U0 Init()187{188  I64 i;189  for (i=0;i<TREES_NUM;i++) {190    tree_x[i]=RandU16%MAP_WIDTH;191    tree_y[i]=RandU16%MAP_HEIGHT;192  }193}194 195U0 TransformDemo(I64 _mp_cnt=mp_cnt)196{197  SettingsPush; //See SettingsPush198  Init;199  Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER200        -WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS;201  Fs->draw_it=&DrawIt;202  WinBorder(ON);203  DocCursor;204  DocClear;205  DocScroll;206 207  Fs->horz_scroll.pos=0;208  Fs->vert_scroll.pos=0;209  CCtrl *c=SliderNew;210  s.s1=0;211  s.s2=SLIDER_RANGE/2;212  s.s3=SLIDER_RANGE/2;213 214  MemSet(&mp,0,sizeof(MPCtrl));215  mp.mp_cnt=_mp_cnt;216 217  View;218  SliderDel(c);219  SettingsPop;220//You might want to save the original state of the scroll bars.221}222 223TransformDemo;224