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 <mar...@nisus.com> wrote: > From: Martin Wierschin <mar...@nisus.com> > Subject: Re: NSLayoutManager and best override point for temporary attributes > To: "Keith Blount" <keithblo...@yahoo.com> > Cc: cocoa-dev@lists.apple.com > 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 (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