[BUG?] - [NSLayoutManager
usedRectForTextContainer:] returns incorrect value



Problem:
--------

I'm seeing incorrect results when I try to get the height of a string with a particular font and maximum width.


Context:
--------

I'm running the code below. I have a single NSWindow with a checkbox and a button. In the awakeFromNib method of the main controller, I change the attribute of the checkbox string. In the compute: method, I compute the height requested to display a string for a specific font and maximum width.

If I run this code as is, I get 17.0 as the required height. That's incorrect.

If I comment the awakeFromNib code, I get 34.0f as the required height. That's correct.


Questions:
---------

Is it a bug in NSLayoutManager?

If so, is there a workaround?

If it's not, what am I missing?

-----8<---------8<--------8<--------8<--------8<--------8<--------8<---- ----

#import "MainController.h"


@implementation MainController

- (void) awakeFromNib
{
NSAttributedString * tAttributedString;

tAttributedString=[[NSAttributedString alloc] initWithString: [IBcheckBox_ title] attributes:[NSDictionary dictionaryWithObjectsAndKeys:[IBcheckBox_ font],NSFontAttributeName,
[NSNumber numberWithInt:NSUnderlineStyleSingle],NSStrikethroughStyleAttributeName, nil]];

if (tAttributedString!=nil)
{
[IBcheckBox_ setAttributedTitle:tAttributedString];

[tAttributedString release];
}
}

- (IBAction) compute:(id) sender
{
float tHeight=0;
NSString * tString=@"It's a long list title, don't you think?";
float tMaxWidth=134.0f;
NSFont * tFont;

tFont=[NSFont systemFontOfSize:13.0f];

if (tString!=nil)
{
NSTextStorage * tTextStorage;

tTextStorage=[[NSTextStorage alloc] initWithString:tString];

if (tTextStorage!=nil)
{
NSTextContainer * tTextContainer;

tTextContainer = [[NSTextContainer alloc] initWithContainerSize: NSMakeSize(tMaxWidth, FLT_MAX)];

if (tTextContainer!=nil)
{
NSLayoutManager * tLayoutManager;

tLayoutManager = [[NSLayoutManager alloc] init];

if (tLayoutManager!=nil)
{
[tLayoutManager setTypesetterBehavior:NSTypesetterBehavior_10_2_WithCompatibility];

[tLayoutManager
addTextContainer:tTextContainer];

[tTextStorage
addLayoutManager:tLayoutManager];

[tTextStorage addAttribute:NSFontAttributeName value:tFont range:NSMakeRange(0, [tTextStorage length])];

[tTextContainer
setLineFragmentPadding:0.0f];

[tLayoutManager
glyphRangeForTextContainer:tTextContainer];

tHeight=NSHeight([tLayoutManager usedRectForTextContainer:tTextContainer]);

[tLayoutManager release];
}

[tTextContainer release];
}

[tTextStorage release];
}
}

NSLog(@"%@: %f %f %@",tString,tHeight,tMaxWidth,tFont);
}

@end
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@xxxxxxxxxxxxxxx)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/maillists%40codeha.us

This email sent to maillists@xxxxxxxxx



Privacy