static void renderchilds(Page *p) { Rectangle r; Kidinfo *k; Page *c; int i, j, x, y, *w, *h; draw(p->b, p->all, display->white, nil, ZP); r = p->all; y = r.min.y; c = p->child; k = p->kidinfo; frdims(k->rows, k->nrows, Dy(r), &h); frdims(k->cols, k->ncols, Dx(r), &w); for(i=0; i<k->nrows; i++){ x = r.min.x; for(j=0; j<k->ncols; j++){ if(c->aborting) return; c->b = p->b; c->all = Rect(x,y,x+w[j],y+h[i]); c->w = p->w; pagerender(c); c = c->next; x += w[j]; } y += h[i]; } free(w); free(h); }
/* called while row is locked */ void flushrefresh(void) { Refresh *r, *next; Page *p; qlock(&refreshlock); for(r=refreshs; r!=nil; r=next) { p = r->p; if(p->changed==TRUE && p->aborting==FALSE) { p->changed = FALSE; if(p->parent==nil || p->loading==FALSE) pagerender(p); if(!p->refresh.t) pagesetrefresh(p); } if(p->status) { winsetstatus(p->w, p->status); free(p->status); p->status = nil; } winseturl(p->w); winsettag(p->w); decref(p->w); next = r->next; free(r); } refreshs = nil; qunlock(&refreshlock); }