On Nov 5, 2016, at 21:44 , Gerriet M. Denkmann <[email protected]> wrote:
> 
>       NSRect boundingRect = tableFont.boundingRectForFont; 
>       self.outlineView.rowHeight = ceil( boundingRect.size.height )

This is probably a poor choice, for reasons that probably will seem illogical:

1. The bounding box height supposedly reflects the actual glyphs of the font, 
and this may not be the intended (designed) inter-baseline distance for a 
multiline passage of text. (It’s for a multiline passage because that’s what 
the designer is supposed to design for.) It may not be intended because of 
outlier glyphs whose dimensions were never intended to affect line spacing.

2. In any case, the bounding box stored in the font might be a lie. It might be 
the bounding of a subset of the glyphs (to avoid including the outlier shapes), 
or it may have been flat-out adjusted for historical reasons. (It’s not clear 
whether Apple font technology reports the bounding box stored in the font, or 
tries to recalculate the bounding box exactly.)

3. The stored bounding box might be family-wide, rather than face-wide.

4. Even if the bounding box height is near-enough correct for the font design, 
it matters where the baseline is placed within the height. That in turn, 
depends on values stored in the font, and/or assumptions made by the software 
using it. (To be specific, where in the row height the table view decides to 
put the origin of the text field.)

5. It’s rather indeterminate what glyphs the bounding box should reflect. In 
particular, in digital typography using Unicode characters, a font as perceived 
by the user may be a composite of multiple actual fonts. For example, there’s 
likely code in the text system that provides a Euro glyph for every font that 
doesn’t have it. 

There is probably no perfect strategy that works for every font. However, for 
the kinds of design decisions that Apple made when it started doing typography 
properly (in the early 1990s, the days of the Font Wars between Apple and 
Microsoft), I recommend you use the following calculation to compute the line 
height of text:

        line height = font ascender + font descender + font leading

using the 3 values reported by the NSFont. (I can’t remember, the descender may 
be negative, in which case you’d invert the sign.) Depending on your goals, you 
might also add some margin above and below the line height (1 or 2 points top 
and bottom) to prevent your rows from looking cramped.

Alternatively, it is possible to use auto-layout to determine the height of the 
cell without caring specifically about the cell’s structure. (I mean a cell 
view, not a NSCell.) I’ve done this for dynamically sizing rows, but the same 
strategy could be used to find out the height once, at table view setup. You'd 
end up with whatever NSTextField would do, which is presumably acceptable 
regardless of font.

_______________________________________________

Cocoa-dev mailing list ([email protected])

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to