static int glist_expose(GWindow pixmap, GGadget *g, GEvent *event) { GDList *gl = (GDList *) g; GRect old0, old1, old2; Color fg, dfg; int y, l, ymax; if ( g->state == gs_invisible ) return( false ); GDrawPushClip(pixmap,&event->u.expose.rect,&old0); GDrawPushClip(pixmap,&g->r,&old1); GBoxDrawBackground(pixmap,&g->r,g->box, g->state,false); if ( g->box->border_type!=bt_none || (g->box->flags&(box_foreground_border_inner|box_foreground_border_outer|box_active_border_inner))!=0 ) { GBoxDrawBorder(pixmap,&g->r,g->box,g->state,false); GDrawPushClip(pixmap,&g->inner,&old2); } fg = g->state==gs_disabled?g->box->disabled_foreground:g->box->main_foreground; dfg = g->box->disabled_foreground; y = g->inner.y; ymax = g->inner.y+g->inner.height; if ( ymax>event->u.expose.rect.y+event->u.expose.rect.height ) ymax = event->u.expose.rect.y+event->u.expose.rect.height; for ( l = gl->loff; y<ymax && l<gl->ltot; ++l ) { if ( y+gl->hmax > event->u.expose.rect.y ) y += GTextInfoDraw(pixmap,g->inner.x-gl->xoff,y,gl->ti[l], gl->font,gl->ti[l]->disabled?dfg:fg,g->box->active_border, ymax); else if ( gl->sameheight ) y += gl->hmax; else y += GTextInfoGetHeight(pixmap,gl->ti[l],gl->font); } if ( g->box->border_type!=bt_none || (g->box->flags&(box_foreground_border_inner|box_foreground_border_outer|box_active_border_inner))!=0 ) GDrawPopClip(pixmap,&old2); GDrawPopClip(pixmap,&old1); GDrawPopClip(pixmap,&old0); return( true ); }
static int growcol_expose(GWindow pixmap, GGadget *g, GEvent *event) { GRowCol *grc = (GRowCol *) g; GRect old1, old2; Color fg, dfg; int y, l, ymax, i; if ( g->state == gs_invisible ) return( false ); GDrawPushClip(pixmap,&g->r,&old1); GBoxDrawBackground(pixmap,&g->r,g->box, g->state,false); if ( g->box->border_type!=bt_none || (g->box->flags&(box_foreground_border_inner|box_foreground_border_outer|box_active_border_inner))!=0 ) { GBoxDrawBorder(pixmap,&g->r,g->box,g->state,false); GDrawPushClip(pixmap,&g->inner,&old2); } fg = g->state==gs_disabled?g->box->disabled_foreground:g->box->main_foreground; dfg = g->box->disabled_foreground; y = g->inner.y; ymax = g->inner.y+g->inner.height; if ( ymax>event->u.expose.rect.y+event->u.expose.rect.height ) ymax = event->u.expose.rect.y+event->u.expose.rect.height; if ( grc->labels!=NULL ) { if ( y+grc->fh > event->u.expose.rect.y ) { GRect r; r = g->inner; r.height = fh; GDrawFillRect(pixmap,&r,GRowColLabelBg); for ( i=0; i<grc->cols; ++i ) { GTextInfoDraw(pixmap,g->inner.x+grc->colx[i]+grc->hpad-grc->xoff,y,grc->labels[i], grc->font,grc->labels[l]->disabled?dfg:dfg,g->box->active_border g->inner.y+g->inner.height); } } y += grc->fh; if ( grc->hrules ) GDrawDrawLine(pixmap,g->inner.x,y-1,g->inner.x+g->inner.width,y-1,fg); } for ( l = grc->loff; y<ymax && l<grc->rows; ++l ) { if ( y+grc->fh > event->u.expose.rect.y ) { for ( i=0; i<grc->cols; ++i ) { if ( l!=grc->tfr || i!=grc->tfc ) { GTextInfo *ti = grc->ti[l*grc->cols+i]; GTextInfoDraw(pixmap,g->inner.x+grc->colx[i]-grc->xoff+grc->hpad,y,ti, grc->font,ti->disabled?dfg:dfg,g->box->active_border, g->inner.y+g->inner.height); } else { /* now we can draw the text field */ grc->tf->dontdraw = false; (grc->tf->g.gfuncs->handle_expose)(pixmap,&grc->tf->g,event); grc->tf->dontdraw = true; } } } y += grc->fh; if ( grc->hrules ) GDrawDrawLine(pixmap,g->inner.x,y-1,g->inner.x+g->inner.width,y-1,fg); } if ( grc->vrules ) { for ( i=1; i<grc->cols; ++i ) GDrawDrawLine(pixmap,grc->colx[i]-grc->xoff,g->inner.y, grc->colx[i]-grc->xoff,g->inner.y+g->inner.height,fg); } if ( g->box->border_type!=bt_none || (g->box->flags&(box_foreground_border_inner|box_foreground_border_outer|box_active_border_inner))!=0 ) GDrawPopClip(pixmap,&old2); GDrawPopClip(pixmap,&old1); return( true ); }