image_utils.mm revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
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