• 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: Layout manager's -rectArrayForCharacterRange:::: returns zero rectangles??
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Layout manager's -rectArrayForCharacterRange:::: returns zero rectangles??


  • Subject: Re: Layout manager's -rectArrayForCharacterRange:::: returns zero rectangles??
  • From: John Stiles <email@hidden>
  • Date: Mon, 25 Feb 2008 11:23:22 -0800

Hmm. I tried another approach and it's still no good. This produces NSZeroRect:

       NSLayoutManager* layout = [myTextView layoutManager];

NSRange glyphRange = [layout glyphRangeForCharacterRange:selection
actualCharacterRange:NULL];
rect = [layout boundingRectForGlyphRange:glyphRange
inTextContainer:[myTextView textContainer]];


Interestingly, this only happens in the -textViewDidChangeSelection: delegate. If I defer the call until after -textViewDidChangeSelection: completes, then I can call the exact same function with the exact same inputs, and get a valid result.

If no one else has any ideas, maybe that's what I'll end up doing…


John Stiles wrote:
I'm trying to write some code which figures out where the insertion point is located, every time the selection changes. (Imagine a text editor which has a "current line number" indicator at the bottom of the screen that stays updated as the user types.)

To do this, in my text view's delegate, I have implemented the delegate method -textViewDidChangeSelection:. From there I call -selectedRange and then ask the layout manager for the rectangles via:

NSRectArray rects = [[myTextView layoutManager] rectArrayForCharacterRange:selection
withinSelectedCharacterRange:NSMakeRange(NSNotFound, 0)
inTextContainer:[myTextView textContainer]
rectCount:&rectCount];


Normally, this works perfectly.

However, if I go to the very end of the document and start making insertions or deletions, I don't get a rectangle back—"rectCount" is zero. I've checked [[[TextView() textStorage] string] length] and compared it against the selection, so I'm pretty confident that I'm not querying past the end of the text, which in the past is the only time I've seen behavior like this up until now.

Any ideas as to what's wrong? This seems pretty straightforward to me so I'm not sure what I'm missing.
_______________________________________________


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
_______________________________________________

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: Layout manager's -rectArrayForCharacterRange:::: returns zero rectangles??
      • From: John Stiles <email@hidden>
References: 
 >Layout manager's -rectArrayForCharacterRange:::: returns zero rectangles?? (From: John Stiles <email@hidden>)

  • Prev by Date: Layout manager's -rectArrayForCharacterRange:::: returns zero rectangles??
  • Next by Date: Finding a relative date
  • Previous by thread: Layout manager's -rectArrayForCharacterRange:::: returns zero rectangles??
  • Next by thread: Re: Layout manager's -rectArrayForCharacterRange:::: returns zero rectangles??
  • Index(es):
    • Date
    • Thread