• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag
 

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
[BUG?] - [NSLayoutManager usedRectForTextContainer:] returns incorrect value
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • Subject: [BUG?] - [NSLayoutManager usedRectForTextContainer:] returns incorrect value
  • From: Iceberg-Dev <email@hidden>
  • Date: Sun, 29 Mar 2009 22:57:36 +0200

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 (email@hidden)

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:
This email sent to email@hidden


  • Follow-Ups:
    • Re: [BUG?] - [NSLayoutManager usedRectForTextContainer:] returns incorrect value
      • From: Benjamin Stiglitz <email@hidden>
  • Prev by Date: Re: should release or not? (basic memory management question)
  • Next by Date: Re: Spotlight and Leopard
  • Previous by thread: Re: should release or not? (basic memory management question)
  • Next by thread: Re: [BUG?] - [NSLayoutManager usedRectForTextContainer:] returns incorrect value
  • Index(es):
    • Date
    • Thread