PDFKit seems a bit disturbed on Sierra.
The 10.12 beta 3 seems to improve things but there are still some rendering 
stutters etc.

Has PDFKit been reworked - there doesn’t seem to be any mention of it in the 
release notes?
If so it might be a question of waiting for the internal gremlins to be hunted 
down rather than me wasting too much time on this.

Before 10.12 PDFPage -(void)drawWithBox:(PDFDisplayBox)box was called.

In 10.12 PDFPage -(void)drawWithBox:(PDFDisplayBox)box 
toContext:(CGContextRef)context was defined.

However, on 10.12.0 when printing NSPrintThumbnailView calls 
drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context not toContext:.
My only solution here has been to override the private  PDFPage 
-(void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context

In addition screen rendering seems to be suffering.
Rendering now has to target the CGContextRef given in PDFPage 
drawWithBox:toContext:

I render additional text onto the PDF using NSLayoutManager using a flipped 
NSGraphicsContext.

Pre 10.12 this worked fine. Now it is flakey - often I just get a PDFPage rect 
filled with red (printing seems okay).
Perhaps I am not handling the context correctly.

It would seem that the actual generation is now called on a background thread 
and that [NSGraphicsContext currentContext] can be nil.
I try to deal with this but all is still not quite what it was.

- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context
{
    [super drawWithBox:box inContext:context];
   
  BOOL hasInitialNSGraphicsContext = NO;
    
    if ([NSGraphicsContext currentContext]) {
        [NSGraphicsContext saveGraphicsState];
        hasInitialNSGraphicsContext = YES;
    }
    else {
        CGContextSaveGState(context);
    }
    
    // life is much easier if we use a flipped co-ordinate system.
    // NSLayoutManager expects a flipped NSGraphicsContext to be present.
    NSGraphicsContext *flippedGC = [NSGraphicsContext 
graphicsContextWithGraphicsPort:context flipped:YES];
    [NSGraphicsContext setCurrentContext:flippedGC];
    
    // define the flip transform
    NSAffineTransform* xform = [NSAffineTransform transform];
    [xform translateXBy:0.0 yBy:self.mediaBoxRect.size.height];
    [xform scaleXBy:1.0 yBy:-1.0];
    [xform concat];
    
    // draw all map items
    … do my drawing here

    if (hasInitialNSGraphicsContext) {
        [NSGraphicsContext restoreGraphicsState];
    }
    else {
        CGContextRestoreGState(context);
    }

}

Jonathan
_______________________________________________

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to