Home | History | Annotate | Download | only in ext
      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   explicit SkiaBitLocker(SkCanvas* canvas);
    112   ~SkiaBitLocker();
    113   CGContextRef cgContext();
    114 
    115  private:
    116   void releaseIfNeeded();
    117   SkCanvas* canvas_;
    118   CGContextRef cgContext_;
    119   SkBitmap bitmap_;
    120   SkIPoint bitmapOffset_;
    121   bool useDeviceBits_;
    122 };
    123 
    124 
    125 }  // namespace gfx
    126 
    127 #endif  // SKIA_EXT_SKIA_UTILS_MAC_H_
    128