Blame


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