OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_BITMAP_PLATFORM_DEVICE_CAIRO_H_ | 5 #ifndef SKIA_EXT_BITMAP_PLATFORM_DEVICE_CAIRO_H_ |
6 #define SKIA_EXT_BITMAP_PLATFORM_DEVICE_CAIRO_H_ | 6 #define SKIA_EXT_BITMAP_PLATFORM_DEVICE_CAIRO_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 // typically don't do alpha blending of drawables at the user level. Composite | 39 // typically don't do alpha blending of drawables at the user level. Composite |
40 // extensions aside.) | 40 // extensions aside.) |
41 // | 41 // |
42 // We don't use GdkPixbuf because its byte order differs from the rest. Most | 42 // We don't use GdkPixbuf because its byte order differs from the rest. Most |
43 // importantly, it differs from Cairo which, being a system library, is | 43 // importantly, it differs from Cairo which, being a system library, is |
44 // something that we can't easily change. | 44 // something that we can't easily change. |
45 // ----------------------------------------------------------------------------- | 45 // ----------------------------------------------------------------------------- |
46 | 46 |
47 namespace skia { | 47 namespace skia { |
48 | 48 |
| 49 class ScopedPlatformPaint; |
| 50 |
49 // ----------------------------------------------------------------------------- | 51 // ----------------------------------------------------------------------------- |
50 // This is the Linux bitmap backing for Skia. We create a Cairo image surface | 52 // This is the Linux bitmap backing for Skia. We create a Cairo image surface |
51 // to store the backing buffer. This buffer is BGRA in memory (on little-endian | 53 // to store the backing buffer. This buffer is BGRA in memory (on little-endian |
52 // machines). | 54 // machines). |
53 // | 55 // |
54 // For now we are also using Cairo to paint to the Drawables so we provide an | 56 // For now we are also using Cairo to paint to the Drawables so we provide an |
55 // accessor for getting the surface. | 57 // accessor for getting the surface. |
56 // | 58 // |
57 // This is all quite ok for test_shell. In the future we will want to use | 59 // This is all quite ok for test_shell. In the future we will want to use |
58 // shared memory between the renderer and the main process at least. In this | 60 // shared memory between the renderer and the main process at least. In this |
(...skipping 18 matching lines...) Expand all Loading... |
77 // This doesn't take ownership of |data|. If |data| is NULL, the contents | 79 // This doesn't take ownership of |data|. If |data| is NULL, the contents |
78 // of the device are initialized to 0. | 80 // of the device are initialized to 0. |
79 static BitmapPlatformDevice* Create(int width, int height, bool is_opaque, | 81 static BitmapPlatformDevice* Create(int width, int height, bool is_opaque, |
80 uint8_t* data); | 82 uint8_t* data); |
81 | 83 |
82 // Overridden from SkBaseDevice: | 84 // Overridden from SkBaseDevice: |
83 void setMatrixClip(const SkMatrix& transform, | 85 void setMatrixClip(const SkMatrix& transform, |
84 const SkRegion& region, | 86 const SkRegion& region, |
85 const SkClipStack&) override; | 87 const SkClipStack&) override; |
86 | 88 |
87 // Overridden from PlatformDevice: | |
88 cairo_t* BeginPlatformPaint() override; | |
89 | |
90 protected: | 89 protected: |
91 SkBaseDevice* onCreateDevice(const CreateInfo&, const SkPaint*) override; | 90 SkBaseDevice* onCreateDevice(const CreateInfo&, const SkPaint*) override; |
92 | 91 |
93 private: | 92 private: |
| 93 // Overridden from PlatformDevice: |
| 94 cairo_t* BeginPlatformPaint() override; |
| 95 |
94 static BitmapPlatformDevice* Create(int width, int height, bool is_opaque, | 96 static BitmapPlatformDevice* Create(int width, int height, bool is_opaque, |
95 cairo_surface_t* surface); | 97 cairo_surface_t* surface); |
96 | 98 |
97 // Sets the transform and clip operations. This will not update the Cairo | 99 // Sets the transform and clip operations. This will not update the Cairo |
98 // context, but will mark the config as dirty. The next call of LoadConfig | 100 // context, but will mark the config as dirty. The next call of LoadConfig |
99 // will pick up these changes. | 101 // will pick up these changes. |
100 void SetMatrixClip(const SkMatrix& transform, const SkRegion& region); | 102 void SetMatrixClip(const SkMatrix& transform, const SkRegion& region); |
101 | 103 |
102 // Loads the current transform and clip into the context. | 104 // Loads the current transform and clip into the context. |
103 void LoadConfig(); | 105 void LoadConfig(); |
104 | 106 |
105 // Graphics context used to draw into the surface. | 107 // Graphics context used to draw into the surface. |
106 cairo_t* cairo_; | 108 cairo_t* cairo_; |
107 | 109 |
108 // True when there is a transform or clip that has not been set to the | 110 // True when there is a transform or clip that has not been set to the |
109 // context. The context is retrieved for every text operation, and the | 111 // context. The context is retrieved for every text operation, and the |
110 // transform and clip do not change as much. We can save time by not loading | 112 // transform and clip do not change as much. We can save time by not loading |
111 // the clip and transform for every one. | 113 // the clip and transform for every one. |
112 bool config_dirty_; | 114 bool config_dirty_; |
113 | 115 |
114 // Translation assigned to the context: we need to keep track of this | 116 // Translation assigned to the context: we need to keep track of this |
115 // separately so it can be updated even if the context isn't created yet. | 117 // separately so it can be updated even if the context isn't created yet. |
116 SkMatrix transform_; | 118 SkMatrix transform_; |
117 | 119 |
118 // The current clipping | 120 // The current clipping |
119 SkRegion clip_region_; | 121 SkRegion clip_region_; |
120 | 122 |
121 DISALLOW_COPY_AND_ASSIGN(BitmapPlatformDevice); | 123 DISALLOW_COPY_AND_ASSIGN(BitmapPlatformDevice); |
| 124 friend class ScopedPlatformPaint; |
122 }; | 125 }; |
123 | 126 |
124 } // namespace skia | 127 } // namespace skia |
125 | 128 |
126 #endif // SKIA_EXT_BITMAP_PLATFORM_DEVICE_CAIRO_H_ | 129 #endif // SKIA_EXT_BITMAP_PLATFORM_DEVICE_CAIRO_H_ |
OLD | NEW |