|  | #include <u.h> | 
|  | #include "x11-inc.h" | 
|  | #include <libc.h> | 
|  | #include <draw.h> | 
|  | #include <memdraw.h> | 
|  | #include "x11-memdraw.h" | 
|  |  | 
|  | void | 
|  | memfillcolor(Memimage *m, u32int val) | 
|  | { | 
|  | _memfillcolor(m, val); | 
|  | if(m->X == nil) | 
|  | return; | 
|  | if((val & 0xFF) == 0xFF)	/* full alpha */ | 
|  | _xfillcolor(m, m->r, _rgbatoimg(m, val)); | 
|  | else | 
|  | _xputxdata(m, m->r); | 
|  | } | 
|  |  | 
|  | void | 
|  | _xfillcolor(Memimage *m, Rectangle r, u32int v) | 
|  | { | 
|  | Point p; | 
|  | Xmem *xm; | 
|  | XGC gc; | 
|  |  | 
|  | xm = m->X; | 
|  | assert(xm != nil); | 
|  |  | 
|  | /* | 
|  | * Set up fill context appropriately. | 
|  | */ | 
|  | if(m->chan == GREY1){ | 
|  | gc = _x.gcfill0; | 
|  | if(_x.gcfill0color != v){ | 
|  | XSetForeground(_x.display, gc, v); | 
|  | _x.gcfill0color = v; | 
|  | } | 
|  | }else{ | 
|  | if(m->chan == CMAP8 && _x.usetable) | 
|  | v = _x.tox11[v]; | 
|  | gc = _x.gcfill; | 
|  | if(_x.gcfillcolor != v){ | 
|  | XSetForeground(_x.display, gc, v); | 
|  | _x.gcfillcolor = v; | 
|  | } | 
|  | } | 
|  |  | 
|  | /* | 
|  | * XFillRectangle takes coordinates relative to image rectangle. | 
|  | */ | 
|  | p = subpt(r.min, m->r.min); | 
|  | XFillRectangle(_x.display, xm->pixmap, gc, p.x, p.y, Dx(r), Dy(r)); | 
|  | } | 
|  |  | 
|  |  |