Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
CtrlsBttn.txt93 linesDownload Raw Back to Ctrls
1 2#define BTTN_BORDER     23 4#define BTF_DONT_FREE   15 6class CCtrlBttnState7{8  I64 state,num_states,flags;9  U8 *state_texts;10  CColorROPU32 *state_colors;11};12 13U0 DrawCtrlBttn(CDC *dc,CCtrl *c)14{15  CCtrlBttnState *s=c->state;16  I64 l;17  U8 *st;18 19  dc->color=BLACK;20  GrRect(dc,c->left,c->top,c->right-c->left+1,c->bottom-c->top+1);21  if (!(st=LstSub(s->state,s->state_texts)))22    st=s->state_texts;23  dc->color=s->state_colors[s->state];24  l=StrLen(st);25  GrRect(dc,c->left+BTTN_BORDER,c->top+BTTN_BORDER,26        c->right-c->left+1-BTTN_BORDER*2,27        c->bottom-c->top+1-BTTN_BORDER*2);28  dc->color=s->state_colors[s->state]^(WHITE<<16+WHITE);29  GrPrint(dc,(c->left+c->right+1-l*FONT_WIDTH)>>1,30        (c->top+c->bottom+1-FONT_HEIGHT)>>1,"%s",st);31}32 33U0 LeftClickCtrlBttn(CCtrl *c,I64,I64,Bool down)34{35  CCtrlBttnState *s=c->state;36  if (down) {37    s->state++;38    if (s->state==s->num_states)39      s->state=0;40  }41}42 43public CCtrl *CtrlBttnNew(I64 x,I64 y,I64 width=-1,I64 height=-1,44        I64 num_states=1,U8 *state_texts,45        I32 *state_colors,CCtrlBttnState *_s=NULL)46{//Create bttn ctrl. See ::/Apps/Strut/Strut.HC.47  CCtrl *res;48  CCtrlBttnState *s;49  I64 i,j,l;50  U8 *st;51  if (width<0) {52    l=1;53    for (i=0;i<num_states;i++)54      if (st=LstSub(i,state_texts)) {55        j=StrLen(st);56        if (j>l) l=j;57      }58    width=BTTN_BORDER*4+l*FONT_WIDTH;59  }60  if (height<0) height=BTTN_BORDER*4+FONT_HEIGHT;61  res=CAlloc(sizeof(CCtrl));62  if (_s) {63    s=_s;64    MemSet(s,0,sizeof(CCtrlBttnState));65  } else {66    s=CAlloc(sizeof(CCtrlBttnState));67    s->flags=BTF_DONT_FREE;68  }69  s->num_states=num_states;70  s->state_texts=state_texts;71  s->state_colors=state_colors;72  res->win_task=Fs;73  res->flags=CTRLF_SHOW;74  res->type=CTRLT_GENERIC;75  res->state=s;76  res->draw_it=&DrawCtrlBttn;77  res->left_click=&LeftClickCtrlBttn;78  res->left=x;79  res->top=y;80  res->right=res->left+width-1;81  res->bottom=res->top+height-1;82  QueIns(res,Fs->last_ctrl);83  return res;84}85 86public U0 CtrlBttnDel(CCtrl *c)87{//Free bttn ctrl.88  QueRem(c);89  if (!(c->flags&BTF_DONT_FREE))90    Free(c->state);91  Free(c);92}93