OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef SKIA_EXT_PLATFORM_CANVAS_H_ | 5 #ifndef SKIA_EXT_PLATFORM_CANVAS_H_ |
6 #define SKIA_EXT_PLATFORM_CANVAS_H_ | 6 #define SKIA_EXT_PLATFORM_CANVAS_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
11 // The platform-specific device will include the necessary platform headers | 11 // The platform-specific device will include the necessary platform headers |
12 // to get the surface type. | 12 // to get the surface type. |
13 #include "build/build_config.h" | 13 #include "build/build_config.h" |
14 #include "skia/ext/platform_surface.h" | 14 #include "skia/ext/platform_surface.h" |
15 #include "third_party/skia/include/core/SkBitmap.h" | 15 #include "third_party/skia/include/core/SkBitmap.h" |
16 #include "third_party/skia/include/core/SkCanvas.h" | 16 #include "third_party/skia/include/core/SkCanvas.h" |
17 #include "third_party/skia/include/core/SkPixelRef.h" | 17 #include "third_party/skia/include/core/SkPixelRef.h" |
18 #include "third_party/skia/include/core/SkPixmap.h" | 18 #include "third_party/skia/include/core/SkPixmap.h" |
19 | 19 |
20 class SkBaseDevice; | 20 class SkBaseDevice; |
21 | 21 |
22 // A PlatformCanvas is a software-rasterized SkCanvas which is *also* | 22 // A PlatformCanvas is a software-rasterized SkCanvas which is *also* |
23 // addressable by the platform-specific drawing API (GDI, Core Graphics, | 23 // addressable by the platform-specific drawing API (GDI, Core Graphics, |
24 // Cairo...). | 24 // Cairo...). |
25 | 25 |
26 namespace skia { | 26 namespace skia { |
27 | 27 |
| 28 class LayerAllocator; |
| 29 |
28 // | 30 // |
29 // Note about error handling. | 31 // Note about error handling. |
30 // | 32 // |
31 // Creating a canvas can fail at times, most often because we fail to allocate | 33 // Creating a canvas can fail at times, most often because we fail to allocate |
32 // the backing-store (pixels). This can be from out-of-memory, or something | 34 // the backing-store (pixels). This can be from out-of-memory, or something |
33 // more opaque, like GDI or cairo reported a failure. | 35 // more opaque, like GDI or cairo reported a failure. |
34 // | 36 // |
35 // To allow the caller to handle the failure, every Create... factory takes an | 37 // To allow the caller to handle the failure, every Create... factory takes an |
36 // enum as its last parameter. The default value is kCrashOnFailure. If the | 38 // enum as its last parameter. The default value is kCrashOnFailure. If the |
37 // caller passes kReturnNullOnFailure, then the caller is responsible to check | 39 // caller passes kReturnNullOnFailure, then the caller is responsible to check |
38 // the return result. | 40 // the return result. |
39 // | 41 // |
40 enum OnFailureType { | 42 enum OnFailureType { |
41 CRASH_ON_FAILURE, | 43 CRASH_ON_FAILURE, |
42 RETURN_NULL_ON_FAILURE | 44 RETURN_NULL_ON_FAILURE |
43 }; | 45 }; |
44 | 46 |
45 #if defined(WIN32) | 47 #if defined(WIN32) |
46 // The shared_section parameter is passed to gfx::PlatformDevice::create. | 48 // The shared_section parameter is passed to gfx::PlatformDevice::create. |
47 // See it for details. | 49 // See it for details. |
| 50 // TODO: this should become sk_sp<SkCanvas> |
48 SK_API SkCanvas* CreatePlatformCanvas(int width, | 51 SK_API SkCanvas* CreatePlatformCanvas(int width, |
49 int height, | 52 int height, |
50 bool is_opaque, | 53 bool is_opaque, |
51 HANDLE shared_section, | 54 HANDLE shared_section, |
52 OnFailureType failure_type); | 55 OnFailureType failure_type); |
53 | 56 |
54 // Draws the top layer of the canvas into the specified HDC. Only works | 57 // Draws the top layer of the canvas into the specified HDC. Only works |
55 // with a SkCanvas with a BitmapPlatformDevice. Will create a temporary | 58 // with a SkCanvas with a BitmapPlatformDevice. Will create a temporary |
56 // HDC to back the canvas if one doesn't already exist, tearing it down | 59 // HDC to back the canvas if one doesn't already exist, tearing it down |
57 // before returning. If |src_rect| is null, copies the entire canvas. | 60 // before returning. If |src_rect| is null, copies the entire canvas. |
58 SK_API void DrawToNativeContext(SkCanvas* canvas, | 61 SK_API void DrawToNativeContext(SkCanvas* canvas, |
59 HDC hdc, | 62 HDC hdc, |
60 int x, | 63 int x, |
61 int y, | 64 int y, |
62 const RECT* src_rect); | 65 const RECT* src_rect); |
63 #elif defined(__APPLE__) | 66 #elif defined(__APPLE__) |
| 67 // TODO: this should become sk_sp<SkCanvas> |
64 SK_API SkCanvas* CreatePlatformCanvas(CGContextRef context, | 68 SK_API SkCanvas* CreatePlatformCanvas(CGContextRef context, |
65 int width, | 69 int width, |
66 int height, | 70 int height, |
67 bool is_opaque, | 71 bool is_opaque, |
68 OnFailureType failure_type); | 72 OnFailureType failure_type); |
69 | 73 |
| 74 // TODO: this should become sk_sp<SkCanvas> |
70 SK_API SkCanvas* CreatePlatformCanvas(int width, | 75 SK_API SkCanvas* CreatePlatformCanvas(int width, |
71 int height, | 76 int height, |
72 bool is_opaque, | 77 bool is_opaque, |
73 uint8_t* context, | 78 uint8_t* context, |
74 OnFailureType failure_type); | 79 OnFailureType failure_type); |
75 #elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ | 80 #elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ |
76 defined(__sun) || defined(ANDROID) | 81 defined(__sun) || defined(ANDROID) |
77 // Linux --------------------------------------------------------------------- | 82 // Linux --------------------------------------------------------------------- |
78 | 83 |
79 // Construct a canvas from the given memory region. The memory is not cleared | 84 // Construct a canvas from the given memory region. The memory is not cleared |
80 // first. @data must be, at least, @height * StrideForWidth(@width) bytes. | 85 // first. @data must be, at least, @height * StrideForWidth(@width) bytes. |
| 86 // TODO: this should become sk_sp<SkCanvas> |
81 SK_API SkCanvas* CreatePlatformCanvas(int width, | 87 SK_API SkCanvas* CreatePlatformCanvas(int width, |
82 int height, | 88 int height, |
83 bool is_opaque, | 89 bool is_opaque, |
84 uint8_t* data, | 90 uint8_t* data, |
85 OnFailureType failure_type); | 91 OnFailureType failure_type); |
86 #endif | 92 #endif |
87 | 93 |
88 static inline SkCanvas* CreatePlatformCanvas(int width, | 94 static inline SkCanvas* CreatePlatformCanvas(int width, |
89 int height, | 95 int height, |
90 bool is_opaque) { | 96 bool is_opaque) { |
91 return CreatePlatformCanvas(width, height, is_opaque, 0, CRASH_ON_FAILURE); | 97 return CreatePlatformCanvas(width, height, is_opaque, 0, CRASH_ON_FAILURE); |
92 } | 98 } |
93 | 99 |
94 SK_API SkCanvas* CreateCanvas(const sk_sp<SkBaseDevice>& device, | |
95 OnFailureType failure_type); | |
96 | |
97 static inline SkCanvas* CreateBitmapCanvas(int width, | 100 static inline SkCanvas* CreateBitmapCanvas(int width, |
98 int height, | 101 int height, |
99 bool is_opaque) { | 102 bool is_opaque) { |
100 return CreatePlatformCanvas(width, height, is_opaque, 0, CRASH_ON_FAILURE); | 103 return CreatePlatformCanvas(width, height, is_opaque, 0, CRASH_ON_FAILURE); |
101 } | 104 } |
102 | 105 |
103 static inline SkCanvas* TryCreateBitmapCanvas(int width, | 106 static inline SkCanvas* TryCreateBitmapCanvas(int width, |
104 int height, | 107 int height, |
105 bool is_opaque) { | 108 bool is_opaque) { |
106 return CreatePlatformCanvas(width, height, is_opaque, 0, | 109 return CreatePlatformCanvas(width, height, is_opaque, 0, |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 SK_API bool IsPreviewMetafile(const SkCanvas& canvas); | 164 SK_API bool IsPreviewMetafile(const SkCanvas& canvas); |
162 | 165 |
163 // Returns the CGContext that backing the SkCanvas. | 166 // Returns the CGContext that backing the SkCanvas. |
164 // Returns NULL if none is bound. | 167 // Returns NULL if none is bound. |
165 SK_API CGContextRef GetBitmapContext(const SkCanvas& canvas); | 168 SK_API CGContextRef GetBitmapContext(const SkCanvas& canvas); |
166 #endif | 169 #endif |
167 | 170 |
168 } // namespace skia | 171 } // namespace skia |
169 | 172 |
170 #endif // SKIA_EXT_PLATFORM_CANVAS_H_ | 173 #endif // SKIA_EXT_PLATFORM_CANVAS_H_ |
OLD | NEW |