• 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: Custom text via Core Text in a layer.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Custom text via Core Text in a layer.


  • Subject: Re: Custom text via Core Text in a layer.
  • From: Aki Inoue <email@hidden>
  • Date: Mon, 26 Nov 2007 10:04:16 -0800

John,

The code attached below is setting up sufficient environment for Cocoa drawing.

You should be able to just use NSStringDrawing methods like - [NSAttributedString drawWithRect:options:].

Aki

On 2007/11/19, at 14:29, John Clayton wrote:

Well,

I'm definately not writing my own text system. All I want to be able to do is stick some NSAttributedText into a bounded area, on a layer. Assuming CATextLayer isn't what I wanted, what would be the approach to adapting the code below to use the Cocoa based APi's to draw into that area? Is it actually easier?

<side track / background info / reality hiatus>
FYI: the original reason that I moved away from CATextLayer, was that I wanted to provide a 'duration' value for the layer - and doing that in conjunction with the way that I am rendering content (CARenderer) wasn't working.


So I decided that I needed more control. I've since then moved entirely away from touching the beginTime/duration properties of layers at all, and have changed my custom rendering component to use two newly created properties (projectBeginTime and projectDuration) that define exactly the same thing, but are not influenced indirectly by the Core Animation rendering engine (i.e. CACurrentMediaTime + background modifications to the presentation layer).

Its actually more involved that that - but I thought I'd provide a wee bit of a sense of the tangle I'm getting myself in :-)

Incidentally, I can (and am) using a CATextLayer derived instance for textual rendering in my project, which now works OK [so long as I don't mess with duration] - my question is driven more out of curiosity and learning desire.
</side track / background info / reality hiatus>


E.g. this is what I've got now (which draws not-quite-the-same as the standard CATextLayer). The only reason I decided to use core- text was because there were about a handful of lines in there to get my text rendered into a CGContextRef. If Cocoa has a better way of achieving the same thing (i.e. attributed strings, onto a CGContextRef, for use by a CALayer) - then I'm all ears.

// code begins...
- (void) drawInContext:(CGContextRef)context
{
// core-text, here we come
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:context flipped:NO]];


CGContextSetTextMatrix(context, CGAffineTransformIdentity);

CGMutablePathRef path = CGPathCreateMutable();
if(path)
{
CGPathAddRect(path, NULL, self.bounds);

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(
(CFAttributedStringRef)_string
);

// Create the frame and draw it into the graphics context
CTFrameRef frame = CTFramesetterCreateFrame(framesetter,
CFRangeMake(0, 0), path, NULL);

if(frame)
CTFrameDraw(frame, context);

if(framesetter)
CFRelease(framesetter);

if(frame)
CFRelease(frame);
}

if(path)
CFRelease(path);

[NSGraphicsContext restoreGraphicsState];
}
// code ends...


thanks for making it this far..

On 19/11/2007, at 8:03 PM, Aki Inoue wrote:

Bad assumption??
Yes 8-).

CoreText is designed to be the base text layout engine for out platform.
And it's based on somewhat different graphics model from the Cocoa Text System.


CT is mostly relying on the CG graphics state for specifying rendering attributes whereas the Text System is taking more markup attribute kind of approach.
So, even though some of the text attributes are toll-free bridged, text attributes recognized by CF is subset of the Text System and possibly stay that way.


In other words, if you need to use all text attributes supported by the Text System, you should stay with the Text System.

You should have to go down to CT for very limited reasons (i.e. writing your own text engine).

Aki

On 2007/11/19, at 10:46, John Clayton wrote:

I'm not - I just created a .rtf file in TextEdit, made some things bold, some thing yellow, gave the whole text a background shadow - and expected that this would then show up in core-text rendered graphics as well.

Bad assumption??



On 19/11/2007, at 6:46 PM, j o a r wrote:


On Nov 19, 2007, at 9:39 AM, John Clayton wrote:

I'm using the following code to draw an attributed string into a layer (my own CATextLayer), but the text *always* draws black - is there something simple that I'm doing wrong? I am of course assuming that the colour into in the attributed string would determine how that content is being drawn.


Quick off-list question:

How certain are you that your attributes are set up correctly? Have you verified in some non-CT layer context that they do the right thing?

j o a r



_______________________________________________

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


References: 
 >Custom text via Core Text in a layer. (From: John Clayton <email@hidden>)
 >Re: Custom text via Core Text in a layer. (From: John Clayton <email@hidden>)
 >Re: Custom text via Core Text in a layer. (From: Aki Inoue <email@hidden>)
 >Re: Custom text via Core Text in a layer. (From: John Clayton <email@hidden>)

  • Prev by Date: Re: Loading View in Placeholder upon startup
  • Next by Date: Re: Finding the height of a piece of text
  • Previous by thread: Re: Custom text via Core Text in a layer.
  • Next by thread: CTFrame and drawing text + layers.
  • Index(es):
    • Date
    • Thread