• 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: Pixel-perfect migration from ATSUI to Core Text
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Pixel-perfect migration from ATSUI to Core Text


  • Subject: Re: Pixel-perfect migration from ATSUI to Core Text
  • From: Andreas Falkenhahn <email@hidden>
  • Date: Tue, 30 Aug 2016 15:47:45 +0200

On 29.08.2016 at 17:46 Ken Thomases wrote:

> On Aug 29, 2016, at 9:55 AM, Andreas Falkenhahn <email@hidden> wrote:

>> I'm migrating some code from ATSUI to Core Text. It's pretty raw stuff, i.e. it does
>> all the layouting itself and only uses ATSUI/Core Text to draw single lines of text to
>> raw pixel buffers and obtain measurements.

>> The raw pixel data emitted by ATSUDrawText() and CTLineDraw() seems to match exactly.
>> Also, the measurements returned by ATSUI/Core Text seem to match most of the time. Thus,
>> it's usually the case that the pixels in text generated using ATSUI match exactly the
>> text pixels generated by Core Text.

>> That's nice to see and I didn't expect that but it activated a perfectionist tendency
>> in me so that I ran some hardcore tests with lots of different texts printed in different
>> sizes and layouts to see if I could find a deviation between ATSUI and Core Text. And I
>> did ;) It happens only in very rare cases but sometimes the cursor advance returned by
>> ATSUI is a pixel off from the cursor advance returned by Core Text. But only very
>> seldomly. However, in complex layouts this can then accumulate and lead to an entirely
>> different layout if wordwrapping is involved.

> First, this has nothing to do with Cocoa and so isn't appropriate for Cocoa-Dev.

Oops, sorry, I didn't know that there was a separate mailing list for Core Text. I'll
ask again over there if we don't manage to solve it here.

> That said, when drawing strings, there are the functions
> CGContextSetShouldSubpixelPositionFonts() and
> CGContextSetAllowsFontSubpixelPositioning().  Those can be used to
> turn off sub-pixel positioning of glyphs.  It may be that ATSUI
> wasn't capable of that and so turning it off gets you the same positioning as ATSUI.

> There doesn't seem to be a direct way to ask Core Text for the
> measurements corresponding to that drawing mode.  So, you may need
> to ask your CTLine for its CTRuns and then ask the CTRun for the
> individual glyph advances.

Hmm, I don't understand. The only CTRun APIs that take a CGContextRef are CTRunGetImageBounds()
and CTRunDraw(). I'd have to use CTRunGetAdvances(), though, but this function doesn't accept
a CGContextRef so I don't see how I should implement your suggestions...

--
Best regards,
 Andreas Falkenhahn                            mailto:email@hidden

_______________________________________________

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: Pixel-perfect migration from ATSUI to Core Text
      • From: Ken Thomases <email@hidden>
References: 
 >Re: Pixel-perfect migration from ATSUI to Core Text (From: Ken Thomases <email@hidden>)

  • Prev by Date: Re: Mysterious crash with NSTableView
  • Next by Date: Drawing issue with translucent borderless NSWindow, initial content half stays
  • Previous by thread: Re: Pixel-perfect migration from ATSUI to Core Text
  • Next by thread: Re: Pixel-perfect migration from ATSUI to Core Text
  • Index(es):
    • Date
    • Thread