I am drawing some CALayers, and use code like what I have below so I can draw 
exactly on pixels.

When I draw it in my CALayer drawing code, it's not always pixel aligned. It's 
certainly better than if I had done no rounding, but still it is not correct. 
Is there something I'm not doing right? Why I think it may be CALayer based is 
because when I draw a whole bunch of these squares on layers, on some layers 
they are all aligned, and on other layers they are not - they are all affected 
at the same time. I do not have any scale transforms anywhere - only 
translations.



CGContextSaveGState(gcontext);
CGRect rect = CGRectMake(55.0f, -2.5f, 5.0f, 5.0f);
CGRect deviceRect = CGContextConvertRectToDeviceSpace(gcontext, rect);
        
NSDecimalNumberHandler *handler = [NSDecimalNumberHandler 
decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:0 raiseOnExactness:NO 
raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];

deviceRect.origin.x = [[(NSDecimalNumber *)[NSDecimalNumber 
numberWithFloat:deviceRect.origin.x + 0.5f] 
decimalNumberByRoundingAccordingToBehavior:handler] floatValue] - 0.5f;
deviceRect.origin.y = [[(NSDecimalNumber *)[NSDecimalNumber 
numberWithFloat:deviceRect.origin.y + 0.5f] 
decimalNumberByRoundingAccordingToBehavior:handler] floatValue] - 0.5f;
deviceRect.size.width = [[(NSDecimalNumber *)[NSDecimalNumber 
numberWithFloat:deviceRect.size.width] 
decimalNumberByRoundingAccordingToBehavior:handler] floatValue];
deviceRect.size.height = [[(NSDecimalNumber *)[NSDecimalNumber 
numberWithFloat:deviceRect.size.height] 
decimalNumberByRoundingAccordingToBehavior:handler] floatValue];
        
CGRect drawingRect = CGContextConvertRectToUserSpace(gcontext, deviceRect);

CGContextSetRGBStrokeColor(gcontext, 0.0f, 0.0f, 0.0f, 1.0f);
CGContextSetRGBFillColor(gcontext, 1.0f, 1.0f, 1.0f, 1.0f);

CGContextAddRect(gcontext, drawingRect);
CGContextDrawPath(gcontext, kCGPathFillStroke);

CGContextRestoreGState(gcontext);



Regards

Gideon



_______________________________________________

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 arch...@mail-archive.com

Reply via email to