OLD | NEW |
| (Empty) |
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. | |
4 | |
5 #ifndef SKIA_EXT_SKIA_UTILS_MAC_H_ | |
6 #define SKIA_EXT_SKIA_UTILS_MAC_H_ | |
7 | |
8 #include <ApplicationServices/ApplicationServices.h> | |
9 #include <vector> | |
10 | |
11 #include "third_party/skia/include/core/SkBitmap.h" | |
12 #include "third_party/skia/include/core/SkColor.h" | |
13 | |
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 | |
24 | |
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 | |
36 | |
37 namespace gfx { | |
38 | |
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); | |
43 } | |
44 | |
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); | |
49 } | |
50 | |
51 // Matrix converters. | |
52 SK_API CGAffineTransform SkMatrixToCGAffineTransform(const SkMatrix& matrix); | |
53 | |
54 // Rectangle converters. | |
55 SK_API SkRect CGRectToSkRect(const CGRect& rect); | |
56 | |
57 // Converts a Skia rect to a CoreGraphics CGRect. | |
58 CGRect SkIRectToCGRect(const SkIRect& rect); | |
59 CGRect SkRectToCGRect(const SkRect& rect); | |
60 | |
61 // Converts CGColorRef to the ARGB layout Skia expects. | |
62 SK_API SkColor CGColorRefToSkColor(CGColorRef color); | |
63 | |
64 // Converts ARGB to CGColorRef. | |
65 SK_API CGColorRef CGColorCreateFromSkColor(SkColor color); | |
66 | |
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); | |
70 | |
71 // Converts ARGB in the specified color space to NSColor. | |
72 // Prefer sRGB over calibrated colors. | |
73 SK_API NSColor* SkColorToCalibratedNSColor(SkColor color); | |
74 SK_API NSColor* SkColorToDeviceNSColor(SkColor color); | |
75 SK_API NSColor* SkColorToSRGBNSColor(SkColor color); | |
76 | |
77 // Converts a CGImage to a SkBitmap. | |
78 SK_API SkBitmap CGImageToSkBitmap(CGImageRef image); | |
79 | |
80 // Draws an NSImage with a given size into a SkBitmap. | |
81 SK_API SkBitmap NSImageToSkBitmapWithColorSpace(NSImage* image, | |
82 bool is_opaque, | |
83 CGColorSpaceRef color_space); | |
84 | |
85 // Draws an NSImageRep with a given size into a SkBitmap. | |
86 SK_API SkBitmap NSImageRepToSkBitmapWithColorSpace(NSImageRep* image, | |
87 NSSize size, | |
88 bool is_opaque, | |
89 CGColorSpaceRef colorspace); | |
90 | |
91 // Given an SkBitmap, return an autoreleased NSBitmapImageRep in the generic | |
92 // color space. | |
93 SK_API NSBitmapImageRep* SkBitmapToNSBitmapImageRep(const SkBitmap& image); | |
94 | |
95 SK_API NSBitmapImageRep* SkBitmapToNSBitmapImageRepWithColorSpace( | |
96 const SkBitmap& skiaBitmap, | |
97 CGColorSpaceRef colorSpace); | |
98 | |
99 // Given an SkBitmap and a color space, return an autoreleased NSImage. | |
100 SK_API NSImage* SkBitmapToNSImageWithColorSpace(const SkBitmap& icon, | |
101 CGColorSpaceRef colorSpace); | |
102 | |
103 // Given an SkBitmap, return an autoreleased NSImage in the generic color space. | |
104 // DEPRECATED, use SkBitmapToNSImageWithColorSpace() instead. | |
105 // TODO(thakis): Remove this -- http://crbug.com/69432 | |
106 SK_API NSImage* SkBitmapToNSImage(const SkBitmap& icon); | |
107 | |
108 // Converts a SkCanvas temporarily to a CGContext | |
109 class SK_API SkiaBitLocker { | |
110 public: | |
111 // TODO(ccameron): delete this constructor | |
112 explicit SkiaBitLocker(SkCanvas* canvas); | |
113 SkiaBitLocker(SkCanvas* canvas, | |
114 const SkIRect& userClipRect, | |
115 SkScalar bitmapScaleFactor = 1); | |
116 ~SkiaBitLocker(); | |
117 CGContextRef cgContext(); | |
118 bool hasEmptyClipRegion() const; | |
119 | |
120 private: | |
121 void releaseIfNeeded(); | |
122 SkIRect computeDirtyRect(); | |
123 | |
124 SkCanvas* canvas_; | |
125 | |
126 // If the user specified a clip rect it would draw into then the locker may | |
127 // skip the step of searching for a rect bounding the pixels that the user | |
128 // has drawn into. | |
129 bool userClipRectSpecified_; | |
130 | |
131 CGContextRef cgContext_; | |
132 SkBitmap bitmap_; | |
133 SkIPoint bitmapOffset_; | |
134 SkScalar bitmapScaleFactor_; | |
135 | |
136 // True if we are drawing to |canvas_|'s SkBaseDevice's bits directly through | |
137 // |bitmap_|. Otherwise, the bits in |bitmap_| are our allocation and need to | |
138 // be copied over to |canvas_|. | |
139 bool useDeviceBits_; | |
140 | |
141 // True if |bitmap_| is a dummy 1x1 bitmap allocated for the sake of creating | |
142 // a non-NULL CGContext (it is invalid to use a NULL CGContext), and will not | |
143 // be copied to |canvas_|. This will happen if |canvas_|'s clip region is | |
144 // empty. | |
145 bool bitmapIsDummy_; | |
146 }; | |
147 | |
148 | |
149 } // namespace gfx | |
150 | |
151 #endif // SKIA_EXT_SKIA_UTILS_MAC_H_ | |
OLD | NEW |