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 // The platform-specific device will include the necessary platform headers | 8 // The platform-specific device will include the necessary platform headers |
9 // to get the surface type. | 9 // to get the surface type. |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 #include "skia/ext/platform_device.h" | 11 #include "skia/ext/platform_device.h" |
| 12 #include "skia/ext/refptr.h" |
12 #include "third_party/skia/include/core/SkCanvas.h" | 13 #include "third_party/skia/include/core/SkCanvas.h" |
13 | 14 |
14 namespace skia { | 15 namespace skia { |
15 | 16 |
16 typedef SkCanvas PlatformCanvas; | 17 typedef SkCanvas PlatformCanvas; |
17 | 18 |
18 // | 19 // |
19 // Note about error handling. | 20 // Note about error handling. |
20 // | 21 // |
21 // Creating a canvas can fail at times, most often because we fail to allocate | 22 // Creating a canvas can fail at times, most often because we fail to allocate |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 uint8_t* data, | 65 uint8_t* data, |
65 OnFailureType failure_type); | 66 OnFailureType failure_type); |
66 #endif | 67 #endif |
67 | 68 |
68 static inline SkCanvas* CreatePlatformCanvas(int width, | 69 static inline SkCanvas* CreatePlatformCanvas(int width, |
69 int height, | 70 int height, |
70 bool is_opaque) { | 71 bool is_opaque) { |
71 return CreatePlatformCanvas(width, height, is_opaque, 0, CRASH_ON_FAILURE); | 72 return CreatePlatformCanvas(width, height, is_opaque, 0, CRASH_ON_FAILURE); |
72 } | 73 } |
73 | 74 |
74 // Takes ownership of the device, so the caller need not call unref(). | 75 SK_API SkCanvas* CreateCanvas(const skia::RefPtr<SkDevice>& device, |
75 SK_API SkCanvas* CreateCanvas(SkDevice* device, OnFailureType failure_type); | 76 OnFailureType failure_type); |
76 | 77 |
77 static inline SkCanvas* CreateBitmapCanvas(int width, | 78 static inline SkCanvas* CreateBitmapCanvas(int width, |
78 int height, | 79 int height, |
79 bool is_opaque) { | 80 bool is_opaque) { |
80 return CreatePlatformCanvas(width, height, is_opaque, 0, CRASH_ON_FAILURE); | 81 return CreatePlatformCanvas(width, height, is_opaque, 0, CRASH_ON_FAILURE); |
81 } | 82 } |
82 | 83 |
83 static inline SkCanvas* TryCreateBitmapCanvas(int width, | 84 static inline SkCanvas* TryCreateBitmapCanvas(int width, |
84 int height, | 85 int height, |
85 bool is_opaque) { | 86 bool is_opaque) { |
86 return CreatePlatformCanvas(width, height, is_opaque, 0, | 87 return CreatePlatformCanvas(width, height, is_opaque, 0, |
87 RETURN_NULL_ON_FAILURE); | 88 RETURN_NULL_ON_FAILURE); |
88 } | 89 } |
89 | 90 |
90 class SK_API ScopedPlatformCanvas : public SkAutoTUnref<SkCanvas> { | 91 class SK_API ScopedPlatformCanvas : public RefPtr<SkCanvas> { |
91 public: | 92 public: |
92 ScopedPlatformCanvas(int width, int height, bool is_opaque) | 93 ScopedPlatformCanvas(int width, int height, bool is_opaque) |
93 : SkAutoTUnref<SkCanvas>(CreatePlatformCanvas(width, height, is_opaque)){} | 94 : RefPtr<SkCanvas>(AdoptRef( |
| 95 CreatePlatformCanvas(width, height, is_opaque))) |
| 96 {} |
94 }; | 97 }; |
95 | 98 |
96 // Return the stride (length of a line in bytes) for the given width. Because | 99 // Return the stride (length of a line in bytes) for the given width. Because |
97 // we use 32-bits per pixel, this will be roughly 4*width. However, for | 100 // we use 32-bits per pixel, this will be roughly 4*width. However, for |
98 // alignment reasons we may wish to increase that. | 101 // alignment reasons we may wish to increase that. |
99 SK_API size_t PlatformCanvasStrideForWidth(unsigned width); | 102 SK_API size_t PlatformCanvasStrideForWidth(unsigned width); |
100 | 103 |
101 // Returns the SkDevice pointer of the topmost rect with a non-empty | 104 // Returns the SkDevice pointer of the topmost rect with a non-empty |
102 // clip. In practice, this is usually either the top layer or nothing, since | 105 // clip. In practice, this is usually either the top layer or nothing, since |
103 // we usually set the clip to new layers when we make them. | 106 // we usually set the clip to new layers when we make them. |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 SkBitmap bitmap_; | 182 SkBitmap bitmap_; |
180 PlatformSurface surface_; // initialized to 0 | 183 PlatformSurface surface_; // initialized to 0 |
181 intptr_t platform_extra_; // initialized to 0, specific to each platform | 184 intptr_t platform_extra_; // initialized to 0, specific to each platform |
182 | 185 |
183 DISALLOW_COPY_AND_ASSIGN(PlatformBitmap); | 186 DISALLOW_COPY_AND_ASSIGN(PlatformBitmap); |
184 }; | 187 }; |
185 | 188 |
186 } // namespace skia | 189 } // namespace skia |
187 | 190 |
188 #endif // SKIA_EXT_PLATFORM_CANVAS_H_ | 191 #endif // SKIA_EXT_PLATFORM_CANVAS_H_ |
OLD | NEW |