fixed string cutting
This commit is contained in:
		
							
								
								
									
										12
									
								
								draw.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								draw.c
									
									
									
									
									
								
							@@ -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 */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user