On Mar 28, 2008, at 9:19 AM, Milen Dzhumerov wrote:
Hi all,
I've noticed that when using layer backing on a NSTextField the font
becomes fuzzy - it seems that it switches from subpixel anti-
aliasing to normal. And indeed this seems to be the case. After
reading CATextLayer's documentation (assuming that NSTextField uses
it to draw its text), it becomes apparent that subpixel anti-
aliasing cannot be used with CATextLayer. Here's the exact wording:
"Note: CATextLayer disabled sub-pixel antialiasing when rendering
text. Text can only be drawn using sub-pixel antialiasing when it is
composited into an existing opaque background at the same time that
it's rasterized. There is no way to draw subpixel-anialiased text by
itself, whether into an image or a layer, separately in advance of
having the background pixels to weave the text pixels into. Setting
the opacityproperty of the layer to YES does not change the
rendering mode."
After reading the above note it looks to me that if the CATextLayer
has an opaque background, it should be able to use sub-pixel anti-
aliasing *if* we provide the background pixels in advance. The
question is, is it possible to do this? I tried setting the
backgroundColor property of a NSTextField's layer and it still
produced normal anti-aliased text as opposed to subpixel anti-
aliased. Has anyone else bumped into this issue?
Yes, it's possible, but there are two separate cases here:
Case 1: If you're using a layer-backed NSTextField, then CATextLayer
is not actually involved. Setting the NSTextField's backgroundColor
to an opaque color is on the right track, but you also need to do set
drawsBackground to YES for it to take effect. Then you should see
subpixel AA in the rendered results. (This can even be done in IB
using the NSTextField inspector.)
Case 2: If you're using a CATextLayer directly, you'll need to
subclass CATextLayer and do something like the following in your
drawing code:
- (void)drawInContext:(CGContextRef)ctx
{
CGContextSetRGBFillColor (ctx, r, g, b, a);
CGContextFillRect (ctx, [self bounds]);
CGContextSetShouldSmoothFonts (ctx, true);
[super drawInContext:ctx];
}
I've also taken a sample screencast of the degradation of the
quality of the text when using layer backing on a NSTextField - http://www.doc.ic.ac.uk/~md207/ca_bugs/text_render/CA_text_render.mov
.
Kind regards,
Milen
_______________________________________________
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/tstephens%40apple.com
This email sent to [EMAIL PROTECTED]
--
Troy Stephens
Cocoa Frameworks
Apple, Inc.
_______________________________________________
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 [EMAIL PROTECTED]