Home | History | Annotate | Download | only in cocoa
      1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #import "chrome/browser/ui/cocoa/image_utils.h"
      6 
      7 @implementation NSImage (FlippedAdditions)
      8 
      9 - (void)drawInRect:(NSRect)dstRect
     10           fromRect:(NSRect)srcRect
     11          operation:(NSCompositingOperation)op
     12           fraction:(CGFloat)requestedAlpha
     13       neverFlipped:(BOOL)neverFlipped {
     14   NSAffineTransform *transform = nil;
     15 
     16   // Flip drawing and adjust the origin to make the image come out
     17   // right.
     18   if (neverFlipped && [[NSGraphicsContext currentContext] isFlipped]) {
     19     transform = [NSAffineTransform transform];
     20     [transform scaleXBy:1.0 yBy:-1.0];
     21     [transform concat];
     22 
     23     // The lower edge of the image is as far from the origin as the
     24     // upper edge was, plus it's on the other side of the origin.
     25     dstRect.origin.y -= NSMaxY(dstRect) + NSMinY(dstRect);
     26   }
     27 
     28   [self drawInRect:dstRect
     29           fromRect:srcRect
     30          operation:op
     31           fraction:requestedAlpha];
     32 
     33   // Flip drawing back, if needed.
     34   [transform concat];
     35 }
     36 
     37 @end
     38