OLD | NEW |
---|---|
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 #include <time.h> | 5 #include <time.h> |
6 | 6 |
7 #include "SkMatrix.h" | 7 #include "SkMatrix.h" |
8 #include "SkRegion.h" | 8 #include "SkRegion.h" |
9 #include "SkUtils.h" | 9 #include "SkUtils.h" |
10 | 10 |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
123 } | 123 } |
124 | 124 |
125 void BitmapPlatformDeviceMac::BitmapPlatformDeviceMacData::LoadConfig() { | 125 void BitmapPlatformDeviceMac::BitmapPlatformDeviceMacData::LoadConfig() { |
126 if (!config_dirty_ || !bitmap_context_) | 126 if (!config_dirty_ || !bitmap_context_) |
127 return; // Nothing to do. | 127 return; // Nothing to do. |
128 config_dirty_ = false; | 128 config_dirty_ = false; |
129 | 129 |
130 // Transform. | 130 // Transform. |
131 SkMatrix t(transform_); | 131 SkMatrix t(transform_); |
132 LoadTransformToCGContext(bitmap_context_, t); | 132 LoadTransformToCGContext(bitmap_context_, t); |
133 | |
134 t.setTranslateX(-t.getTranslateX()); | 133 t.setTranslateX(-t.getTranslateX()); |
135 t.setTranslateY(-t.getTranslateY()); | 134 t.setTranslateY(-t.getTranslateY()); |
136 LoadClippingRegionToCGContext(bitmap_context_, clip_region_, t); | 135 LoadClippingRegionToCGContext(bitmap_context_, clip_region_, t); |
137 } | 136 } |
138 | 137 |
139 | 138 |
140 // We use this static factory function instead of the regular constructor so | 139 // We use this static factory function instead of the regular constructor so |
141 // that we can create the pixel data before calling the constructor. This is | 140 // that we can create the pixel data before calling the constructor. This is |
142 // required so that we can call the base class' constructor with the pixel | 141 // required so that we can call the base class' constructor with the pixel |
143 // data. | 142 // data. |
144 BitmapPlatformDeviceMac* BitmapPlatformDeviceMac::Create(CGContextRef context, | 143 BitmapPlatformDeviceMac* BitmapPlatformDeviceMac::Create(CGContextRef context, |
145 int width, | 144 int width, |
146 int height, | 145 int height, |
147 bool is_opaque) { | 146 bool is_opaque) { |
148 // TODO(playmobil): remove debug code. | |
149 //printf("BitmapPlatformDeviceMac::Create(%d,%d)\n", width, height); | |
150 // each pixel is 4 bytes (RGBA): | |
151 void* data = malloc(height * width * 4); | 147 void* data = malloc(height * width * 4); |
152 if (!data) return NULL; | 148 if (!data) return NULL; |
153 | 149 |
154 SkBitmap bitmap; | 150 SkBitmap bitmap; |
155 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); | 151 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); |
156 bitmap.setPixels(data); | 152 bitmap.setPixels(data); |
153 | |
154 // Note: The Windows implementation clears the Bitmap later on. | |
155 // This bares mentioning since removal of this line makes the | |
Amanda Walker
2008/10/01 21:32:01
"bares" should be "bears" :-)
| |
156 // unit tests only fail periodically (or when MallocPreScribble is set). | |
157 bitmap.eraseARGB(0, 0, 0, 0); | |
158 | |
157 bitmap.setIsOpaque(is_opaque); | 159 bitmap.setIsOpaque(is_opaque); |
158 | 160 |
159 if (is_opaque) { | 161 if (is_opaque) { |
160 #ifndef NDEBUG | 162 #ifndef NDEBUG |
161 // To aid in finding bugs, we set the background color to something | 163 // To aid in finding bugs, we set the background color to something |
162 // obviously wrong so it will be noticable when it is not cleared | 164 // obviously wrong so it will be noticable when it is not cleared |
163 bitmap.eraseARGB(255, 0, 255, 128); // bright bluish green | 165 bitmap.eraseARGB(255, 0, 255, 128); // bright bluish green |
164 #endif | 166 #endif |
165 } | 167 } |
166 | 168 |
167 CGColorSpaceRef color_space = | 169 CGColorSpaceRef color_space = |
168 CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); | 170 CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); |
169 // allocate a bitmap context with 4 components per pixel (RGBA): | 171 // allocate a bitmap context with 4 components per pixel (RGBA): |
170 CGContextRef bitmap_context = | 172 CGContextRef bitmap_context = |
171 CGBitmapContextCreate(data, width, height, 8, width*4, | 173 CGBitmapContextCreate(data, width, height, 8, width*4, |
172 color_space, kCGImageAlphaPremultipliedLast); | 174 color_space, kCGImageAlphaPremultipliedLast); |
173 // change the coordinate system to match WebCore's | 175 |
176 // Change the coordinate system to match WebCore's | |
174 CGContextTranslateCTM(bitmap_context, 0, height); | 177 CGContextTranslateCTM(bitmap_context, 0, height); |
175 CGContextScaleCTM(bitmap_context, 1.0, -1.0); | 178 CGContextScaleCTM(bitmap_context, 1.0, -1.0); |
176 CGColorSpaceRelease(color_space); | 179 CGColorSpaceRelease(color_space); |
177 | 180 |
178 // The device object will take ownership of the graphics context. | 181 // The device object will take ownership of the graphics context. |
179 return new BitmapPlatformDeviceMac( | 182 return new BitmapPlatformDeviceMac( |
180 new BitmapPlatformDeviceMacData(bitmap_context), bitmap); | 183 new BitmapPlatformDeviceMacData(bitmap_context), bitmap); |
181 } | 184 } |
182 | 185 |
183 // The device will own the bitmap, which corresponds to also owning the pixel | 186 // The device will own the bitmap, which corresponds to also owning the pixel |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
277 size_t offset = (i + bitmap_start_y) * row_words + bitmap_start_x; | 280 size_t offset = (i + bitmap_start_y) * row_words + bitmap_start_x; |
278 for (int j = 0; j < width; j++) { | 281 for (int j = 0; j < width; j++) { |
279 adjustor(data + offset + j); | 282 adjustor(data + offset + j); |
280 } | 283 } |
281 } | 284 } |
282 } | 285 } |
283 } | 286 } |
284 | 287 |
285 } // namespace gfx | 288 } // namespace gfx |
286 | 289 |
OLD | NEW |