draw.c
changeset 218 c674a0baac63
parent 208 e4bfe46c7910
child 235 60e73ebaab27
equal deleted inserted replaced
217:7b63c375d28c 218:c674a0baac63
    40 	}
    40 	}
    41 	return XTextWidth(dc.font.xfont, text, len);
    41 	return XTextWidth(dc.font.xfont, text, len);
    42 }
    42 }
    43 
    43 
    44 static void
    44 static void
    45 drawtext(const char *text, Bool invert, Bool border)
    45 drawtext(const char *text, Bool invert)
    46 {
    46 {
    47 	int x, y, w, h;
    47 	int x, y, w, h;
    48 	static char buf[256];
    48 	static char buf[256];
    49 	unsigned int len;
    49 	unsigned int len;
    50 	XGCValues gcv;
    50 	XGCValues gcv;
    51 	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
    51 	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
    52 
    52 
    53 	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
    53 	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
    54 	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
    54 	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
    55 
    55 	drawborder();
    56 	w = 0;
       
    57 	if(border)
       
    58 		drawborder();
       
    59 
    56 
    60 	if(!text)
    57 	if(!text)
    61 		return;
    58 		return;
    62 
    59 
       
    60 	w = 0;
    63 	len = strlen(text);
    61 	len = strlen(text);
    64 	if(len >= sizeof(buf))
    62 	if(len >= sizeof(buf))
    65 		len = sizeof(buf) - 1;
    63 		len = sizeof(buf) - 1;
    66 	memcpy(buf, text, len);
    64 	memcpy(buf, text, len);
    67 	buf[len] = 0;
    65 	buf[len] = 0;
   109 	int i, x;
   107 	int i, x;
   110 	Bool istile = arrange == dotile;
   108 	Bool istile = arrange == dotile;
   111 
   109 
   112 	dc.x = dc.y = 0;
   110 	dc.x = dc.y = 0;
   113 	dc.w = bw;
   111 	dc.w = bw;
   114 	drawtext(NULL, !istile, False);
   112 	drawtext(NULL, !istile);
   115 
   113 
   116 	dc.w = 0;
   114 	dc.w = 0;
   117 	for(i = 0; i < ntags; i++) {
   115 	for(i = 0; i < ntags; i++) {
   118 		dc.x += dc.w;
   116 		dc.x += dc.w;
   119 		dc.w = textw(tags[i]);
   117 		dc.w = textw(tags[i]);
   120 		if(istile)
   118 		if(istile)
   121 			drawtext(tags[i], (i == tsel), True);
   119 			drawtext(tags[i], (i == tsel));
   122 		else
   120 		else
   123 			drawtext(tags[i], (i != tsel), True);
   121 			drawtext(tags[i], (i != tsel));
   124 	}
   122 	}
   125 	x = dc.x + dc.w;
   123 	x = dc.x + dc.w;
   126 	dc.w = textw(stext);
   124 	dc.w = textw(stext);
   127 	dc.x = bx + bw - dc.w;
   125 	dc.x = bx + bw - dc.w;
   128 	drawtext(stext, !istile, True);
   126 	drawtext(stext, !istile);
   129 	if(sel && ((dc.w = dc.x - x) >= bh)) {
   127 	if(sel && ((dc.w = dc.x - x) >= bh)) {
   130 		dc.x = x;
   128 		dc.x = x;
   131 		drawtext(sel->name, istile, True);
   129 		drawtext(sel->name, istile);
   132 	}
   130 	}
   133 	XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0);
   131 	XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0);
   134 	XSync(dpy, False);
   132 	XSync(dpy, False);
   135 }
   133 }
   136 
   134 
   155 	dc.w = 0;
   153 	dc.w = 0;
   156 	for(i = 0; i < ntags; i++) {
   154 	for(i = 0; i < ntags; i++) {
   157 		if(c->tags[i]) {
   155 		if(c->tags[i]) {
   158 			dc.x += dc.w;
   156 			dc.x += dc.w;
   159 			dc.w = textw(tags[i]);
   157 			dc.w = textw(tags[i]);
   160 			drawtext(tags[i], !istile, True);
   158 			drawtext(tags[i], !istile);
   161 		}
   159 		}
   162 	}
   160 	}
   163 	dc.x += dc.w;
   161 	dc.x += dc.w;
   164 	dc.w = textw(c->name);
   162 	dc.w = textw(c->name);
   165 	drawtext(c->name, !istile, True);
   163 	drawtext(c->name, !istile);
   166 	XCopyArea(dpy, dc.drawable, c->title, dc.gc, 0, 0, c->tw, c->th, 0, 0);
   164 	XCopyArea(dpy, dc.drawable, c->title, dc.gc, 0, 0, c->tw, c->th, 0, 0);
   167 	XSync(dpy, False);
   165 	XSync(dpy, False);
   168 }
   166 }
   169 
   167 
   170 unsigned long
   168 unsigned long