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 #include <windows.h> | 5 #include <windows.h> |
6 | 6 |
7 #include "skia/ext/vector_platform_device_emf_win.h" | 7 #include "skia/ext/vector_platform_device_emf_win.h" |
8 | 8 |
9 #include "skia/ext/bitmap_platform_device.h" | 9 #include "skia/ext/bitmap_platform_device.h" |
10 #include "skia/ext/skia_utils_win.h" | 10 #include "skia/ext/skia_utils_win.h" |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 previous_pen_(NULL), | 108 previous_pen_(NULL), |
109 alpha_blend_used_(false) { | 109 alpha_blend_used_(false) { |
110 transform_.reset(); | 110 transform_.reset(); |
111 } | 111 } |
112 | 112 |
113 VectorPlatformDeviceEmf::~VectorPlatformDeviceEmf() { | 113 VectorPlatformDeviceEmf::~VectorPlatformDeviceEmf() { |
114 SkASSERT(previous_brush_ == NULL); | 114 SkASSERT(previous_brush_ == NULL); |
115 SkASSERT(previous_pen_ == NULL); | 115 SkASSERT(previous_pen_ == NULL); |
116 } | 116 } |
117 | 117 |
| 118 HDC VectorPlatformDeviceEmf::BeginPlatformPaint() { |
| 119 return hdc_; |
| 120 } |
118 | 121 |
119 void VectorPlatformDeviceEmf::drawPaint(const SkDraw& draw, | 122 void VectorPlatformDeviceEmf::drawPaint(const SkDraw& draw, |
120 const SkPaint& paint) { | 123 const SkPaint& paint) { |
121 // TODO(maruel): Bypass the current transformation matrix. | 124 // TODO(maruel): Bypass the current transformation matrix. |
122 SkRect rect; | 125 SkRect rect; |
123 rect.fLeft = 0; | 126 rect.fLeft = 0; |
124 rect.fTop = 0; | 127 rect.fTop = 0; |
125 rect.fRight = SkIntToScalar(width() + 1); | 128 rect.fRight = SkIntToScalar(width() + 1); |
126 rect.fBottom = SkIntToScalar(height() + 1); | 129 rect.fBottom = SkIntToScalar(height() + 1); |
127 drawRect(draw, rect, paint); | 130 drawRect(draw, rect, paint); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 SkSafeUnref(paint_no_effet.setPathEffect(NULL)); | 190 SkSafeUnref(paint_no_effet.setPathEffect(NULL)); |
188 | 191 |
189 // Draw the calculated path. | 192 // Draw the calculated path. |
190 drawPath(draw, path_modified, paint_no_effet); | 193 drawPath(draw, path_modified, paint_no_effet); |
191 return; | 194 return; |
192 } | 195 } |
193 | 196 |
194 if (!ApplyPaint(paint)) { | 197 if (!ApplyPaint(paint)) { |
195 return; | 198 return; |
196 } | 199 } |
197 HDC dc = beginPlatformPaint(); | 200 HDC dc = BeginPlatformPaint(); |
198 if (!Rectangle(dc, SkScalarRound(rect.fLeft), | 201 if (!Rectangle(dc, SkScalarRound(rect.fLeft), |
199 SkScalarRound(rect.fTop), | 202 SkScalarRound(rect.fTop), |
200 SkScalarRound(rect.fRight), | 203 SkScalarRound(rect.fRight), |
201 SkScalarRound(rect.fBottom))) { | 204 SkScalarRound(rect.fBottom))) { |
202 SkASSERT(false); | 205 SkASSERT(false); |
203 } | 206 } |
204 endPlatformPaint(); | 207 EndPlatformPaint(); |
205 Cleanup(); | 208 Cleanup(); |
206 } | 209 } |
207 | 210 |
208 void VectorPlatformDeviceEmf::drawPath(const SkDraw& draw, | 211 void VectorPlatformDeviceEmf::drawPath(const SkDraw& draw, |
209 const SkPath& path, | 212 const SkPath& path, |
210 const SkPaint& paint, | 213 const SkPaint& paint, |
211 const SkMatrix* prePathMatrix, | 214 const SkMatrix* prePathMatrix, |
212 bool pathIsMutable) { | 215 bool pathIsMutable) { |
213 if (paint.getPathEffect()) { | 216 if (paint.getPathEffect()) { |
214 // Apply the path effect forehand. | 217 // Apply the path effect forehand. |
215 SkPath path_modified; | 218 SkPath path_modified; |
216 paint.getFillPath(path, &path_modified); | 219 paint.getFillPath(path, &path_modified); |
217 | 220 |
218 // Removes the path effect from the temporary SkPaint object. | 221 // Removes the path effect from the temporary SkPaint object. |
219 SkPaint paint_no_effet(paint); | 222 SkPaint paint_no_effet(paint); |
220 SkSafeUnref(paint_no_effet.setPathEffect(NULL)); | 223 SkSafeUnref(paint_no_effet.setPathEffect(NULL)); |
221 | 224 |
222 // Draw the calculated path. | 225 // Draw the calculated path. |
223 drawPath(draw, path_modified, paint_no_effet); | 226 drawPath(draw, path_modified, paint_no_effet); |
224 return; | 227 return; |
225 } | 228 } |
226 | 229 |
227 if (!ApplyPaint(paint)) { | 230 if (!ApplyPaint(paint)) { |
228 return; | 231 return; |
229 } | 232 } |
230 HDC dc = beginPlatformPaint(); | 233 HDC dc = BeginPlatformPaint(); |
231 PlatformDevice::LoadPathToDC(dc, path); | 234 PlatformDevice::LoadPathToDC(dc, path); |
232 switch (paint.getStyle()) { | 235 switch (paint.getStyle()) { |
233 case SkPaint::kFill_Style: { | 236 case SkPaint::kFill_Style: { |
234 BOOL res = StrokeAndFillPath(dc); | 237 BOOL res = StrokeAndFillPath(dc); |
235 SkASSERT(res != 0); | 238 SkASSERT(res != 0); |
236 break; | 239 break; |
237 } | 240 } |
238 case SkPaint::kStroke_Style: { | 241 case SkPaint::kStroke_Style: { |
239 BOOL res = StrokePath(dc); | 242 BOOL res = StrokePath(dc); |
240 SkASSERT(res != 0); | 243 SkASSERT(res != 0); |
241 break; | 244 break; |
242 } | 245 } |
243 case SkPaint::kStrokeAndFill_Style: { | 246 case SkPaint::kStrokeAndFill_Style: { |
244 BOOL res = StrokeAndFillPath(dc); | 247 BOOL res = StrokeAndFillPath(dc); |
245 SkASSERT(res != 0); | 248 SkASSERT(res != 0); |
246 break; | 249 break; |
247 } | 250 } |
248 default: | 251 default: |
249 SkASSERT(false); | 252 SkASSERT(false); |
250 break; | 253 break; |
251 } | 254 } |
252 endPlatformPaint(); | 255 EndPlatformPaint(); |
253 Cleanup(); | 256 Cleanup(); |
254 } | 257 } |
255 | 258 |
256 void VectorPlatformDeviceEmf::drawBitmap(const SkDraw& draw, | 259 void VectorPlatformDeviceEmf::drawBitmap(const SkDraw& draw, |
257 const SkBitmap& bitmap, | 260 const SkBitmap& bitmap, |
258 const SkIRect* srcRectOrNull, | 261 const SkIRect* srcRectOrNull, |
259 const SkMatrix& matrix, | 262 const SkMatrix& matrix, |
260 const SkPaint& paint) { | 263 const SkPaint& paint) { |
261 // Load the temporary matrix. This is what will translate, rotate and resize | 264 // Load the temporary matrix. This is what will translate, rotate and resize |
262 // the bitmap. | 265 // the bitmap. |
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 for (int x2 = 0; x2 < src_size_x; ++x2) { | 652 for (int x2 = 0; x2 < src_size_x; ++x2) { |
650 if (SkColorGetA(pixels[(y2 * row_length) + x2]) != 255) { | 653 if (SkColorGetA(pixels[(y2 * row_length) + x2]) != 255) { |
651 is_translucent = true; | 654 is_translucent = true; |
652 y2 = src_size_y; | 655 y2 = src_size_y; |
653 break; | 656 break; |
654 } | 657 } |
655 } | 658 } |
656 } | 659 } |
657 } | 660 } |
658 | 661 |
659 HDC dc = beginPlatformPaint(); | 662 HDC dc = BeginPlatformPaint(); |
660 BITMAPINFOHEADER hdr; | 663 BITMAPINFOHEADER hdr; |
661 FillBitmapInfoHeader(src_size_x, src_size_y, &hdr); | 664 FillBitmapInfoHeader(src_size_x, src_size_y, &hdr); |
662 if (is_translucent) { | 665 if (is_translucent) { |
663 // The image must be loaded as a bitmap inside a device context. | 666 // The image must be loaded as a bitmap inside a device context. |
664 HDC bitmap_dc = ::CreateCompatibleDC(dc); | 667 HDC bitmap_dc = ::CreateCompatibleDC(dc); |
665 void* bits = NULL; | 668 void* bits = NULL; |
666 HBITMAP hbitmap = ::CreateDIBSection( | 669 HBITMAP hbitmap = ::CreateDIBSection( |
667 bitmap_dc, reinterpret_cast<const BITMAPINFO*>(&hdr), | 670 bitmap_dc, reinterpret_cast<const BITMAPINFO*>(&hdr), |
668 DIB_RGB_COLORS, &bits, NULL, 0); | 671 DIB_RGB_COLORS, &bits, NULL, 0); |
669 | 672 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
715 x, y, // Destination origin. | 718 x, y, // Destination origin. |
716 src_size_x, src_size_y, | 719 src_size_x, src_size_y, |
717 0, 0, // Source origin. | 720 0, 0, // Source origin. |
718 src_size_x, src_size_y, // Source size. | 721 src_size_x, src_size_y, // Source size. |
719 pixels, | 722 pixels, |
720 reinterpret_cast<const BITMAPINFO*>(&hdr), | 723 reinterpret_cast<const BITMAPINFO*>(&hdr), |
721 DIB_RGB_COLORS, | 724 DIB_RGB_COLORS, |
722 SRCCOPY); | 725 SRCCOPY); |
723 SkASSERT(result); | 726 SkASSERT(result); |
724 } | 727 } |
725 endPlatformPaint(); | 728 EndPlatformPaint(); |
726 Cleanup(); | 729 Cleanup(); |
727 } | 730 } |
728 | 731 |
729 } // namespace skia | 732 } // namespace skia |
730 | 733 |
OLD | NEW |