12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
- #include <u.h>
- #include <libc.h>
- #include <draw.h>
- #include <memdraw.h>
- #include <memlayer.h>
- /*
- * Hide puts that portion of screenr now on the screen into the window's save area.
- * Expose puts that portion of screenr now in the save area onto the screen.
- *
- * Hide and Expose both require that the layer structures in the screen
- * match the geometry they are being asked to update, that is, they update the
- * save area (hide) or screen (expose) based on what those structures tell them.
- * This means they must be called at the correct time during window shuffles.
- */
- static
- void
- lhideop(Memimage *src, Rectangle screenr, Rectangle clipr, void *etc, int insave)
- {
- Rectangle r;
- Memlayer *l;
- USED(clipr.min.x);
- USED(insave);
- l = etc;
- if(src != l->save){ /* do nothing if src is already in save area */
- r = rectsubpt(screenr, l->delta);
- memdraw(l->save, r, src, screenr.min, nil, screenr.min, S);
- }
- }
- void
- memlhide(Memimage *i, Rectangle screenr)
- {
- if(i->layer->save == nil)
- return;
- if(rectclip(&screenr, i->layer->screen->image->r) == 0)
- return;
- _memlayerop(lhideop, i, screenr, screenr, i->layer);
- }
- static
- void
- lexposeop(Memimage *dst, Rectangle screenr, Rectangle clipr, void *etc, int insave)
- {
- Memlayer *l;
- Rectangle r;
- USED(clipr.min.x);
- if(insave) /* if dst is save area, don't bother */
- return;
- l = etc;
- r = rectsubpt(screenr, l->delta);
- if(l->save)
- memdraw(dst, screenr, l->save, r.min, nil, r.min, S);
- else
- l->refreshfn(dst, r, l->refreshptr);
- }
- void
- memlexpose(Memimage *i, Rectangle screenr)
- {
- if(rectclip(&screenr, i->layer->screen->image->r) == 0)
- return;
- _memlayerop(lexposeop, i, screenr, screenr, i->layer);
- }
|