Non-Sub-Pixel Rendering Font Rendering Differences when using Core Animation
Non-Sub-Pixel Rendering Font Rendering Differences when using Core Animation
- Subject: Non-Sub-Pixel Rendering Font Rendering Differences when using Core Animation
- From: Simone Manganelli <email@hidden>
- Date: Tue, 26 Apr 2011 21:45:37 -0700
I'm adding some Core Animation to my existing project, and I'm encountering some differences in the font rendering compared to non-Core Animation code. Here's the code used to draw my strings:
> NSShadow *selectedShadow = [[NSShadow alloc] init];
> [selectedShadow setShadowOffset:NSMakeSize(0,-1)];
> [selectedShadow setShadowColor:[NSColor colorWithCalibratedWhite:0.0 alpha:0.33]];
> [selectedShadow autorelease];
>
> NSMutableParagraphStyle *leftAlignedEllipsisStyle = [[NSMutableParagraphStyle alloc] init];
> [leftAlignedEllipsisStyle setAlignment:NSLeftTextAlignment];
> [leftAlignedEllipsisStyle setLineBreakMode:NSLineBreakByWordWrapping];
> [leftAlignedEllipsisStyle autorelease];
>
> NSDictionary *selectedAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
> [NSFont systemFontOfSize:11.0], NSFontAttributeName,
> [NSColor whiteColor], NSForegroundColorAttributeName,
> selectedShadow, NSShadowAttributeName,
> leftAlignedEllipsisStyle, NSParagraphStyleAttributeName,
> nil];
>
> [someString drawWithRect:textRect
> options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin
> attributes:selectedAttributes];
Here's the difference: http://homepage.mac.com/simx/images/antialiasing-diff.png
On the left is text rendered in my existing project using the above code via the drawRect: method. On the right is text rendered into a CALayer using the drawLayer:inContext: method.
I'm aware of the fact that Core Animation disables sub-pixel rendering for text when drawing to transparent backgrounds, so I've intentionally designed my CALayers so that they have opaque backgrounds. Sub-pixel rendering is definitely active now that I've drawn an opaque color to the layer. This doesn't seem to be the issue, especially because the Core Animation text appears *heavier* than the normal Quartz text, whereas it usually appears more wispy when sub-pixel rendering is off.
Nor does this seem to be an issue with half-pixels. The selection bubble is rendering crisply (from image assets), which indicates that the layer is positioned correctly. And the text itself isn't blurred, so the text is also positioned correctly.
This almost looks as if a heavier kind of antialiasing is active on the text. I recall that Mac OS X had four different types of antialiasing you could choose in the Appearance preference pane, but this preference is gone in more recent versions. Could I be hitting that and somehow using some different form of antialiasing?
Any help would be greatly appreciated.
-- Simone
_______________________________________________
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