summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/image_utils.mm
blob: 80188e5412465c269907832f4ae8117c641c38e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "chrome/browser/cocoa/image_utils.h"

@implementation NSImage (FlippedAdditions)

- (void)drawInRect:(NSRect)dstRect
          fromRect:(NSRect)srcRect
         operation:(NSCompositingOperation)op
          fraction:(CGFloat)requestedAlpha
      neverFlipped:(BOOL)neverFlipped {
  NSAffineTransform *transform = nil;

  // Flip drawing and adjust the origin to make the image come out
  // right.
  if (neverFlipped && [[NSGraphicsContext currentContext] isFlipped]) {
    transform = [NSAffineTransform transform];
    [transform scaleXBy:1.0 yBy:-1.0];
    [transform concat];

    // The lower edge of the image is as far from the origin as the
    // upper edge was, plus it's on the other side of the origin.
    dstRect.origin.y -= NSMaxY(dstRect) + NSMinY(dstRect);
  }

  [self drawInRect:dstRect
          fromRect:srcRect
         operation:op
          fraction:requestedAlpha];

  // Flip drawing back, if needed.
  [transform concat];
}

@end