On Sep 6, 2009, at 17:11, Stephen Blinkhorn wrote:

I would have thought that the code below will center text horizontally and vertically within a NSRect. Sometimes it does but it depends on the font I am using. So the below may work for Verdana but if I change to Helvetica then the vertical centering is off.

Is there a better way to do this?

Thanks,
Stephen


displayString = @"Test"
viewRect = [self bounds];

attributes = [[NSMutableDictionary alloc] init];
[attributes setObject:textFont forKey:NSFontAttributeName];
[attributes setObject:textColor forKey:NSForegroundColorAttributeName];

NSSize titleSize = [displayString sizeWithAttributes:attributes];
int x_pos = (viewRect.size.width - titleSize.width) / 2;
int y_pos = (viewRect.size.height - titleSize.height);
NSPoint p = {x_pos, y_pos};
[displayString drawAtPoint:p withAttributes:attributes];

There are several things wrong with this:

-- You're not accounting for the bounds origin, so it only works if the origin happens to be (0, 0).

-- Presumably you meant "/ 2" on the y_pos calculation.

-- The documentation for "sizeWithAttributes:" says that it returns the size of the "bounding box". That could mean any of several different metrics that could result in the string being drawn a few pixels off from where you'd expect (especially in the Y direction, but also possibly in the X direction).

-- You calculate where you want the vertical *center* of this bounding box to be, but 'drawAtPoint:' puts the baseline at the specified point. The baseline is actually going to be more like 2/3 of the way down the bounding box in general.

I suspect the last one of these is the main reason for your vertical centering being off. Try using 'drawInRect:' instead, with a suitably calculated destination rect.


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to