|
|
@ -28,7 +28,7 @@ drawtext(const char *text, Bool invert, Bool border) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int x, y, w, h; |
|
|
|
int x, y, w, h; |
|
|
|
static char buf[256]; |
|
|
|
static char buf[256]; |
|
|
|
unsigned int len; |
|
|
|
unsigned int len, olen; |
|
|
|
XGCValues gcv; |
|
|
|
XGCValues gcv; |
|
|
|
XPoint points[5]; |
|
|
|
XPoint points[5]; |
|
|
|
XRectangle r = { dc.x, dc.y, dc.w, dc.h }; |
|
|
|
XRectangle r = { dc.x, dc.y, dc.w, dc.h }; |
|
|
@ -56,7 +56,7 @@ drawtext(const char *text, Bool invert, Bool border) |
|
|
|
if(!text) |
|
|
|
if(!text) |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
len = strlen(text); |
|
|
|
olen = len = strlen(text); |
|
|
|
if(len >= sizeof(buf)) |
|
|
|
if(len >= sizeof(buf)) |
|
|
|
len = sizeof(buf) - 1; |
|
|
|
len = sizeof(buf) - 1; |
|
|
|
memcpy(buf, text, len); |
|
|
|
memcpy(buf, text, len); |
|
|
@ -69,6 +69,14 @@ drawtext(const char *text, Bool invert, Bool border) |
|
|
|
/* shorten text if necessary */ |
|
|
|
/* shorten text if necessary */ |
|
|
|
while(len && (w = textnw(buf, len)) > dc.w - h) |
|
|
|
while(len && (w = textnw(buf, len)) > dc.w - h) |
|
|
|
buf[--len] = 0; |
|
|
|
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) |
|
|
|
if(w > dc.w) |
|
|
|
return; /* too long */ |
|
|
|
return; /* too long */ |
|
|
|