Re: text highlighting with CALayer and NSTextVew
Re: text highlighting with CALayer and NSTextVew
- Subject: Re: text highlighting with CALayer and NSTextVew
- From: Graham Cox <email@hidden>
- Date: Thu, 23 Aug 2012 22:09:58 +1000
On 23/08/2012, at 9:16 PM, Koen van der Drift <email@hidden> wrote:
> Another update, I guess I love to talk to myself.
>
> I got the drawing part done as follows:
>
>
> CALayer *aLayer = [CALayer layer];
> NSRect r = [self.layoutManager boundingRectForGlyphRange: aRange inTextContainer: self.textContainer];
>
> aLayer.backgroundColor = CGColorCreateGenericRGB (0.2, 0.2, 0.2, 0.2); // obviously this will be changed to something nicer
> aLayer.frame = r;
> aLayer.cornerRadius = 6.0f;
>
> [self.layer addSublayer: aLayer];
>
>
> There are two problems:
>
> 1. the y-location of the layer that is drawn is wrong, I think it has to do with the coordinates being flipped
Text views generally use flipped coordinates (since most text systems render top-down). You may need to set the -geometryFlipped property of the CALayer to match.
> 2. when the range contains a line break, I get the rect for two whole lines, not just the glyphs.
You probably want to use [NSLayoutManager rectArrayForCharacterRange:....] instead, which gives you all of the rectangles necessary to perform a highlight, which can consist of numerous parts, considering a text highlight can extend over many lines, be disjoint, etc. Of course you can't just set a CALayer frame with this - it might be better to create a custom layer that can draw the necessary rectangles behind the text.
--Graham
_______________________________________________
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