]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libmemlayer/lhide.c
libc: revert date change again. this is getting ridicuoulus.
[plan9front.git] / sys / src / libmemlayer / lhide.c
1 #include <u.h>
2 #include <libc.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 }