Blame


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