Blob


1 #include "x11-inc.h"
3 #include <u.h>
4 #include <libc.h>
5 #include <draw.h>
6 #include <memdraw.h>
7 #include "x11-memdraw.h"
9 void
10 memfillcolor(Memimage *m, u32int val)
11 {
12 _memfillcolor(m, val);
13 if(m->X == nil)
14 return;
15 if((val & 0xFF) == 0xFF) /* full alpha */
16 xfillcolor(m, m->r, _rgbatoimg(m, val));
17 else
18 xputxdata(m, m->r);
19 }
21 void
22 xfillcolor(Memimage *m, Rectangle r, u32int v)
23 {
24 Point p;
25 Xmem *xm;
26 XGC gc;
28 xm = m->X;
29 assert(xm != nil);
31 /*
32 * Set up fill context appropriately.
33 */
34 if(m->chan == GREY1){
35 gc = _x.gcfill0;
36 if(_x.gcfill0color != v){
37 XSetForeground(_x.display, gc, v);
38 _x.gcfill0color = v;
39 }
40 }else{
41 if(m->chan == CMAP8 && _x.usetable)
42 v = _x.tox11[v];
43 gc = _x.gcfill;
44 if(_x.gcfillcolor != v){
45 XSetForeground(_x.display, gc, v);
46 _x.gcfillcolor = v;
47 }
48 }
50 /*
51 * XFillRectangle takes coordinates relative to image rectangle.
52 */
53 p = subpt(r.min, m->r.min);
54 XFillRectangle(_x.display, xm->pixmap, gc, p.x, p.y, Dx(r), Dy(r));
55 }