draw.c
changeset 269 bf6792e3e700
parent 262 d659a2dce2b5
child 273 ffc73b32084a
equal deleted inserted replaced
268:a47b3b0d7bf4 269:bf6792e3e700
    24 static void
    24 static void
    25 drawtext(const char *text, Bool invert)
    25 drawtext(const char *text, Bool invert)
    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;
    29 	unsigned int len, olen;
    30 	XGCValues gcv;
    30 	XGCValues gcv;
    31 	XPoint points[5];
    31 	XPoint points[5];
    32 	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
    32 	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
    33 
    33 
    34 	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
    34 	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
    49 
    49 
    50 	if(!text)
    50 	if(!text)
    51 		return;
    51 		return;
    52 
    52 
    53 	w = 0;
    53 	w = 0;
    54 	len = strlen(text);
    54 	olen = len = strlen(text);
    55 	if(len >= sizeof(buf))
    55 	if(len >= sizeof(buf))
    56 		len = sizeof(buf) - 1;
    56 		len = sizeof(buf) - 1;
    57 	memcpy(buf, text, len);
    57 	memcpy(buf, text, len);
    58 	buf[len] = 0;
    58 	buf[len] = 0;
    59 
    59 
    62 	x = dc.x + (h / 2);
    62 	x = dc.x + (h / 2);
    63 
    63 
    64 	/* shorten text if necessary */
    64 	/* shorten text if necessary */
    65 	while(len && (w = textnw(buf, len)) > dc.w - h)
    65 	while(len && (w = textnw(buf, len)) > dc.w - h)
    66 		buf[--len] = 0;
    66 		buf[--len] = 0;
       
    67 	if(len < olen) {
       
    68 		if(len > 3)
       
    69 			memcpy(buf + len - 4, "...\0", 4);
       
    70 		else if(len > 2)
       
    71 			memcpy(buf + len - 3, "..\0", 3);
       
    72 		else if(len > 1)
       
    73 			memcpy(buf + len - 2, ".\0", 2);
       
    74 	}
    67 
    75 
    68 	if(w > dc.w)
    76 	if(w > dc.w)
    69 		return; /* too long */
    77 		return; /* too long */
    70 
    78 
    71 	gcv.foreground = invert ? dc.bg : dc.fg;
    79 	gcv.foreground = invert ? dc.bg : dc.fg;