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

Side by Side Diff: printing/emf_win.cc

Issue 1863223002: Convert //printing to use std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
« no previous file with comments | « printing/emf_win.h ('k') | printing/emf_win_unittest.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "printing/emf_win.h" 5 #include "printing/emf_win.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory>
10
9 #include "base/files/file.h" 11 #include "base/files/file.h"
10 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
11 #include "base/logging.h" 13 #include "base/logging.h"
12 #include "base/macros.h" 14 #include "base/macros.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/win/scoped_gdi_object.h" 15 #include "base/win/scoped_gdi_object.h"
15 #include "base/win/scoped_hdc.h" 16 #include "base/win/scoped_hdc.h"
16 #include "base/win/scoped_select_object.h" 17 #include "base/win/scoped_select_object.h"
17 #include "skia/ext/skia_utils_win.h" 18 #include "skia/ext/skia_utils_win.h"
18 #include "third_party/skia/include/core/SkBitmap.h" 19 #include "third_party/skia/include/core/SkBitmap.h"
19 #include "ui/gfx/codec/jpeg_codec.h" 20 #include "ui/gfx/codec/jpeg_codec.h"
20 #include "ui/gfx/codec/png_codec.h" 21 #include "ui/gfx/codec/png_codec.h"
21 #include "ui/gfx/gdi_util.h" 22 #include "ui/gfx/gdi_util.h"
22 #include "ui/gfx/geometry/rect.h" 23 #include "ui/gfx/geometry/rect.h"
23 #include "ui/gfx/geometry/size.h" 24 #include "ui/gfx/geometry/size.h"
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 const EMRSTRETCHDIBITS * sdib_record = 354 const EMRSTRETCHDIBITS * sdib_record =
354 reinterpret_cast<const EMRSTRETCHDIBITS*>(record()); 355 reinterpret_cast<const EMRSTRETCHDIBITS*>(record());
355 const BYTE* record_start = reinterpret_cast<const BYTE *>(record()); 356 const BYTE* record_start = reinterpret_cast<const BYTE *>(record());
356 const BITMAPINFOHEADER *bmih = 357 const BITMAPINFOHEADER *bmih =
357 reinterpret_cast<const BITMAPINFOHEADER *>(record_start + 358 reinterpret_cast<const BITMAPINFOHEADER *>(record_start +
358 sdib_record->offBmiSrc); 359 sdib_record->offBmiSrc);
359 const BYTE* bits = record_start + sdib_record->offBitsSrc; 360 const BYTE* bits = record_start + sdib_record->offBitsSrc;
360 bool play_normally = true; 361 bool play_normally = true;
361 res = false; 362 res = false;
362 HDC hdc = context->hdc; 363 HDC hdc = context->hdc;
363 scoped_ptr<SkBitmap> bitmap; 364 std::unique_ptr<SkBitmap> bitmap;
364 if (bmih->biCompression == BI_JPEG) { 365 if (bmih->biCompression == BI_JPEG) {
365 if (!DIBFormatNativelySupported(hdc, CHECKJPEGFORMAT, bits, 366 if (!DIBFormatNativelySupported(hdc, CHECKJPEGFORMAT, bits,
366 bmih->biSizeImage)) { 367 bmih->biSizeImage)) {
367 play_normally = false; 368 play_normally = false;
368 bitmap.reset(gfx::JPEGCodec::Decode(bits, bmih->biSizeImage)); 369 bitmap.reset(gfx::JPEGCodec::Decode(bits, bmih->biSizeImage));
369 } 370 }
370 } else if (bmih->biCompression == BI_PNG) { 371 } else if (bmih->biCompression == BI_PNG) {
371 if (!DIBFormatNativelySupported(hdc, CHECKPNGFORMAT, bits, 372 if (!DIBFormatNativelySupported(hdc, CHECKPNGFORMAT, bits,
372 bmih->biSizeImage)) { 373 bmih->biSizeImage)) {
373 play_normally = false; 374 play_normally = false;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 bool Emf::IsAlphaBlendUsed() const { 518 bool Emf::IsAlphaBlendUsed() const {
518 bool result = false; 519 bool result = false;
519 ::EnumEnhMetaFile(NULL, 520 ::EnumEnhMetaFile(NULL,
520 emf(), 521 emf(),
521 &IsAlphaBlendUsedEnumProc, 522 &IsAlphaBlendUsedEnumProc,
522 &result, 523 &result,
523 NULL); 524 NULL);
524 return result; 525 return result;
525 } 526 }
526 527
527 scoped_ptr<Emf> Emf::RasterizeMetafile(int raster_area_in_pixels) const { 528 std::unique_ptr<Emf> Emf::RasterizeMetafile(int raster_area_in_pixels) const {
528 gfx::Rect page_bounds = GetPageBounds(1); 529 gfx::Rect page_bounds = GetPageBounds(1);
529 gfx::Size page_size(page_bounds.size()); 530 gfx::Size page_size(page_bounds.size());
530 if (page_size.GetArea() <= 0) { 531 if (page_size.GetArea() <= 0) {
531 NOTREACHED() << "Metafile is empty"; 532 NOTREACHED() << "Metafile is empty";
532 page_bounds = gfx::Rect(1, 1); 533 page_bounds = gfx::Rect(1, 1);
533 } 534 }
534 535
535 float scale = sqrt( 536 float scale = sqrt(
536 static_cast<float>(raster_area_in_pixels) / page_size.GetArea()); 537 static_cast<float>(raster_area_in_pixels) / page_size.GetArea());
537 page_size.set_width(std::max<int>(1, page_size.width() * scale)); 538 page_size.set_width(std::max<int>(1, page_size.width() * scale));
538 page_size.set_height(std::max<int>(1, page_size.height() * scale)); 539 page_size.set_height(std::max<int>(1, page_size.height() * scale));
539 540
540 541
541 RasterBitmap bitmap(page_size); 542 RasterBitmap bitmap(page_size);
542 543
543 gfx::Rect bitmap_rect(page_size); 544 gfx::Rect bitmap_rect(page_size);
544 RECT rect = bitmap_rect.ToRECT(); 545 RECT rect = bitmap_rect.ToRECT();
545 Playback(bitmap.context(), &rect); 546 Playback(bitmap.context(), &rect);
546 547
547 scoped_ptr<Emf> result(new Emf); 548 std::unique_ptr<Emf> result(new Emf);
548 result->Init(); 549 result->Init();
549 HDC hdc = result->context(); 550 HDC hdc = result->context();
550 DCHECK(hdc); 551 DCHECK(hdc);
551 skia::InitializeDC(hdc); 552 skia::InitializeDC(hdc);
552 553
553 // Params are ignored. 554 // Params are ignored.
554 result->StartPage(page_bounds.size(), page_bounds, 1); 555 result->StartPage(page_bounds.size(), page_bounds, 1);
555 556
556 ::ModifyWorldTransform(hdc, NULL, MWT_IDENTITY); 557 ::ModifyWorldTransform(hdc, NULL, MWT_IDENTITY);
557 XFORM xform = { 558 XFORM xform = {
558 static_cast<float>(page_bounds.width()) / bitmap_rect.width(), 559 static_cast<float>(page_bounds.width()) / bitmap_rect.width(),
559 0, 560 0,
560 0, 561 0,
561 static_cast<float>(page_bounds.height()) / bitmap_rect.height(), 562 static_cast<float>(page_bounds.height()) / bitmap_rect.height(),
562 static_cast<float>(page_bounds.x()), 563 static_cast<float>(page_bounds.x()),
563 static_cast<float>(page_bounds.y()), 564 static_cast<float>(page_bounds.y()),
564 }; 565 };
565 ::SetWorldTransform(hdc, &xform); 566 ::SetWorldTransform(hdc, &xform);
566 ::BitBlt(hdc, 0, 0, bitmap_rect.width(), bitmap_rect.height(), 567 ::BitBlt(hdc, 0, 0, bitmap_rect.width(), bitmap_rect.height(),
567 bitmap.context(), bitmap_rect.x(), bitmap_rect.y(), SRCCOPY); 568 bitmap.context(), bitmap_rect.x(), bitmap_rect.y(), SRCCOPY);
568 569
569 result->FinishPage(); 570 result->FinishPage();
570 result->FinishDocument(); 571 result->FinishDocument();
571 572
572 return result; 573 return result;
573 } 574 }
574 575
575 scoped_ptr<Emf> Emf::RasterizeAlphaBlend() const { 576 std::unique_ptr<Emf> Emf::RasterizeAlphaBlend() const {
576 gfx::Rect page_bounds = GetPageBounds(1); 577 gfx::Rect page_bounds = GetPageBounds(1);
577 if (page_bounds.size().GetArea() <= 0) { 578 if (page_bounds.size().GetArea() <= 0) {
578 NOTREACHED() << "Metafile is empty"; 579 NOTREACHED() << "Metafile is empty";
579 page_bounds = gfx::Rect(1, 1); 580 page_bounds = gfx::Rect(1, 1);
580 } 581 }
581 582
582 RasterBitmap bitmap(page_bounds.size()); 583 RasterBitmap bitmap(page_bounds.size());
583 584
584 // Map metafile page_bounds.x(), page_bounds.y() to bitmap 0, 0. 585 // Map metafile page_bounds.x(), page_bounds.y() to bitmap 0, 0.
585 XFORM xform = {1, 586 XFORM xform = {1,
586 0, 587 0,
587 0, 588 0,
588 1, 589 1,
589 static_cast<float>(-page_bounds.x()), 590 static_cast<float>(-page_bounds.x()),
590 static_cast<float>(-page_bounds.y())}; 591 static_cast<float>(-page_bounds.y())};
591 ::SetWorldTransform(bitmap.context(), &xform); 592 ::SetWorldTransform(bitmap.context(), &xform);
592 593
593 scoped_ptr<Emf> result(new Emf); 594 std::unique_ptr<Emf> result(new Emf);
594 result->Init(); 595 result->Init();
595 HDC hdc = result->context(); 596 HDC hdc = result->context();
596 DCHECK(hdc); 597 DCHECK(hdc);
597 skia::InitializeDC(hdc); 598 skia::InitializeDC(hdc);
598 599
599 HDC bitmap_dc = bitmap.context(); 600 HDC bitmap_dc = bitmap.context();
600 RECT rect = page_bounds.ToRECT(); 601 RECT rect = page_bounds.ToRECT();
601 ::EnumEnhMetaFile(hdc, emf(), &RasterizeAlphaBlendProc, &bitmap_dc, &rect); 602 ::EnumEnhMetaFile(hdc, emf(), &RasterizeAlphaBlendProc, &bitmap_dc, &rect);
602 603
603 result->FinishDocument(); 604 result->FinishDocument();
604 605
605 return result; 606 return result;
606 } 607 }
607 608
608 609
609 } // namespace printing 610 } // namespace printing
OLDNEW
« no previous file with comments | « printing/emf_win.h ('k') | printing/emf_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698