1 // Copyright (c) 2012 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.
5 #ifndef SKIA_EXT_SKIA_UTILS_MAC_H_
6 #define SKIA_EXT_SKIA_UTILS_MAC_H_
8 #include <ApplicationServices/ApplicationServices.h>
11 #include "third_party/skia/include/core/SkBitmap.h"
12 #include "third_party/skia/include/core/SkColor.h"
20 typedef CGSize NSSize
;
22 typedef struct _NSSize NSSize
;
26 @
class NSBitmapImageRep
;
31 class NSBitmapImageRep
;
39 // Converts a Skia point to a CoreGraphics CGPoint.
40 // Both use same in-memory format.
41 inline const CGPoint
& SkPointToCGPoint(const SkPoint
& point
) {
42 return reinterpret_cast<const CGPoint
&>(point
);
45 // Converts a CoreGraphics point to a Skia CGPoint.
46 // Both use same in-memory format.
47 inline const SkPoint
& CGPointToSkPoint(const CGPoint
& point
) {
48 return reinterpret_cast<const SkPoint
&>(point
);
52 SK_API CGAffineTransform
SkMatrixToCGAffineTransform(const SkMatrix
& matrix
);
54 // Rectangle converters.
55 SK_API SkRect
CGRectToSkRect(const CGRect
& rect
);
57 // Converts a Skia rect to a CoreGraphics CGRect.
58 CGRect
SkIRectToCGRect(const SkIRect
& rect
);
59 CGRect
SkRectToCGRect(const SkRect
& rect
);
61 // Converts CGColorRef to the ARGB layout Skia expects.
62 SK_API SkColor
CGColorRefToSkColor(CGColorRef color
);
64 // Converts ARGB to CGColorRef.
65 SK_API CGColorRef
CGColorCreateFromSkColor(SkColor color
);
67 // Converts NSColor to ARGB. Returns raw rgb values and does no colorspace
68 // conversion. Only valid for colors in calibrated and device color spaces.
69 SK_API SkColor
NSDeviceColorToSkColor(NSColor
* color
);
71 // Converts ARGB to NSColor.
72 SK_API NSColor
* SkColorToCalibratedNSColor(SkColor color
);
73 SK_API NSColor
* SkColorToDeviceNSColor(SkColor color
);
75 // Converts a CGImage to a SkBitmap.
76 SK_API SkBitmap
CGImageToSkBitmap(CGImageRef image
);
78 // Draws an NSImage with a given size into a SkBitmap.
79 SK_API SkBitmap
NSImageToSkBitmap(NSImage
* image
, NSSize size
, bool is_opaque
);
81 // Draws an NSImageRep with a given size into a SkBitmap.
82 SK_API SkBitmap
NSImageRepToSkBitmap(
83 NSImageRep
* image
, NSSize size
, bool is_opaque
);
85 // Given an SkBitmap, return an autoreleased NSBitmapImageRep in the generic
87 SK_API NSBitmapImageRep
* SkBitmapToNSBitmapImageRep(const SkBitmap
& image
);
89 SK_API NSBitmapImageRep
* SkBitmapToNSBitmapImageRepWithColorSpace(
90 const SkBitmap
& skiaBitmap
,
91 CGColorSpaceRef colorSpace
);
93 // Given an SkBitmap and a color space, return an autoreleased NSImage.
94 SK_API NSImage
* SkBitmapToNSImageWithColorSpace(const SkBitmap
& icon
,
95 CGColorSpaceRef colorSpace
);
97 // Given an SkBitmap, return an autoreleased NSImage in the generic color space.
98 // DEPRECATED, use SkBitmapToNSImageWithColorSpace() instead.
99 // TODO(thakis): Remove this -- http://crbug.com/69432
100 SK_API NSImage
* SkBitmapToNSImage(const SkBitmap
& icon
);
102 // Converts a SkCanvas temporarily to a CGContext
103 class SK_API SkiaBitLocker
{
105 explicit SkiaBitLocker(SkCanvas
* canvas
);
107 CGContextRef
cgContext();
110 void releaseIfNeeded();
112 CGContextRef cgContext_
;
120 #endif // SKIA_EXT_SKIA_UTILS_MAC_H_