• 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: NSLayoutManager and best override point for temporary attributes
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSLayoutManager and best override point for temporary attributes


  • Subject: Re: NSLayoutManager and best override point for temporary attributes
  • From: Keith Blount <email@hidden>
  • Date: Fri, 2 Oct 2009 07:04:02 -0700 (PDT)

Hi,

Looking at this again, would NSLayoutManager's

-textStorage:edited:range:changeInLength:invalidatedRange:

method be a good candidate for overriding to add temporary attributes? The text storage calls this whenever it's edited and provides it with the new range of characters. So it seems that I could add any temporary attributes to the range that gets passed in here, checking that changeInLength > 0.

Or, what if in the -addAttribute:..., -setAttributes:... and removeAttribute:... methods of my NSTextStorage, I called through to all of the text storage's layout managers to ask them to add the temporary attribute if necessary, after -edited:range:changeInLength: gets called?

Many thanks again!

All the best,
Keith

--- On Thu, 10/1/09, Martin Wierschin <email@hidden> wrote:

> From: Martin Wierschin <email@hidden>
> Subject: Re: NSLayoutManager and best override point for temporary attributes
> To: "Keith Blount" <email@hidden>
> Cc: email@hidden
> Date: Thursday, October 1, 2009, 1:50 AM
> Hi Keith,
>
> > I have certain custom text attributes that are used in
> my NSTextStorage to which I would like to add temporary
> attributes via the NSLayoutManager.
>
> What version of OSX are you testing under? Under Leopard
> there's a bug in -[NSLayoutManager
> temporaryAttribute:atCharacterIndex:longestEffectiveRange:inRange:]
> that calculates effective ranges that are too short. For
> specific test cases this caused big inefficiencies in the
> text system. I believe this bug is fixed in Snow Leopard.
>
> > more recently I have taken to overriding
> NSLayoutManager's
> -temporaryAttributesAtCharacterIndex:effectiveRange:
>
> If this is too slow, then I'd look to using some kind of
> cache for your calculations. But really, NSLayoutManager's
> temporary attributes are already a cache; one likely to be
> specifically designed for high performance index/run access.
> I think your original idea of setting temporary attributes
> whenever text changes would be the most efficient.
>
> Perhaps you're recalculating too much, too often? I don't
> know the access patterns for temporary attributes, but I
> would guess they are only queried when associated text is
> displayed on screen. If that's the case, you could fix them
> up lazily, eg: whenever text changes just note down that the
> attributes are dirty in that range. Your temporary attribute
> methods in your NSLayoutManager subclass can then ensure
> that temporary attributes are not dirty before they are
> returned.
>
> If none of that is efficient enough, you could rig up a
> NSTextStorage subclass that has two sets of attributes: one
> set for private use and another derived set which only the
> layout system sees.
>
> Hopefully some of that helps,
>
> ~Martin
>
>



_______________________________________________

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: NSLayoutManager and best override point for temporary attributes
      • From: Aki Inoue <email@hidden>
  • Prev by Date: Re: reading (parsing) CSV (or Excel) data
  • Next by Date: Re: Core-data binding to all entities
  • Previous by thread: Re: NSLayoutManager and best override point for temporary attributes
  • Next by thread: Re: NSLayoutManager and best override point for temporary attributes
  • Index(es):
    • Date
    • Thread