Blame


1 c66b5250 2006-06-25 devnull #include <u.h>
2 c66b5250 2006-06-25 devnull #include "x11-inc.h"
3 c66b5250 2006-06-25 devnull #include <libc.h>
4 c66b5250 2006-06-25 devnull #include <draw.h>
5 c66b5250 2006-06-25 devnull #include <memdraw.h>
6 c66b5250 2006-06-25 devnull #include "x11-memdraw.h"
7 c66b5250 2006-06-25 devnull
8 c66b5250 2006-06-25 devnull static void
9 c66b5250 2006-06-25 devnull addrect(Rectangle *rp, Rectangle r)
10 c66b5250 2006-06-25 devnull {
11 c66b5250 2006-06-25 devnull if(rp->min.x >= rp->max.x)
12 c66b5250 2006-06-25 devnull *rp = r;
13 c66b5250 2006-06-25 devnull else
14 c66b5250 2006-06-25 devnull combinerect(rp, r);
15 c66b5250 2006-06-25 devnull }
16 c66b5250 2006-06-25 devnull
17 c66b5250 2006-06-25 devnull XImage*
18 c66b5250 2006-06-25 devnull _xgetxdata(Memimage *m, Rectangle r)
19 c66b5250 2006-06-25 devnull {
20 c66b5250 2006-06-25 devnull int x, y;
21 c66b5250 2006-06-25 devnull uchar *p;
22 c66b5250 2006-06-25 devnull Point tp, xdelta, delta;
23 c66b5250 2006-06-25 devnull Xmem *xm;
24 c66b5250 2006-06-25 devnull
25 c66b5250 2006-06-25 devnull xm = m->X;
26 c66b5250 2006-06-25 devnull if(xm == nil)
27 c66b5250 2006-06-25 devnull return nil;
28 c66b5250 2006-06-25 devnull
29 c66b5250 2006-06-25 devnull if(xm->dirty == 0)
30 c66b5250 2006-06-25 devnull return xm->xi;
31 c66b5250 2006-06-25 devnull
32 c66b5250 2006-06-25 devnull abort(); /* should never call this now */
33 c66b5250 2006-06-25 devnull
34 c66b5250 2006-06-25 devnull r = xm->dirtyr;
35 c66b5250 2006-06-25 devnull if(Dx(r)==0 || Dy(r)==0)
36 c66b5250 2006-06-25 devnull return xm->xi;
37 c66b5250 2006-06-25 devnull
38 c66b5250 2006-06-25 devnull delta = subpt(r.min, m->r.min);
39 c66b5250 2006-06-25 devnull
40 c66b5250 2006-06-25 devnull tp = xm->r.min; /* need temp for Digital UNIX */
41 c66b5250 2006-06-25 devnull xdelta = subpt(r.min, tp);
42 c66b5250 2006-06-25 devnull
43 c66b5250 2006-06-25 devnull XGetSubImage(_x.display, xm->pixmap, delta.x, delta.y, Dx(r), Dy(r),
44 c66b5250 2006-06-25 devnull AllPlanes, ZPixmap, xm->xi, xdelta.x, delta.y);
45 c66b5250 2006-06-25 devnull
46 c66b5250 2006-06-25 devnull if(_x.usetable && m->chan==CMAP8){
47 c66b5250 2006-06-25 devnull for(y=r.min.y; y<r.max.y; y++)
48 c66b5250 2006-06-25 devnull for(x=r.min.x, p=byteaddr(m, Pt(x,y)); x<r.max.x; x++, p++)
49 c66b5250 2006-06-25 devnull *p = _x.toplan9[*p];
50 c66b5250 2006-06-25 devnull }
51 c66b5250 2006-06-25 devnull xm->dirty = 0;
52 c66b5250 2006-06-25 devnull xm->dirtyr = Rect(0,0,0,0);
53 c66b5250 2006-06-25 devnull return xm->xi;
54 c66b5250 2006-06-25 devnull }
55 c66b5250 2006-06-25 devnull
56 c66b5250 2006-06-25 devnull void
57 c66b5250 2006-06-25 devnull _xputxdata(Memimage *m, Rectangle r)
58 c66b5250 2006-06-25 devnull {
59 220c15d2 2012-10-20 rsc int x, y;
60 c66b5250 2006-06-25 devnull uchar *p;
61 c66b5250 2006-06-25 devnull Point tp, xdelta, delta;
62 c66b5250 2006-06-25 devnull Xmem *xm;
63 c66b5250 2006-06-25 devnull XGC gc;
64 c66b5250 2006-06-25 devnull XImage *xi;
65 c66b5250 2006-06-25 devnull
66 c66b5250 2006-06-25 devnull xm = m->X;
67 c66b5250 2006-06-25 devnull if(xm == nil)
68 c66b5250 2006-06-25 devnull return;
69 c66b5250 2006-06-25 devnull
70 c66b5250 2006-06-25 devnull xi = xm->xi;
71 c66b5250 2006-06-25 devnull gc = m->chan==GREY1 ? _x.gccopy0 : _x.gccopy;
72 c66b5250 2006-06-25 devnull
73 c66b5250 2006-06-25 devnull delta = subpt(r.min, m->r.min);
74 c66b5250 2006-06-25 devnull
75 c66b5250 2006-06-25 devnull tp = xm->r.min; /* need temporary on Digital UNIX */
76 c66b5250 2006-06-25 devnull xdelta = subpt(r.min, tp);
77 c66b5250 2006-06-25 devnull
78 c66b5250 2006-06-25 devnull if(_x.usetable && m->chan==CMAP8){
79 c66b5250 2006-06-25 devnull for(y=r.min.y; y<r.max.y; y++)
80 c66b5250 2006-06-25 devnull for(x=r.min.x, p=byteaddr(m, Pt(x,y)); x<r.max.x; x++, p++)
81 c66b5250 2006-06-25 devnull *p = _x.tox11[*p];
82 c66b5250 2006-06-25 devnull }
83 c66b5250 2006-06-25 devnull
84 c66b5250 2006-06-25 devnull XPutImage(_x.display, xm->pixmap, gc, xi, xdelta.x, xdelta.y, delta.x, delta.y,
85 c66b5250 2006-06-25 devnull Dx(r), Dy(r));
86 c66b5250 2006-06-25 devnull
87 c66b5250 2006-06-25 devnull if(_x.usetable && m->chan==CMAP8){
88 c66b5250 2006-06-25 devnull for(y=r.min.y; y<r.max.y; y++)
89 c66b5250 2006-06-25 devnull for(x=r.min.x, p=byteaddr(m, Pt(x,y)); x<r.max.x; x++, p++)
90 c66b5250 2006-06-25 devnull *p = _x.toplan9[*p];
91 c66b5250 2006-06-25 devnull }
92 c66b5250 2006-06-25 devnull }
93 c66b5250 2006-06-25 devnull
94 c66b5250 2006-06-25 devnull void
95 c66b5250 2006-06-25 devnull _xdirtyxdata(Memimage *m, Rectangle r)
96 c66b5250 2006-06-25 devnull {
97 c66b5250 2006-06-25 devnull Xmem *xm;
98 c66b5250 2006-06-25 devnull
99 c66b5250 2006-06-25 devnull xm = m->X;
100 c66b5250 2006-06-25 devnull if(xm == nil)
101 c66b5250 2006-06-25 devnull return;
102 c66b5250 2006-06-25 devnull
103 c66b5250 2006-06-25 devnull xm->dirty = 1;
104 c66b5250 2006-06-25 devnull addrect(&xm->dirtyr, r);
105 c66b5250 2006-06-25 devnull }
106 c66b5250 2006-06-25 devnull
107 c66b5250 2006-06-25 devnull
108 c66b5250 2006-06-25 devnull