Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / include / utils / mac / SkCGUtils.h
1
2 /*
3  * Copyright 2011 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 #ifndef SkCGUtils_DEFINED
9 #define SkCGUtils_DEFINED
10
11 #include "SkSize.h"
12 #include "SkImageInfo.h"
13
14 #ifdef SK_BUILD_FOR_MAC
15 #include <ApplicationServices/ApplicationServices.h>
16 #endif
17
18 #ifdef SK_BUILD_FOR_IOS
19 #include <CoreGraphics/CoreGraphics.h>
20 #endif
21
22 class SkBitmap;
23 class SkData;
24 class SkStream;
25
26 /**
27  *  Given a CGImage, allocate an SkBitmap and copy the image's pixels into it. If scaleToFit is not
28  *  null, use it to determine the size of the bitmap, and scale the image to fill the bitmap.
29  *  Otherwise use the image's width/height.
30  *
31  *  On failure, return false, and leave bitmap unchanged.
32  */
33 SK_API bool SkCreateBitmapFromCGImage(SkBitmap* dst, CGImageRef src, SkISize* scaleToFit = NULL);
34
35 /**
36  *  Copy the pixels from src into the memory specified by info/rowBytes/dstPixels. On failure,
37  *  return false (e.g. ImageInfo incompatible with src).
38  */
39 SK_API bool SkCopyPixelsFromCGImage(const SkImageInfo& info, size_t rowBytes, void* dstPixels,
40                                     CGImageRef src);
41
42 /**
43  *  Create an imageref from the specified bitmap using the specified colorspace.
44  *  If space is NULL, then CGColorSpaceCreateDeviceRGB() is used.
45  */
46 SK_API CGImageRef SkCreateCGImageRefWithColorspace(const SkBitmap& bm,
47                                                    CGColorSpaceRef space);
48
49 /**
50  *  Create an imageref from the specified bitmap using the colorspace returned
51  *  by CGColorSpaceCreateDeviceRGB()
52  */
53 static inline CGImageRef SkCreateCGImageRef(const SkBitmap& bm) {
54     return SkCreateCGImageRefWithColorspace(bm, NULL);
55 }
56
57 /**
58  *  Draw the bitmap into the specified CG context. The bitmap will be converted
59  *  to a CGImage using the generic RGB colorspace. (x,y) specifies the position
60  *  of the top-left corner of the bitmap. The bitmap is converted using the
61  *  colorspace returned by CGColorSpaceCreateDeviceRGB()
62  */
63 void SkCGDrawBitmap(CGContextRef, const SkBitmap&, float x, float y);
64
65 bool SkPDFDocumentToBitmap(SkStream* stream, SkBitmap* output);
66
67 /**
68  *  Return a provider that wraps the specified stream. It will become an
69  *  owner of the stream, so the caller must still manage its ownership.
70  *
71  *  To hand-off ownership of the stream to the provider, the caller must do
72  *  something like the following:
73  *
74  *  SkStream* stream = new ...;
75  *  CGDataProviderRef provider = SkStreamToDataProvider(stream);
76  *  stream->unref();
77  *
78  *  Now when the provider is finally deleted, it will delete the stream.
79  */
80 CGDataProviderRef SkCreateDataProviderFromStream(SkStream*);
81
82 CGDataProviderRef SkCreateDataProviderFromData(SkData*);
83
84 #endif