|
|
1.1 root 1: /*
2: * Move a layer to the back of the screen
3: */
4: #include <jerq.h>
5: #include "layer.h"
6:
7: static void
8: LLdownback(l, r, b, f, o)
9: Layer *l, *o;
10: Rectangle r;
11: Bitmap *b;
12: char *f;
13: {
14: if (o) {
15: o->nonevis = 0;
16: o->someobs = 2; /* so we know to update it */
17: l->someobs = 1;
18: bitblt(l, r, l->obs, r.origin, F_STORE);
19: bitblt(o->obs, r, o, r.origin, F_STORE);
20: } else
21: l->nonevis = 0;
22: }
23:
24: static void
25: Ldownback(l, r, b, f, o)
26: Layer *l, *o;
27: Rectangle r;
28: Bitmap *b;
29: char *f;
30: {
31: if (l==o)
32: mRlayerop(l, LLdownback, r, f, l->back);
33: else
34: l->someobs = 1;
35: }
36:
37: downback(lp)
38: register Layer *lp;
39: {
40: register Layer *l, *visl;
41:
42: if(lp==0 || lp->back==0)
43: return; /* Why continue? */
44: /*
45: * Move bits of lp to back
46: */
47: cursinhibit();
48: if (!lp->nonevis) {
49: lp->nonevis = 1; /* if any stays on screen, this gets unset */
50: if (lp->someobs) {
51: lp->someobs = 0; /* hack to make layerop work out */
52: layerop(lp, Ldownback, lp->rect);
53: } else
54: mRlayerop(lp, LLdownback, lp->rect, (char *)0, lp->back);
55: }
56: cursallow();
57: /*
58: * Put lp at back
59: */
60: if(lback!=lp){
61: if(lfront==lp)
62: lfront=lp->back;
63: if(lp->front)
64: lp->front->back=lp->back;
65: lp->back->front=lp->front;
66: lback->back=lp;
67: lp->front=lback;
68: lp->back=0;
69: lback=lp;
70: }
71: /*
72: * We may have made some of the rectangles behind lp fully
73: * visible, which is flagged by someobs==2.
74: */
75: for (visl=lfront; visl; visl=visl->back) {
76: if (visl->someobs == 2) {
77: visl->someobs = 0;
78: for (l=lfront; l!=visl; l=l->back)
79: if (rectXrect(visl->rect, l->rect)) {
80: visl->someobs = 1;
81: break;
82: }
83: }
84: }
85: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.