mirror of
https://github.com/transmission/transmission
synced 2024-12-24 08:43:27 +00:00
Optimized stringFittingInWidth
This commit is contained in:
parent
544cc37263
commit
9545453d48
1 changed files with 44 additions and 7 deletions
|
@ -63,13 +63,50 @@
|
||||||
- (NSString *) stringFittingInWidth: (float) width
|
- (NSString *) stringFittingInWidth: (float) width
|
||||||
withAttributes: (NSDictionary *) attributes
|
withAttributes: (NSDictionary *) attributes
|
||||||
{
|
{
|
||||||
NSString * newString = self;
|
float w;
|
||||||
|
int i;
|
||||||
unsigned i;
|
NSString * newString;
|
||||||
for (i = [self length]; [newString sizeWithAttributes: attributes].width > width; i--)
|
|
||||||
newString = [[self substringToIndex: i] stringByAppendingString: NS_ELLIPSIS];
|
w = [self sizeWithAttributes: attributes].width;
|
||||||
|
if( w <= width )
|
||||||
return newString;
|
/* The whole string fits */
|
||||||
|
return self;
|
||||||
|
|
||||||
|
/* Approximate how many characters we'll need to drop... */
|
||||||
|
i = [self length] * width / w - 1;
|
||||||
|
|
||||||
|
/* ... then refine it */
|
||||||
|
newString = [[self substringToIndex: i]
|
||||||
|
stringByAppendingString: NS_ELLIPSIS];
|
||||||
|
w = [newString sizeWithAttributes: attributes].width;
|
||||||
|
|
||||||
|
if( w < width )
|
||||||
|
{
|
||||||
|
NSString * bakString;
|
||||||
|
for( ;; )
|
||||||
|
{
|
||||||
|
bakString = newString;
|
||||||
|
newString = [[self substringToIndex: ++i]
|
||||||
|
stringByAppendingString: NS_ELLIPSIS];
|
||||||
|
if( [newString sizeWithAttributes: attributes].width > width )
|
||||||
|
return bakString;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if( w > width )
|
||||||
|
{
|
||||||
|
for( ;; )
|
||||||
|
{
|
||||||
|
newString = [[self substringToIndex: --i]
|
||||||
|
stringByAppendingString: NS_ELLIPSIS];
|
||||||
|
if( [newString sizeWithAttributes: attributes].width <= width )
|
||||||
|
return newString;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return newString;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
Loading…
Reference in a new issue