Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Side by Side Diff: skia/ext/vector_platform_device_emf_win.cc

Issue 6677142: rename getBitmapDC to beginPlatformPaint and add calls to endPlatformPaint (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « skia/ext/vector_platform_device_emf_win.h ('k') | ui/gfx/blit.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 SkSafeUnref(paint_no_effet.setPathEffect(NULL)); 187 SkSafeUnref(paint_no_effet.setPathEffect(NULL));
188 188
189 // Draw the calculated path. 189 // Draw the calculated path.
190 drawPath(draw, path_modified, paint_no_effet); 190 drawPath(draw, path_modified, paint_no_effet);
191 return; 191 return;
192 } 192 }
193 193
194 if (!ApplyPaint(paint)) { 194 if (!ApplyPaint(paint)) {
195 return; 195 return;
196 } 196 }
197 HDC dc = getBitmapDC(); 197 HDC dc = beginPlatformPaint();
198 if (!Rectangle(dc, SkScalarRound(rect.fLeft), 198 if (!Rectangle(dc, SkScalarRound(rect.fLeft),
199 SkScalarRound(rect.fTop), 199 SkScalarRound(rect.fTop),
200 SkScalarRound(rect.fRight), 200 SkScalarRound(rect.fRight),
201 SkScalarRound(rect.fBottom))) { 201 SkScalarRound(rect.fBottom))) {
202 SkASSERT(false); 202 SkASSERT(false);
203 } 203 }
204 endPlatformPaint();
204 Cleanup(); 205 Cleanup();
205 } 206 }
206 207
207 void VectorPlatformDeviceEmf::drawPath(const SkDraw& draw, 208 void VectorPlatformDeviceEmf::drawPath(const SkDraw& draw,
208 const SkPath& path, 209 const SkPath& path,
209 const SkPaint& paint, 210 const SkPaint& paint,
210 const SkMatrix* prePathMatrix, 211 const SkMatrix* prePathMatrix,
211 bool pathIsMutable) { 212 bool pathIsMutable) {
212 if (paint.getPathEffect()) { 213 if (paint.getPathEffect()) {
213 // Apply the path effect forehand. 214 // Apply the path effect forehand.
214 SkPath path_modified; 215 SkPath path_modified;
215 paint.getFillPath(path, &path_modified); 216 paint.getFillPath(path, &path_modified);
216 217
217 // Removes the path effect from the temporary SkPaint object. 218 // Removes the path effect from the temporary SkPaint object.
218 SkPaint paint_no_effet(paint); 219 SkPaint paint_no_effet(paint);
219 SkSafeUnref(paint_no_effet.setPathEffect(NULL)); 220 SkSafeUnref(paint_no_effet.setPathEffect(NULL));
220 221
221 // Draw the calculated path. 222 // Draw the calculated path.
222 drawPath(draw, path_modified, paint_no_effet); 223 drawPath(draw, path_modified, paint_no_effet);
223 return; 224 return;
224 } 225 }
225 226
226 if (!ApplyPaint(paint)) { 227 if (!ApplyPaint(paint)) {
227 return; 228 return;
228 } 229 }
229 HDC dc = getBitmapDC(); 230 HDC dc = beginPlatformPaint();
230 PlatformDevice::LoadPathToDC(dc, path); 231 PlatformDevice::LoadPathToDC(dc, path);
231 switch (paint.getStyle()) { 232 switch (paint.getStyle()) {
232 case SkPaint::kFill_Style: { 233 case SkPaint::kFill_Style: {
233 BOOL res = StrokeAndFillPath(dc); 234 BOOL res = StrokeAndFillPath(dc);
234 SkASSERT(res != 0); 235 SkASSERT(res != 0);
235 break; 236 break;
236 } 237 }
237 case SkPaint::kStroke_Style: { 238 case SkPaint::kStroke_Style: {
238 BOOL res = StrokePath(dc); 239 BOOL res = StrokePath(dc);
239 SkASSERT(res != 0); 240 SkASSERT(res != 0);
240 break; 241 break;
241 } 242 }
242 case SkPaint::kStrokeAndFill_Style: { 243 case SkPaint::kStrokeAndFill_Style: {
243 BOOL res = StrokeAndFillPath(dc); 244 BOOL res = StrokeAndFillPath(dc);
244 SkASSERT(res != 0); 245 SkASSERT(res != 0);
245 break; 246 break;
246 } 247 }
247 default: 248 default:
248 SkASSERT(false); 249 SkASSERT(false);
249 break; 250 break;
250 } 251 }
252 endPlatformPaint();
251 Cleanup(); 253 Cleanup();
252 } 254 }
253 255
254 void VectorPlatformDeviceEmf::drawBitmap(const SkDraw& draw, 256 void VectorPlatformDeviceEmf::drawBitmap(const SkDraw& draw,
255 const SkBitmap& bitmap, 257 const SkBitmap& bitmap,
256 const SkIRect* srcRectOrNull, 258 const SkIRect* srcRectOrNull,
257 const SkMatrix& matrix, 259 const SkMatrix& matrix,
258 const SkPaint& paint) { 260 const SkPaint& paint) {
259 // Load the temporary matrix. This is what will translate, rotate and resize 261 // Load the temporary matrix. This is what will translate, rotate and resize
260 // the bitmap. 262 // the bitmap.
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 BITMAPV4HEADER bitmap_header; 627 BITMAPV4HEADER bitmap_header;
626 memset(&bitmap_header, 0, sizeof(BITMAPV4HEADER)); 628 memset(&bitmap_header, 0, sizeof(BITMAPV4HEADER));
627 FillBitmapInfoHeader(src_size_x, src_size_y, 629 FillBitmapInfoHeader(src_size_x, src_size_y,
628 reinterpret_cast<BITMAPINFOHEADER*>(&bitmap_header)); 630 reinterpret_cast<BITMAPINFOHEADER*>(&bitmap_header));
629 bitmap_header.bV4Size = sizeof(BITMAPV4HEADER); 631 bitmap_header.bV4Size = sizeof(BITMAPV4HEADER);
630 bitmap_header.bV4RedMask = 0x00ff0000; 632 bitmap_header.bV4RedMask = 0x00ff0000;
631 bitmap_header.bV4GreenMask = 0x0000ff00; 633 bitmap_header.bV4GreenMask = 0x0000ff00;
632 bitmap_header.bV4BlueMask = 0x000000ff; 634 bitmap_header.bV4BlueMask = 0x000000ff;
633 bitmap_header.bV4AlphaMask = 0xff000000; 635 bitmap_header.bV4AlphaMask = 0xff000000;
634 636
635 HDC dc = getBitmapDC();
636 SkAutoLockPixels lock(bitmap); 637 SkAutoLockPixels lock(bitmap);
637 SkASSERT(bitmap.getConfig() == SkBitmap::kARGB_8888_Config); 638 SkASSERT(bitmap.getConfig() == SkBitmap::kARGB_8888_Config);
638 const uint32_t* pixels = static_cast<const uint32_t*>(bitmap.getPixels()); 639 const uint32_t* pixels = static_cast<const uint32_t*>(bitmap.getPixels());
639 if (pixels == NULL) { 640 if (pixels == NULL) {
640 SkASSERT(false); 641 SkASSERT(false);
641 return; 642 return;
642 } 643 }
643 644
644 if (!is_translucent) { 645 if (!is_translucent) {
645 int row_length = bitmap.rowBytesAsPixels(); 646 int row_length = bitmap.rowBytesAsPixels();
646 // There is no quick way to determine if an image is opaque. 647 // There is no quick way to determine if an image is opaque.
647 for (int y2 = 0; y2 < src_size_y; ++y2) { 648 for (int y2 = 0; y2 < src_size_y; ++y2) {
648 for (int x2 = 0; x2 < src_size_x; ++x2) { 649 for (int x2 = 0; x2 < src_size_x; ++x2) {
649 if (SkColorGetA(pixels[(y2 * row_length) + x2]) != 255) { 650 if (SkColorGetA(pixels[(y2 * row_length) + x2]) != 255) {
650 is_translucent = true; 651 is_translucent = true;
651 y2 = src_size_y; 652 y2 = src_size_y;
652 break; 653 break;
653 } 654 }
654 } 655 }
655 } 656 }
656 } 657 }
657 658
659 HDC dc = beginPlatformPaint();
658 BITMAPINFOHEADER hdr; 660 BITMAPINFOHEADER hdr;
659 FillBitmapInfoHeader(src_size_x, src_size_y, &hdr); 661 FillBitmapInfoHeader(src_size_x, src_size_y, &hdr);
660 if (is_translucent) { 662 if (is_translucent) {
661 // The image must be loaded as a bitmap inside a device context. 663 // The image must be loaded as a bitmap inside a device context.
662 HDC bitmap_dc = ::CreateCompatibleDC(dc); 664 HDC bitmap_dc = ::CreateCompatibleDC(dc);
663 void* bits = NULL; 665 void* bits = NULL;
664 HBITMAP hbitmap = ::CreateDIBSection( 666 HBITMAP hbitmap = ::CreateDIBSection(
665 bitmap_dc, reinterpret_cast<const BITMAPINFO*>(&hdr), 667 bitmap_dc, reinterpret_cast<const BITMAPINFO*>(&hdr),
666 DIB_RGB_COLORS, &bits, NULL, 0); 668 DIB_RGB_COLORS, &bits, NULL, 0);
667 669
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 x, y, // Destination origin. 715 x, y, // Destination origin.
714 src_size_x, src_size_y, 716 src_size_x, src_size_y,
715 0, 0, // Source origin. 717 0, 0, // Source origin.
716 src_size_x, src_size_y, // Source size. 718 src_size_x, src_size_y, // Source size.
717 pixels, 719 pixels,
718 reinterpret_cast<const BITMAPINFO*>(&hdr), 720 reinterpret_cast<const BITMAPINFO*>(&hdr),
719 DIB_RGB_COLORS, 721 DIB_RGB_COLORS,
720 SRCCOPY); 722 SRCCOPY);
721 SkASSERT(result); 723 SkASSERT(result);
722 } 724 }
725 endPlatformPaint();
723 Cleanup(); 726 Cleanup();
724 } 727 }
725 728
726 } // namespace skia 729 } // namespace skia
727 730
OLDNEW
« no previous file with comments | « skia/ext/vector_platform_device_emf_win.h ('k') | ui/gfx/blit.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698