static void GroupResize(struct groupdlg *grp,GEvent *event) { GRect size, wsize; int lcnt, offy; int sbsize = GDrawPointsToPixels(grp->gw,_GScrollBar_Width); GDrawGetSize(grp->gw,&size); lcnt = (size.height-grp->bmargin)/grp->fh; GGadgetResize(grp->vsb,sbsize,lcnt*grp->fh); GGadgetMove(grp->vsb,size.width-sbsize,0); GGadgetResize(grp->hsb,size.width-sbsize,sbsize); GGadgetMove(grp->hsb,0,lcnt*grp->fh); GDrawResize(grp->v,size.width-sbsize,lcnt*grp->fh); grp->page_width = size.width-sbsize; grp->lines_page = lcnt; GScrollBarSetBounds(grp->vsb,0,grp->open_cnt,grp->lines_page); GScrollBarSetBounds(grp->hsb,0,grp->maxl,grp->page_width); GGadgetGetSize(grp->cancel,&wsize); offy = size.height-wsize.height-6 - wsize.y; GGadgetMove(grp->cancel,size.width-wsize.width-30, wsize.y+offy); GGadgetMove(grp->ok , 30-3,wsize.y+offy-3); if ( grp->newsub!=NULL ) { GGadgetGetSize(grp->newsub,&wsize); GGadgetMove(grp->newsub,wsize.x,wsize.y+offy); GGadgetGetSize(grp->delete,&wsize); GGadgetMove(grp->delete,wsize.x,wsize.y+offy); GGadgetGetSize(grp->line1,&wsize); GGadgetMove(grp->line1,wsize.x,wsize.y+offy); GGadgetGetSize(grp->gpnamelab,&wsize); GGadgetMove(grp->gpnamelab,wsize.x,wsize.y+offy); GGadgetGetSize(grp->gpname,&wsize); GGadgetMove(grp->gpname,wsize.x,wsize.y+offy); GGadgetGetSize(grp->glyphslab,&wsize); GGadgetMove(grp->glyphslab,wsize.x,wsize.y+offy); GGadgetGetSize(grp->glyphs,&wsize); GGadgetMove(grp->glyphs,wsize.x,wsize.y+offy); GGadgetGetSize(grp->idlab,&wsize); GGadgetMove(grp->idlab,wsize.x,wsize.y+offy); GGadgetGetSize(grp->idname,&wsize); GGadgetMove(grp->idname,wsize.x,wsize.y+offy); GGadgetGetSize(grp->iduni,&wsize); GGadgetMove(grp->iduni,wsize.x,wsize.y+offy); GGadgetGetSize(grp->set,&wsize); GGadgetMove(grp->set,wsize.x,wsize.y+offy); GGadgetGetSize(grp->select,&wsize); GGadgetMove(grp->select,wsize.x,wsize.y+offy); GGadgetGetSize(grp->unique,&wsize); GGadgetMove(grp->unique,wsize.x,wsize.y+offy); GGadgetGetSize(grp->colour,&wsize); GGadgetMove(grp->colour,wsize.x,wsize.y+offy); GGadgetGetSize(grp->line2,&wsize); GGadgetMove(grp->line2,wsize.x,wsize.y+offy); } else {
static int GroupSBSizes(struct groupdlg *grp) { int lpos; grp->maxl = 0; GDrawSetFont(grp->v,grp->font); lpos = _GroupSBSizes(grp,grp->root,0,0); grp->maxl += 5; /* margin */ GScrollBarSetBounds(grp->vsb,0,lpos,grp->lines_page); GScrollBarSetBounds(grp->hsb,0,grp->maxl,grp->page_width); grp->open_cnt = lpos; return( lpos ); }
static void GRowColCheckSB(GRowCol *grc) { if ( GRowColLinesInWindow(grc,0)<grc->ltot ) { if ( grc->vsb==NULL ) { GGadgetData gd; memset(&gd,'\0',sizeof(gd)); gd.pos.y = grc->g.r.y; gd.pos.height = grc->g.r.height; gd.pos.width = GDrawPointsToPixels(grc->g.base,_GScrollBar_Width); gd.pos.x = grc->g.r.x+grc->g.r.width - gd.pos.width; gd.flags = gg_visible|gg_enabled|gg_pos_in_pixels|gg_sb_vert|gg_pos_use0; gd.handle_controlevent = growcol_scroll; grc->vsb = (GScrollBar *) GScrollBarCreate(grc->g.base,&gd,grc); grc->vsb->g.contained = true; gd.pos.width += GDrawPointsToPixels(grc->g.base,1); grc->g.r.width -= gd.pos.width; grc->g.inner.width -= gd.pos.width; } GScrollBarSetBounds(&grc->vsb->g,0,grc->ltot-1,GRowColLinesInWindow(grc,0)); GScrollBarSetPos(&grc->vsb->g,grc->loff); } else { if ( grc->vsb!=NULL ) { int wid = grc->vsb->g.r.width + GDrawPointsToPixels(grc->g.base,1); (grc->vsb->g.funcs->destroy)(&grc->vsb->g); grc->vsb = NULL; grc->g.r.width += wid; grc->g.inner.width += wid; } } }
static void GListCheckSB(GDList *gl) { if ( gl->vsb==NULL ) { GGadgetData gd; memset(&gd,'\0',sizeof(gd)); gd.pos.y = gl->g.r.y; gd.pos.height = gl->g.r.height; gd.pos.width = GDrawPointsToPixels(gl->g.base,_GScrollBar_Width); gd.pos.x = gl->g.r.x+gl->g.r.width - gd.pos.width; gd.flags = gg_visible|gg_enabled|gg_pos_in_pixels|gg_sb_vert|gg_pos_use0; gd.handle_controlevent = glist_scroll; gl->vsb = (GScrollBar *) GScrollBarCreate(gl->g.base,&gd,gl); gl->vsb->g.contained = true; gd.pos.width += GDrawPointsToPixels(gl->g.base,1); gl->g.r.width -= gd.pos.width; gl->g.inner.width -= gd.pos.width; } if ( gl->always_show_sb || GListLinesInWindow(gl,0)<gl->ltot ) { if ( gl->vsb->g.state == gs_invisible ) { int wid = gl->vsb->g.r.width + GDrawPointsToPixels(gl->g.base,1); gl->vsb->g.state = gs_enabled; gl->g.r.width -= wid; gl->g.inner.width -= wid; } GScrollBarSetBounds(&gl->vsb->g,0,gl->ltot,GListLinesInWindow(gl,0)); GScrollBarSetPos(&gl->vsb->g,gl->loff); } else { if ( gl->vsb->g.state != gs_invisible ) { int wid = gl->vsb->g.r.width + GDrawPointsToPixels(gl->g.base,1); gl->vsb->g.state = gs_invisible; gl->g.r.width += wid; gl->g.inner.width += wid; } } }
static void AnchorD_SetSB(AnchorDlg *a) { GScrollBarSetBounds(a->hsb,0,a->xlen,a->sb_width); if ( a->xoff+a->sb_width > a->xlen ) a->xoff = a->xlen - a->sb_width; if ( a->xoff<0 ) a->xoff = 0; GScrollBarSetPos(a->hsb,a->xoff); }
static void QG_SetSb(QGData *qg) { if ( qg->loff_top + qg->vlcnt > qg->lcnt ) qg->loff_top = qg->lcnt-qg->vlcnt; if ( qg->loff_top<0 ) qg->loff_top = 0; GScrollBarSetBounds(qg->vsb,0,qg->lcnt,qg->vlcnt); GScrollBarSetPos(qg->vsb,qg->loff_top); }
static void BdfP_RefigureScrollbar(struct bdf_dlg *bd) { struct bdf_dlg_font *cur = bd->cur; int lines = bd->vheight/(bd->fh+1); /* allow for one extra line which will display "New" */ GScrollBarSetBounds(bd->vsb,0,cur->bdf->prop_cnt+1,lines); if ( cur->top_prop+lines>cur->bdf->prop_cnt+1 ) cur->top_prop = cur->bdf->prop_cnt+1-lines; if ( cur->top_prop < 0 ) cur->top_prop = 0; GScrollBarSetPos(bd->vsb,cur->top_prop); }
static int warnings_e_h(GWindow gw, GEvent *event) { if (( event->type==et_mouseup || event->type==et_mousedown ) && (event->u.mouse.button>=4 && event->u.mouse.button<=7) ) { return( GGadgetDispatchEvent(errdata.vsb,event)); } switch ( event->type ) { case et_char: return( ErrChar(event)); break; case et_expose: break; case et_resize: { GRect size, sbsize; GDrawGetSize(gw,&size); GGadgetGetSize(errdata.vsb,&sbsize); GGadgetMove(errdata.vsb,size.width-sbsize.width,0); GGadgetResize(errdata.vsb,sbsize.width,size.height); GDrawResize(errdata.v,size.width-sbsize.width,size.height); errdata.linecnt = size.height/errdata.fh; GScrollBarSetBounds(errdata.vsb,0,errdata.cnt,errdata.linecnt); if ( errdata.offtop + errdata.linecnt > errdata.cnt ) { errdata.offtop = errdata.cnt-errdata.linecnt; if ( errdata.offtop < 0 ) errdata.offtop = 0; GScrollBarSetPos(errdata.vsb,errdata.offtop); } GDrawRequestExpose(errdata.v,NULL,false); } break; case et_controlevent: switch ( event->u.control.subtype ) { case et_scrollbarchange: ErrScroll(&event->u.control.u.sb); break; } break; case et_close: ErrHide(); break; case et_create: break; case et_destroy: break; } return( true ); }
static void KPV_Resize(KPData *kpd) { GRect size; GGadget *sb; GDrawGetSize(kpd->v,&size); kpd->wh = size.height/kpd->uh; sb = GWidgetGetControl(kpd->gw,CID_ScrollBar); GScrollBarSetBounds(sb,0,kpd->kcnt,kpd->wh); if ( kpd->off_top>kpd->kcnt-kpd->wh ) kpd->off_top = kpd->kcnt-kpd->wh; if ( kpd->off_top<0 ) kpd->off_top = 0; GScrollBarSetPos(sb,kpd->off_top); kpd->vwidth = size.width; GDrawRequestExpose(kpd->v,NULL,false); GDrawRequestExpose(kpd->gw,NULL,false); }
static void AppendToErrorWindow(char *buffer) { int i,linecnt; char *pt,*end; if ( buffer[strlen(buffer)-1]=='\n' ) buffer[strlen(buffer)-1] = '\0'; for ( linecnt=1, pt=buffer; (pt=strchr(pt,'\n'))!=NULL; ++linecnt ) ++pt; if ( errdata.cnt + linecnt > MAX_ERR_LINES ) { int off = errdata.cnt + linecnt - MAX_ERR_LINES; for ( i=0; i<off; ++i ) free(errdata.errlines[i]); for ( /*i=off*/; i<errdata.cnt; ++i ) errdata.errlines[i-off] = errdata.errlines[i]; for ( ; i<MAX_ERR_LINES+off ; ++i ) errdata.errlines[i-off] = NULL; errdata.cnt -= off; if (( errdata.start_l -= off)< 0 ) errdata.start_l = errdata.start_c = 0; if (( errdata.end_l -= off)< 0 ) errdata.end_l = errdata.start_l = -1; } for ( i=errdata.cnt, pt=buffer; i<MAX_ERR_LINES; ++i ) { end = strchr(pt,'\n'); if ( end==NULL ) end = pt+strlen(pt); errdata.errlines[i] = copyn(pt,end-pt); pt = end; if ( *pt=='\0' ) { ++i; break; } ++pt; } errdata.cnt = i; errdata.offtop = errdata.cnt - errdata.linecnt; if ( errdata.offtop<0 ) errdata.offtop = 0; GScrollBarSetBounds(errdata.vsb,0,errdata.cnt,errdata.linecnt); GScrollBarSetPos(errdata.vsb,errdata.offtop); }
/* between those rows, and then the widths of each tab */ static void GTabSet_Remetric(GTabSet *gts) { int bbp = GBoxBorderWidth(gts->g.base,gts->g.box); int bp = bbp + GDrawPointsToPixels(gts->g.base,5); int r, r2, width, i; int as, ds, ld; int ni = GDrawPointsToPixels(gts->g.base,NEST_INDENT), in; GDrawSetFont(gts->g.base,gts->font); GDrawWindowFontMetrics(gts->g.base,gts->font,&as,&ds,&ld); gts->as = as; gts->fh = as+ds; gts->rowh = as+ds + bbp+GDrawPointsToPixels(gts->g.base,3); gts->ds = ds + bbp+GDrawPointsToPixels(gts->g.base,1); gts->arrow_size = as+ds; gts->arrow_width = gts->arrow_size + 2*GBoxBorderWidth(gts->g.base,gts->g.box); gts->vert_list_width = 0; for ( i=0; i<gts->tabcnt; ++i ) { gts->tabs[i].tw = GDrawGetTextWidth(gts->g.base,gts->tabs[i].name,-1); gts->tabs[i].width = gts->tabs[i].tw + 2*bp; in = gts->tabs[i].nesting*ni; if ( gts->tabs[i].tw+in > gts->vert_list_width ) gts->vert_list_width = gts->tabs[i].tw+in; } if ( gts->vsb ) { gts->vert_list_width += gts->vsb->r.width; if ( gts->g.inner.height>26 ) { int bp = GBoxBorderWidth(gts->g.base,gts->g.box); GScrollBarSetBounds(gts->vsb,0,gts->tabcnt,(gts->g.r.height-2*bp-6)/gts->fh); } } gts->vert_list_width += 8; if ( gts->vertical ) { /* Nothing much to do */ } else if ( gts->scrolled ) { free(gts->rowstarts); gts->rowstarts = malloc(2*sizeof(16)); gts->rowstarts[0] = 0; gts->rowstarts[1] = gts->tabcnt; gts->rcnt = 1; } else { width = gts->g.r.width-2*GBoxBorderWidth(gts->g.base,gts->g.box); r = GTabSetRCnt(gts,width); if ( gts->offset_per_row!=0 && r>1 ) while ( (r2 = GTabSetRCnt(gts,width-(r-1)*gts->offset_per_row))!=r ) r = r2; free(gts->rowstarts); gts->rowstarts = malloc((r+1)*sizeof(int16)); gts->rcnt = r; gts->rowstarts[r] = gts->tabcnt; for ( i=r=0; i<gts->tabcnt; ++i ) { if ( gts->tabs[i].x==0 ) gts->rowstarts[r++] = i; } /* if there is a single tab on the last line and there are more on */ /* the previous line, then things look nicer if we move one of the */ /* tabs from the previous line onto the last line */ /* Providing it fits, of course */ if ( gts->rowstarts[r]-gts->rowstarts[r-1]==1 && r>1 && gts->rowstarts[r-1]-gts->rowstarts[r-2]>1 && gts->tabs[i-1].width+gts->tabs[i-2].width < width-(r-1)*gts->offset_per_row ) --gts->rowstarts[r-1]; GTabSetFigureWidths(gts); } }