(Also, again for others following along, on 10.6 you just pass YES for
respectFlipped in -[NSImage
drawInRect:fromRect:operation:fraction:respectFlipped:hints:].  The
implementation is quite similar to the method Paul gives in the post.)

On Thu, May 27, 2010 at 11:17 PM, Ken Ferry <kenfe...@gmail.com> wrote:

> Did you read the explanation of flipped contexts vs flipped images, and how
> to draw an image right side up into a flipped context?
>
> Flipped contexts are not deprecated.
>
> Do you have or can you obtain access to the 2007 WWDC videos? :-)
>
> -Ken
>
>
> On Thu, May 27, 2010 at 11:11 PM, Graham Cox <graham....@bigpond.com>wrote:
>
>> Thanks for the link Ken, though confusion still persists.
>>
>> Seems to be saying don't use -setFlipped: unless you really know what
>> you're doing. That concurs with your own advice about not using setFlipped
>> unless you're locking focus on the image to get a flipped context for
>> drawing. I'm not, since I generate my PDF in a context I create for the
>> purpose, THEN add the image rep to an image.
>>
>> So on the basis that I don't know what I'm doing, I've removed all calls
>> to [NSImage setFlipped:] anywhere. In the PDF generating code quoted, I do
>> pass YES for flipped because the object itself expects a flipped coordinate
>> system, by which I simply mean that when I draw something  BELOW something
>> else, it has a GREATER Y coordinate value.
>>
>> Having no flipping anywhere now, unfortunately it's still all over the
>> place.
>>
>> First, if I ask the NSPDFImageRep created using the data generated below
>> for its -PDFRepresentation, and write it to disk as a PDF file, it's now
>> inverted. Objects are placed in the correct positions relative to
>> one-another, but the entire image is upside-down, including any text.
>>
>> So, I try setting the image to flipped when I add the single PDF image rep
>> to it:
>>
>>                NSPDFImageRep* rep = [NSPDFImageRep imageRepWithData:[self
>> pdf]];
>>                [image addRepresentation:rep];
>>                [image setFlipped:YES];
>>
>> Now this image appears right-side up in NSImageView, but still writes an
>> inverted PDF file and comes into Preview inverted. I can't really see how
>> this is possible, since raw PDF data doesn't have any concept of 'flipped',
>> does it? That surely means that the original PDF generation is wrong, but if
>> I pass NO for flipped, not only is everything still upside-down but text is
>> screwed as well, with each glyph individually inverted (which means that if
>> the whole image is turned right-way up, any text is inverted).
>>
>> I've read all the documentation on flipped coordinates and now the blog
>> post as well. I'm afraid I'm just as confused as ever. What I need is a
>> clear way through this mess. Turning off all flippedness seemed to be that
>> but isn't. Now I have no idea what I need to flip and when.
>>
>> --Graham
>>
>>
>>
>> On 28/05/2010, at 3:20 PM, Ken Ferry wrote:
>>
>> > On Thu, May 27, 2010 at 8:40 PM, Graham Cox <graham....@bigpond.com>
>> wrote:
>>
>> >        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;
>> >
>> >
>> > 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
>>
>>
>
_______________________________________________

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