Separate Simple Backend creation from initialization.
[chromium-blink-merge.git] / skia / ext / skia_utils_mac.h
blob40eb6d472cbdc02fa9b47ea29195472a0ebe5529
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>
9 #include <vector>
11 #include "third_party/skia/include/core/SkBitmap.h"
12 #include "third_party/skia/include/core/SkColor.h"
14 struct SkIRect;
15 struct SkPoint;
16 struct SkRect;
17 class SkCanvas;
18 class SkMatrix;
19 #ifdef __LP64__
20 typedef CGSize NSSize;
21 #else
22 typedef struct _NSSize NSSize;
23 #endif
25 #ifdef __OBJC__
26 @class NSBitmapImageRep;
27 @class NSImage;
28 @class NSImageRep;
29 @class NSColor;
30 #else
31 class NSBitmapImageRep;
32 class NSImage;
33 class NSImageRep;
34 class NSColor;
35 #endif
37 namespace gfx {
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);
51 // Matrix converters.
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
86 // color space.
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 {
104 public:
105 explicit SkiaBitLocker(SkCanvas* canvas);
106 ~SkiaBitLocker();
107 CGContextRef cgContext();
109 private:
110 void releaseIfNeeded();
111 SkCanvas* canvas_;
112 CGContextRef cgContext_;
113 SkBitmap bitmap_;
114 bool useDeviceBits_;
118 } // namespace gfx
120 #endif // SKIA_EXT_SKIA_UTILS_MAC_H_