1*7dd7cddfSDavid du Colombier #include "../lib9.h" 2*7dd7cddfSDavid du Colombier 3*7dd7cddfSDavid du Colombier #include "../libdraw/draw.h" 4*7dd7cddfSDavid du Colombier #include "../libmemdraw/memdraw.h" 5*7dd7cddfSDavid du Colombier #include "../libmemlayer/memlayer.h" 6*7dd7cddfSDavid du Colombier 7*7dd7cddfSDavid du Colombier /* 8*7dd7cddfSDavid du Colombier * Hide puts that portion of screenr now on the screen into the window's save area. 9*7dd7cddfSDavid du Colombier * Expose puts that portion of screenr now in the save area onto the screen. 10*7dd7cddfSDavid du Colombier * 11*7dd7cddfSDavid du Colombier * Hide and Expose both require that the layer structures in the screen 12*7dd7cddfSDavid du Colombier * match the geometry they are being asked to update, that is, they update the 13*7dd7cddfSDavid du Colombier * save area (hide) or screen (expose) based on what those structures tell them. 14*7dd7cddfSDavid du Colombier * This means they must be called at the correct time during window shuffles. 15*7dd7cddfSDavid du Colombier */ 16*7dd7cddfSDavid du Colombier 17*7dd7cddfSDavid du Colombier static 18*7dd7cddfSDavid du Colombier void 19*7dd7cddfSDavid du Colombier lhideop(Memimage *src, Rectangle screenr, Rectangle clipr, void *etc, int insave) 20*7dd7cddfSDavid du Colombier { 21*7dd7cddfSDavid du Colombier Rectangle r; 22*7dd7cddfSDavid du Colombier Memlayer *l; 23*7dd7cddfSDavid du Colombier 24*7dd7cddfSDavid du Colombier USED(clipr.min.x); 25*7dd7cddfSDavid du Colombier USED(insave); 26*7dd7cddfSDavid du Colombier l = etc; 27*7dd7cddfSDavid du Colombier if(src != l->save){ /* do nothing if src is already in save area */ 28*7dd7cddfSDavid du Colombier r = rectsubpt(screenr, l->delta); 29*7dd7cddfSDavid du Colombier memdraw(l->save, r, src, screenr.min, nil, screenr.min); 30*7dd7cddfSDavid du Colombier } 31*7dd7cddfSDavid du Colombier } 32*7dd7cddfSDavid du Colombier 33*7dd7cddfSDavid du Colombier void 34*7dd7cddfSDavid du Colombier memlhide(Memimage *i, Rectangle screenr) 35*7dd7cddfSDavid du Colombier { 36*7dd7cddfSDavid du Colombier if(i->layer->save == nil) 37*7dd7cddfSDavid du Colombier return; 38*7dd7cddfSDavid du Colombier if(rectclip(&screenr, i->layer->screen->image->r) == 0) 39*7dd7cddfSDavid du Colombier return; 40*7dd7cddfSDavid du Colombier memlayerop(lhideop, i, screenr, screenr, i->layer); 41*7dd7cddfSDavid du Colombier } 42*7dd7cddfSDavid du Colombier 43*7dd7cddfSDavid du Colombier void 44*7dd7cddfSDavid du Colombier lexposeop(Memimage *dst, Rectangle screenr, Rectangle clipr, void *etc, int insave) 45*7dd7cddfSDavid du Colombier { 46*7dd7cddfSDavid du Colombier Memlayer *l; 47*7dd7cddfSDavid du Colombier Rectangle r; 48*7dd7cddfSDavid du Colombier 49*7dd7cddfSDavid du Colombier USED(clipr.min.x); 50*7dd7cddfSDavid du Colombier if(insave) /* if dst is save area, don't bother */ 51*7dd7cddfSDavid du Colombier return; 52*7dd7cddfSDavid du Colombier l = etc; 53*7dd7cddfSDavid du Colombier r = rectsubpt(screenr, l->delta); 54*7dd7cddfSDavid du Colombier if(l->save) 55*7dd7cddfSDavid du Colombier memdraw(dst, screenr, l->save, r.min, nil, r.min); 56*7dd7cddfSDavid du Colombier else 57*7dd7cddfSDavid du Colombier l->refreshfn(dst, r, l->refreshptr); 58*7dd7cddfSDavid du Colombier } 59*7dd7cddfSDavid du Colombier 60*7dd7cddfSDavid du Colombier void 61*7dd7cddfSDavid du Colombier memlexpose(Memimage *i, Rectangle screenr) 62*7dd7cddfSDavid du Colombier { 63*7dd7cddfSDavid du Colombier if(rectclip(&screenr, i->layer->screen->image->r) == 0) 64*7dd7cddfSDavid du Colombier return; 65*7dd7cddfSDavid du Colombier memlayerop(lexposeop, i, screenr, screenr, i->layer); 66*7dd7cddfSDavid du Colombier } 67