draw.c
changeset 350 b10852dbbffe
parent 345 977585eb2d35
child 351 d822b5fbe11e
equal deleted inserted replaced
349:2bc2746a52c3 350:b10852dbbffe
    20 	}
    20 	}
    21 	return XTextWidth(dc.font.xfont, text, len);
    21 	return XTextWidth(dc.font.xfont, text, len);
    22 }
    22 }
    23 
    23 
    24 static void
    24 static void
    25 drawtext(const char *text, Bool invert, Bool highlight)
    25 drawtext(const char *text, unsigned int colidx, Bool highlight)
    26 {
    26 {
    27 	int x, y, w, h;
    27 	int x, y, w, h;
    28 	static char buf[256];
    28 	static char buf[256];
    29 	unsigned int len, olen;
    29 	unsigned int len, olen;
    30 	XGCValues gcv;
       
    31 	XPoint points[5];
    30 	XPoint points[5];
    32 	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
    31 	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
    33 
    32 
    34 	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
    33 	XSetForeground(dpy, dc.gc, dc.bg[colidx]);
    35 	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
    34 	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
    36 	points[0].x = dc.x;
    35 	points[0].x = dc.x;
    37 	points[0].y = dc.y;
    36 	points[0].y = dc.y;
    38 	points[1].x = dc.w - 1;
    37 	points[1].x = dc.w - 1;
    39 	points[1].y = 0;
    38 	points[1].y = 0;
    41 	points[2].y = dc.h - 1;
    40 	points[2].y = dc.h - 1;
    42 	points[3].x = -(dc.w - 1);
    41 	points[3].x = -(dc.w - 1);
    43 	points[3].y = 0;
    42 	points[3].y = 0;
    44 	points[4].x = 0;
    43 	points[4].x = 0;
    45 	points[4].y = -(dc.h - 1);
    44 	points[4].y = -(dc.h - 1);
    46 	XSetForeground(dpy, dc.gc, dc.border);
    45 	XSetForeground(dpy, dc.gc, dc.fg[colidx]);
    47 	XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
    46 	XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
    48 
    47 
    49 	if(!text)
    48 	if(!text)
    50 		return;
    49 		return;
    51 
    50 
    72 			buf[len - 3] = '.';
    71 			buf[len - 3] = '.';
    73 	}
    72 	}
    74 
    73 
    75 	if(w > dc.w)
    74 	if(w > dc.w)
    76 		return; /* too long */
    75 		return; /* too long */
    77 	gcv.foreground = invert ? dc.bg : dc.fg;
    76 	if(dc.font.set)
    78 	gcv.background = invert ? dc.fg : dc.bg;
       
    79 	if(dc.font.set) {
       
    80 		XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv);
       
    81 		XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
    77 		XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
    82 	}
       
    83 	else {
    78 	else {
    84 		gcv.font = dc.font.xfont->fid;
    79 		XSetFont(dpy, dc.gc, dc.font.xfont->fid);
    85 		XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv);
       
    86 		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
    80 		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
    87 	}
    81 	}
    88 	if(highlight) {
    82 	if(highlight) {
    89 		points[0].x = dc.x + 1;
    83 		points[0].x = dc.x + 1;
    90 		points[0].y = dc.y + 1;
    84 		points[0].y = dc.y + 1;
   155 	Bool istile = arrange == dotile;
   149 	Bool istile = arrange == dotile;
   156 
   150 
   157 	if(c == sel && issel) {
   151 	if(c == sel && issel) {
   158 		drawstatus();
   152 		drawstatus();
   159 		XUnmapWindow(dpy, c->twin);
   153 		XUnmapWindow(dpy, c->twin);
   160 		XSetWindowBorder(dpy, c->win, dc.fg);
   154 		XSetWindowBorder(dpy, c->win, dc.fg[1]);
   161 		return;
   155 		return;
   162 	}
   156 	}
   163 
   157 
   164 	XSetWindowBorder(dpy, c->win, dc.bg);
   158 	XSetWindowBorder(dpy, c->win, dc.bg[0]);
   165 	XMapWindow(dpy, c->twin);
   159 	XMapWindow(dpy, c->twin);
   166 	dc.x = dc.y = 0;
   160 	dc.x = dc.y = 0;
   167 	dc.w = c->tw;
   161 	dc.w = c->tw;
   168 	drawtext(c->name, !istile, False);
   162 	drawtext(c->name, !istile, False);
   169 	XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0);
   163 	XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0);