• 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
Re: Why do all these methods of measuring string metrics with font attribute fail?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Why do all these methods of measuring string metrics with font attribute fail?


  • Subject: Re: Why do all these methods of measuring string metrics with font attribute fail?
  • From: Uli Kusterer <email@hidden>
  • Date: Thu, 4 Sep 2008 10:40:46 +0200

On 04.09.2008, at 03:57, an0 wrote:
IMO, the size of a string with font attribute is an intrinsic property
determined only by the string and the font(and the layout of the
string on the view, but here let's fix the layout to one single line);
and the view used to render the attributed string should have a
reasonalby bigger size to hold the whole string. In other words, one
could have a good guess of the view size from the attributed string
size.


Well, this is programming, we try not to guess too much. It's much better design to ask the object that actually does all the drawing to tell you how much room it will take. Consider an NSTextFieldCell: It can have no borders, rounded ends (in which case the distance from the left and right edges to the actual text will be larger than that to the top and bottom, to accomodate the half-circles), rectangular border... If this measuring was done by string dimensions and a reasonable guess, it'd mean if you realize field X should really have rounded ends instead of straight ones, you'd have to change your measuring code everywhere you do your reasonable guess.

On the other hand, the NSTextFieldCell knows how it has to be configured, and it knows what algorithm to use for its current appearance and content. It has to, or it wouldn't be able to draw itself. Why duplicate this logic elsewhere? A cell is a lightweight object intended to encapsulate text drawing, selection and editing, and creating one and keeping it around means your drawings will be much faster, because state and previous results of measurements can be cached in the NSTextFieldCell for faster drawing.

That said, while Cocoa has a convenience method for drawing a string in a rect in NSStringDrawing.h, there's none for measuring it. You could roll your own according to this article:

	http://www.zathras.de/blog-cocoa-text-system-everywhere.htm

but for best performance you'd want to cache the three text system objects you created for this (the NSStringDrawing methods can't really do much cacheing, though I've heard they try their best given their lack of information), and that's what an NSTextFieldCell probably does anyway, so why bother? Just use the cell class for your string measuring and drawing.

Cheers,
-- Uli Kusterer
"The Witnesses of TeachText are everywhere..."
http://www.zathras.de





_______________________________________________

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: Why do all these methods of measuring string metrics with font attribute fail?
      • From: an0 <email@hidden>
References: 
 >Why do all these methods of measuring string metrics with font attribute fail? (From: an0 <email@hidden>)
 >Re: Why do all these methods of measuring string metrics with font attribute fail? (From: Douglas Davidson <email@hidden>)
 >Re: Why do all these methods of measuring string metrics with font attribute fail? (From: an0 <email@hidden>)

  • Prev by Date: Re: Selection in NSCollectionView
  • Next by Date: Re: What Size My Window?
  • Previous by thread: Re: Why do all these methods of measuring string metrics with font attribute fail?
  • Next by thread: Re: Why do all these methods of measuring string metrics with font attribute fail?
  • Index(es):
    • Date
    • Thread