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