plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

x11-fill.c (992B)


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