| 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 |