| 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 "printing/emf_win.h" | 5 #include "printing/emf_win.h" |
| 6 | 6 |
| 7 #include "base/file_path.h" | 7 #include "base/file_path.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 ExtEscape(dc, escape, size, reinterpret_cast<LPCSTR>(bits), | 46 ExtEscape(dc, escape, size, reinterpret_cast<LPCSTR>(bits), |
| 47 sizeof(supported), reinterpret_cast<LPSTR>(&supported)); | 47 sizeof(supported), reinterpret_cast<LPSTR>(&supported)); |
| 48 } | 48 } |
| 49 return !!supported; | 49 return !!supported; |
| 50 } | 50 } |
| 51 | 51 |
| 52 Emf::Emf() : emf_(NULL), hdc_(NULL) { | 52 Emf::Emf() : emf_(NULL), hdc_(NULL) { |
| 53 } | 53 } |
| 54 | 54 |
| 55 Emf::~Emf() { | 55 Emf::~Emf() { |
| 56 CloseEmf(); | 56 DCHECK(!hdc_); |
| 57 if (emf_) |
| 58 DeleteEnhMetaFile(emf_); |
| 59 } |
| 60 |
| 61 bool Emf::InitToFile(const FilePath& metafile_path) { |
| 57 DCHECK(!emf_ && !hdc_); | 62 DCHECK(!emf_ && !hdc_); |
| 63 hdc_ = CreateEnhMetaFile(NULL, metafile_path.value().c_str(), NULL, NULL); |
| 64 DCHECK(hdc_); |
| 65 return hdc_ != NULL; |
| 66 } |
| 67 |
| 68 bool Emf::InitFromFile(const FilePath& metafile_path) { |
| 69 DCHECK(!emf_ && !hdc_); |
| 70 emf_ = GetEnhMetaFile(metafile_path.value().c_str()); |
| 71 DCHECK(emf_); |
| 72 return emf_ != NULL; |
| 73 } |
| 74 |
| 75 bool Emf::Init() { |
| 76 DCHECK(!emf_ && !hdc_); |
| 77 hdc_ = CreateEnhMetaFile(NULL, NULL, NULL, NULL); |
| 78 DCHECK(hdc_); |
| 79 return hdc_ != NULL; |
| 58 } | 80 } |
| 59 | 81 |
| 60 bool Emf::InitFromData(const void* src_buffer, uint32 src_buffer_size) { | 82 bool Emf::InitFromData(const void* src_buffer, uint32 src_buffer_size) { |
| 61 DCHECK(!emf_ && !hdc_); | 83 DCHECK(!emf_ && !hdc_); |
| 62 emf_ = SetEnhMetaFileBits(src_buffer_size, | 84 emf_ = SetEnhMetaFileBits(src_buffer_size, |
| 63 reinterpret_cast<const BYTE*>(src_buffer)); | 85 reinterpret_cast<const BYTE*>(src_buffer)); |
| 64 return emf_ != NULL; | 86 return emf_ != NULL; |
| 65 } | 87 } |
| 66 | 88 |
| 67 bool Emf::CreateDc(HDC sibling, const RECT* rect) { | |
| 68 DCHECK(!emf_ && !hdc_); | |
| 69 hdc_ = CreateEnhMetaFile(sibling, NULL, rect, NULL); | |
| 70 DCHECK(hdc_); | |
| 71 return hdc_ != NULL; | |
| 72 } | |
| 73 | |
| 74 bool Emf::CreateFileBackedDc(HDC sibling, const RECT* rect, | |
| 75 const FilePath& path) { | |
| 76 DCHECK(!emf_ && !hdc_); | |
| 77 DCHECK(!path.empty()); | |
| 78 hdc_ = CreateEnhMetaFile(sibling, path.value().c_str(), rect, NULL); | |
| 79 DCHECK(hdc_); | |
| 80 return hdc_ != NULL; | |
| 81 } | |
| 82 | |
| 83 bool Emf::CreateFromFile(const FilePath& metafile_path) { | |
| 84 DCHECK(!emf_ && !hdc_); | |
| 85 emf_ = GetEnhMetaFile(metafile_path.value().c_str()); | |
| 86 DCHECK(emf_); | |
| 87 return emf_ != NULL; | |
| 88 } | |
| 89 | |
| 90 | |
| 91 bool Emf::FinishDocument() { | 89 bool Emf::FinishDocument() { |
| 92 DCHECK(!emf_ && hdc_); | 90 DCHECK(!emf_ && hdc_); |
| 93 emf_ = CloseEnhMetaFile(hdc_); | 91 emf_ = CloseEnhMetaFile(hdc_); |
| 94 DCHECK(emf_); | 92 DCHECK(emf_); |
| 95 hdc_ = NULL; | 93 hdc_ = NULL; |
| 96 return emf_ != NULL; | 94 return emf_ != NULL; |
| 97 } | 95 } |
| 98 | 96 |
| 99 void Emf::CloseEmf() { | |
| 100 DCHECK(!hdc_); | |
| 101 if (emf_) { | |
| 102 DeleteEnhMetaFile(emf_); | |
| 103 emf_ = NULL; | |
| 104 } | |
| 105 } | |
| 106 | |
| 107 bool Emf::Playback(HDC hdc, const RECT* rect) const { | 97 bool Emf::Playback(HDC hdc, const RECT* rect) const { |
| 108 DCHECK(emf_ && !hdc_); | 98 DCHECK(emf_ && !hdc_); |
| 109 RECT bounds; | 99 RECT bounds; |
| 110 if (!rect) { | 100 if (!rect) { |
| 111 // Get the natural bounds of the EMF buffer. | 101 // Get the natural bounds of the EMF buffer. |
| 112 bounds = GetPageBounds(1).ToRECT(); | 102 bounds = GetPageBounds(1).ToRECT(); |
| 113 rect = &bounds; | 103 rect = &bounds; |
| 114 } | 104 } |
| 115 return PlayEnhMetaFile(hdc, emf_, rect) != 0; | 105 return PlayEnhMetaFile(hdc, emf_, rect) != 0; |
| 116 } | 106 } |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 } else { | 474 } else { |
| 485 DCHECK_EQ(emf.context_.handle_table, handle_table); | 475 DCHECK_EQ(emf.context_.handle_table, handle_table); |
| 486 DCHECK_EQ(emf.context_.objects_count, objects_count); | 476 DCHECK_EQ(emf.context_.objects_count, objects_count); |
| 487 DCHECK_EQ(emf.context_.hdc, hdc); | 477 DCHECK_EQ(emf.context_.hdc, hdc); |
| 488 } | 478 } |
| 489 emf.items_.push_back(Record(&emf.context_, record)); | 479 emf.items_.push_back(Record(&emf.context_, record)); |
| 490 return 1; | 480 return 1; |
| 491 } | 481 } |
| 492 | 482 |
| 493 } // namespace printing | 483 } // namespace printing |
| OLD | NEW |