mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-30 12:50:40 +00:00
* NSAttributedString.m and NSAttributedString.h remove.
* NSStringDrawing.m and NSStringDrawing.h add NSAttributedString interface and implementation. Implement NSAttributedString's size method and optimize tab width calculation. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@3352 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
2bec406f7f
commit
b77483cabe
13 changed files with 87 additions and 187 deletions
|
@ -1,7 +1,8 @@
|
|||
/*
|
||||
NSStringDrawing.m
|
||||
|
||||
Category which adds measure capabilities to NSString.
|
||||
Categories which add measure capabilities to NSAttributedString
|
||||
and NSString.
|
||||
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
|
||||
|
@ -28,37 +29,72 @@
|
|||
|
||||
#include <AppKit/NSStringDrawing.h>
|
||||
#include <AppKit/AppKit.h>
|
||||
// by default tabs are measured as one
|
||||
#define TABWIDTH 3 // char so this value is set to one
|
||||
// minus the default tab width of 4
|
||||
|
||||
|
||||
@implementation NSString(NSStringDrawing)
|
||||
@implementation NSString (NSStringDrawing)
|
||||
|
||||
- (NSSize)sizeWithAttributes:(NSDictionary *)attrs
|
||||
{
|
||||
NSFont *font;
|
||||
const char *str = [self cString];
|
||||
int i = 0, j = 4;
|
||||
float tabSize;
|
||||
int i = 0, j = TABWIDTH;
|
||||
static float tabSize;
|
||||
static float pointSize;
|
||||
static NSFont *lastFont = nil;
|
||||
|
||||
while(*str++ != '\0') // count the tabs
|
||||
{
|
||||
if(*str == '\t')
|
||||
{
|
||||
i += j;
|
||||
j = 4;
|
||||
}
|
||||
else
|
||||
j = j == 0 ? 4 : j--;
|
||||
};
|
||||
while(*str != '\0') // calc the additional size
|
||||
{ // to be added for tabs.
|
||||
if(*str++ == '\t')
|
||||
{ // j is initialized to the
|
||||
i += j; // max number of spaces
|
||||
j = TABWIDTH; // needed per tab. it then
|
||||
} // varies in order to align
|
||||
else // tabs to even multiples
|
||||
j = j-- > 0 ? j : TABWIDTH; // of TABWIDTH + 1.
|
||||
};
|
||||
// if font is not
|
||||
if(!(font = [attrs objectForKey:NSFontAttributeName])) // specified, use
|
||||
font = [NSFont userFontOfSize:12]; // the default
|
||||
|
||||
fprintf(stderr,"string %s width: %f\n", [self cString], [font widthOfString:self]);
|
||||
|
||||
// tabSize = 4 * i * [font widthOfString:@" "];
|
||||
tabSize = (float)i * [font widthOfString:@" "];
|
||||
if(font != lastFont) // update font info
|
||||
{ // if font changes
|
||||
tabSize = (float)i * [font widthOfString:@"\t"];
|
||||
lastFont = font;
|
||||
pointSize = [font pointSize];
|
||||
}
|
||||
|
||||
return NSMakeSize(([font widthOfString:self] + tabSize), [font pointSize]);
|
||||
return NSMakeSize(([font widthOfString:self] + tabSize), pointSize);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation NSAttributedString (NSStringDrawing)
|
||||
|
||||
- (NSSize)size // this method is
|
||||
{ // untested FIX ME
|
||||
NSFont *font;
|
||||
unsigned int length;
|
||||
NSRange effectiveRange;
|
||||
NSString *subString;
|
||||
float pointSize;
|
||||
float sumOfCharacterRange = 0;
|
||||
|
||||
length = [self length];
|
||||
effectiveRange = NSMakeRange(0, 0);
|
||||
|
||||
while (NSMaxRange(effectiveRange) < length)
|
||||
{
|
||||
font = (NSFont*)[self attribute:NSFontAttributeName
|
||||
atIndex:NSMaxRange(effectiveRange)
|
||||
effectiveRange:&effectiveRange];
|
||||
subString = [self substringFromRange:effectiveRange];
|
||||
sumOfCharacterRange += [font widthOfString:subString];
|
||||
pointSize = MAX([font pointSize], pointSize);
|
||||
}
|
||||
|
||||
return NSMakeSize(sumOfCharacterRange, pointSize);
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue