On Thu, May 27, 2010 at 8:40 PM, Graham Cox <graham....@bigpond.com> wrote:

> Thanks Kyle, that seems to look like a fruitful approach. I'm doing the
> following, which appears to be enough, i.e. it works. But should I be doing
> anything else?
>
>
>        NSSize size = [self bounds].size;
>        NSRect destRect = NSZeroRect;
>
>        destRect.size = size;
>
>        NSMutableData* pdfData = [NSMutableData data];
>        CGDataConsumerRef consumer =
> CGDataConsumerCreateWithCFData((CFMutableDataRef) pdfData );
>        CGRect mediaBox = CGRectMake( 0, 0, size.width, size.height );
>        CGContextRef pdfContext = CGPDFContextCreate( consumer, &mediaBox,
> NULL );
>        CGDataConsumerRelease( consumer );
>
>        NSGraphicsContext* newGC = [NSGraphicsContext
> graphicsContextWithGraphicsPort:pdfContext flipped:YES];
>        [NSGraphicsContext saveGraphicsState];
>        [NSGraphicsContext setCurrentContext:newGC];
>
>        CGPDFContextBeginPage( pdfContext, NULL );
>
>        [self drawContentInRect:destRect fromRect:NSZeroRect withStyle:nil];
>
>        CGPDFContextEndPage( pdfContext );
>
>        [NSGraphicsContext restoreGraphicsState];
>
>        CGPDFContextClose( pdfContext );
>        CGContextRelease( pdfContext );
>
>        return pdfData;
>
>
> This leads me on to a further question about correctly handling
> flippedness, which quite honestly has me really confused.
>
> The objects I'm drawing generally assume a flipped context, i.e. my view is
> flipped and so is my entire coordinate system all the way down. I have not
> run into any problems with that anywhere, it all works fine. But when I come
> to generate the PDF above, I do have some flipping confusion.
>
> I flip the context to match the expectation of the object itself. Thus text
> draws relatively the right way up and in the right place.
>
> If I take that (flipped) PDF data, use it to create an NSPDFImageRep and
> add it to an NSImage, should the image be flipped or not? (Bear in mind this
> needs to work on 10.5, so the newer flipped stuff is unavailable to help
> sort this confusion out).
>

Hi Graham,

(First, for those following along, flipped images are deprecated in 10.6
along with -[NSImage setFlipped:].)

I agree, flipped images are confusing, and you can more or less think of
them as deprecated prior to 10.6 as well.  This weblog post does a nice job
of explaining what everything means and what to do about it: <
http://www.noodlesoft.com/blog/2009/02/02/understanding-flipped-coordinate-systems/>.
 This material is also covered in depth in the WWDC 2007 talk, Cocoa Drawing
Techniques.

The only reason I can think of off the top of my head to call -setFlipped:
on an NSImage is if you plan to lockFocus on the image and you want the
context to be a flipped context during drawing.  This use case is addressed
in 10.6 by the addition of -[NSImage lockFocusFlipped:] which gives you a
flipped context without doing anything to the internal state of the image.

-Ken
Cocoa Frameworks



> If I take the resulting image and display it in a cell, what should the
> cell do about flipping? For example, if I put the image into NSImageView, it
> works correctly and displays right way up. If I write the image to disk it
> is imported into Preview right way up. But I have a couple of custom cells
> that draw images that show the image wrong way up. What are these cells
> doing wrong that I'm not getting? Should they do anything - maybe just
> leaving flippedness of the image alone rather than try an match it to the
> control's context flippedness is right? I just don't know. I've tried all
> combos I can think of and none of them quite nails it.
>
> --Graham
>
>
>
>
>
>
>
> On 28/05/2010, at 11:24 AM, Kyle Sluder wrote:
>
> > On May 27, 2010, at 6:20 PM, Graham Cox <graham....@bigpond.com> wrote:
> >
> >> Can I not create a PDF context, associate that with a NSPDFImageRep
> instead? It appears I'm forced to use NSPrintOperation to do this which is
> slightly weird as this has nothing to do with printing, nor do I have a view
> readily available to attach to the NSPrintOperation. Surely there's a more
> straightforward way than going round the houses like this?
> >
> > I believe we create a PDF CGContext, wrap it in an NSGraphicsVontext, and
> use +setContext: to get our nice vectory goodness.
> >
> > But I'm going from memory here, and I didn't write that code.
> >
> > --Kyle Sluder
> >>
>
> _______________________________________________
>
> 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/kenferry%40gmail.com
>
> This email sent to kenfe...@gmail.com
>
_______________________________________________

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