diff options
| author | Anselm R.Garbe <arg@10ksloc.org> | 2006-08-14 08:52:15 +0200 | 
|---|---|---|
| committer | Anselm R.Garbe <arg@10ksloc.org> | 2006-08-14 08:52:15 +0200 | 
| commit | 4d67199a4bb68e5377d2fece62a83fde66c92861 (patch) | |
| tree | 02b6d2ee568e402a19dc5e2bcba74acb2cc36503 | |
| parent | 95766d6241a401b3665ac1ad528b90c55e7b6810 (diff) | |
fixed string cutting in draw.c
| -rw-r--r-- | draw.c | 12 | 
1 files changed, 10 insertions, 2 deletions
| @@ -26,7 +26,7 @@ drawtext(const char *text, Bool invert)  {  	int x, y, w, h;  	static char buf[256]; -	unsigned int len; +	unsigned int len, olen;  	XGCValues gcv;  	XPoint points[5];  	XRectangle r = { dc.x, dc.y, dc.w, dc.h }; @@ -51,7 +51,7 @@ drawtext(const char *text, Bool invert)  		return;  	w = 0; -	len = strlen(text); +	olen = len = strlen(text);  	if(len >= sizeof(buf))  		len = sizeof(buf) - 1;  	memcpy(buf, text, len); @@ -64,6 +64,14 @@ drawtext(const char *text, Bool invert)  	/* shorten text if necessary */  	while(len && (w = textnw(buf, len)) > dc.w - h)  		buf[--len] = 0; +	if(len < olen) { +		if(len > 3) +			memcpy(buf + len - 4, "...\0", 4); +		else if(len > 2) +			memcpy(buf + len - 3, "..\0", 3); +		else if(len > 1) +			memcpy(buf + len - 2, ".\0", 2); +	}  	if(w > dc.w)  		return; /* too long */ | 
