diff options
author | rsc <devnull@localhost> | 2006-06-25 19:18:39 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2006-06-25 19:18:39 +0000 |
commit | c66b52501b630f6c0cdee1ed6cf81ad153e1183f (patch) | |
tree | ec935772fd77c3aa2337598c25a6c71ba84a9275 /src/cmd/devdraw/x11-fill.c | |
parent | f97f53744067400bec4dbd7aae5eafde54e99b7f (diff) | |
download | plan9port-c66b52501b630f6c0cdee1ed6cf81ad153e1183f.tar.gz plan9port-c66b52501b630f6c0cdee1ed6cf81ad153e1183f.tar.bz2 plan9port-c66b52501b630f6c0cdee1ed6cf81ad153e1183f.zip |
new draw server
Diffstat (limited to 'src/cmd/devdraw/x11-fill.c')
-rw-r--r-- | src/cmd/devdraw/x11-fill.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/cmd/devdraw/x11-fill.c b/src/cmd/devdraw/x11-fill.c new file mode 100644 index 00000000..fc43a684 --- /dev/null +++ b/src/cmd/devdraw/x11-fill.c @@ -0,0 +1,56 @@ +#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)); +} + + |