Index: printing/emf_win.cc |
diff --git a/printing/emf_win.cc b/printing/emf_win.cc |
index f2b22fa13f8b865b4c01924254fade83077b0a1b..a16791ceb754288bc5ab5cc0ea2dc26eee5d3abe 100644 |
--- a/printing/emf_win.cc |
+++ b/printing/emf_win.cc |
@@ -50,7 +50,7 @@ Emf::Emf() : emf_(NULL), hdc_(NULL) { |
} |
Emf::~Emf() { |
- CloseEmf(); |
+ Close(); |
DCHECK(!emf_ && !hdc_); |
} |
@@ -61,6 +61,89 @@ bool Emf::Init(const void* src_buffer, uint32 src_buffer_size) { |
return emf_ != NULL; |
} |
vandebo (ex-Chrome)
2011/03/12 01:21:06
I don't remember if I specifically said to reorder
dpapad
2011/03/14 18:02:38
Done.
|
+uint32 Emf::GetDataSize() const { |
+ DCHECK(emf_ && !hdc_); |
+ return GetEnhMetaFileBits(emf_, 0, NULL); |
+} |
+ |
+bool Emf::GetData(void* buffer, uint32 size) const { |
+ DCHECK(emf_ && !hdc_); |
+ DCHECK(buffer && size); |
+ uint32 size2 = |
+ GetEnhMetaFileBits(emf_, size, reinterpret_cast<BYTE*>(buffer)); |
+ DCHECK(size2 == size); |
+ return size2 == size && size2 != 0; |
+} |
+ |
+bool Emf::FinishPage() { |
+ DCHECK(hdc_); |
+ if (!hdc_) |
+ return false; |
+ PageBreakRecord record(PageBreakRecord::END_PAGE); |
+ return !!GdiComment(hdc_, sizeof(record), |
+ reinterpret_cast<const BYTE *>(&record)); |
+} |
+ |
+void Emf::Close() { |
+ DCHECK(!hdc_); |
+ if (emf_) { |
+ DeleteEnhMetaFile(emf_); |
+ emf_ = NULL; |
+ } |
+} |
+ |
+bool Emf::SaveTo(const FilePath& file_path) const { |
+ HANDLE file = CreateFile(file_path.value().c_str(), GENERIC_WRITE, |
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, |
+ CREATE_ALWAYS, 0, NULL); |
+ if (file == INVALID_HANDLE_VALUE) |
+ return false; |
+ |
+ bool success = false; |
+ std::vector<uint8> buffer; |
+ if (GetData(&buffer)) { |
+ DWORD written = 0; |
+ if (WriteFile(file, &*buffer.begin(), static_cast<DWORD>(buffer.size()), |
+ &written, NULL) && |
+ written == buffer.size()) { |
+ success = true; |
+ } |
+ } |
+ CloseHandle(file); |
+ return success; |
+} |
+ |
+gfx::Rect Emf::GetPageBounds(unsigned int page_number) const { |
+ DCHECK(emf_ && !hdc_); |
+ ENHMETAHEADER header; |
+ if (GetEnhMetaFileHeader(emf_, sizeof(header), &header) != sizeof(header)) { |
+ NOTREACHED(); |
+ return gfx::Rect(); |
+ } |
+ if (header.rclBounds.left == 0 && |
+ header.rclBounds.top == 0 && |
+ header.rclBounds.right == -1 && |
+ header.rclBounds.bottom == -1) { |
+ // A freshly created EMF buffer that has no drawing operation has invalid |
+ // bounds. Instead of having an (0,0) size, it has a (-1,-1) size. Detect |
+ // this special case and returns an empty Rect instead of an invalid one. |
+ return gfx::Rect(); |
+ } |
+ return gfx::Rect(header.rclBounds.left, |
+ header.rclBounds.top, |
+ header.rclBounds.right - header.rclBounds.left, |
+ header.rclBounds.bottom - header.rclBounds.top); |
+} |
+ |
+bool Emf::StartPage() { |
+ DCHECK(hdc_); |
+ if (!hdc_) |
+ return false; |
+ PageBreakRecord record(PageBreakRecord::START_PAGE); |
+ return !!GdiComment(hdc_, sizeof(record), |
+ reinterpret_cast<const BYTE *>(&record)); |
+} |
+ |
bool Emf::CreateDc(HDC sibling, const RECT* rect) { |
DCHECK(!emf_ && !hdc_); |
hdc_ = CreateEnhMetaFile(sibling, NULL, rect, NULL); |
@@ -68,7 +151,8 @@ bool Emf::CreateDc(HDC sibling, const RECT* rect) { |
return hdc_ != NULL; |
} |
-bool Emf::CreateFileBackedDc(HDC sibling, const RECT* rect, |
+bool Emf::CreateFileBackedDc(HDC sibling, |
+ const RECT* rect, |
const FilePath& path) { |
DCHECK(!emf_ && !hdc_); |
DCHECK(!path.empty()); |
@@ -93,20 +177,12 @@ bool Emf::CloseDc() { |
return emf_ != NULL; |
} |
-void Emf::CloseEmf() { |
- DCHECK(!hdc_); |
- if (emf_) { |
- DeleteEnhMetaFile(emf_); |
- emf_ = NULL; |
- } |
-} |
- |
bool Emf::Playback(HDC hdc, const RECT* rect) const { |
DCHECK(emf_ && !hdc_); |
RECT bounds; |
if (!rect) { |
// Get the natural bounds of the EMF buffer. |
- bounds = GetBounds().ToRECT(); |
+ bounds = GetPageBounds(1).ToRECT(); |
rect = &bounds; |
} |
return PlayEnhMetaFile(hdc, emf_, rect) != 0; |
@@ -123,43 +199,7 @@ bool Emf::SafePlayback(HDC context) const { |
emf_, |
&Emf::SafePlaybackProc, |
reinterpret_cast<void*>(&base_matrix), |
- &GetBounds().ToRECT()) != 0; |
-} |
- |
-gfx::Rect Emf::GetBounds() const { |
- DCHECK(emf_ && !hdc_); |
- ENHMETAHEADER header; |
- if (GetEnhMetaFileHeader(emf_, sizeof(header), &header) != sizeof(header)) { |
- NOTREACHED(); |
- return gfx::Rect(); |
- } |
- if (header.rclBounds.left == 0 && |
- header.rclBounds.top == 0 && |
- header.rclBounds.right == -1 && |
- header.rclBounds.bottom == -1) { |
- // A freshly created EMF buffer that has no drawing operation has invalid |
- // bounds. Instead of having an (0,0) size, it has a (-1,-1) size. Detect |
- // this special case and returns an empty Rect instead of an invalid one. |
- return gfx::Rect(); |
- } |
- return gfx::Rect(header.rclBounds.left, |
- header.rclBounds.top, |
- header.rclBounds.right - header.rclBounds.left, |
- header.rclBounds.bottom - header.rclBounds.top); |
-} |
- |
-uint32 Emf::GetDataSize() const { |
- DCHECK(emf_ && !hdc_); |
- return GetEnhMetaFileBits(emf_, 0, NULL); |
-} |
- |
-bool Emf::GetData(void* buffer, uint32 size) const { |
- DCHECK(emf_ && !hdc_); |
- DCHECK(buffer && size); |
- uint32 size2 = |
- GetEnhMetaFileBits(emf_, size, reinterpret_cast<BYTE*>(buffer)); |
- DCHECK(size2 == size); |
- return size2 == size && size2 != 0; |
+ &GetPageBounds(1).ToRECT()) != 0; |
} |
bool Emf::GetData(std::vector<uint8>* buffer) const { |
@@ -173,27 +213,6 @@ bool Emf::GetData(std::vector<uint8>* buffer) const { |
return true; |
} |
-bool Emf::SaveTo(const std::wstring& filename) const { |
- HANDLE file = CreateFile(filename.c_str(), GENERIC_WRITE, |
- FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, |
- CREATE_ALWAYS, 0, NULL); |
- if (file == INVALID_HANDLE_VALUE) |
- return false; |
- |
- bool success = false; |
- std::vector<uint8> buffer; |
- if (GetData(&buffer)) { |
- DWORD written = 0; |
- if (WriteFile(file, &*buffer.begin(), static_cast<DWORD>(buffer.size()), |
- &written, NULL) && |
- written == buffer.size()) { |
- success = true; |
- } |
- } |
- CloseHandle(file); |
- return success; |
-} |
- |
int CALLBACK Emf::SafePlaybackProc(HDC hdc, |
HANDLETABLE* handle_table, |
const ENHMETARECORD* record, |
@@ -409,25 +428,6 @@ bool Emf::Record::SafePlayback(const XFORM* base_matrix) const { |
return res; |
} |
-bool Emf::StartPage() { |
- DCHECK(hdc_); |
- if (!hdc_) |
- return false; |
- PageBreakRecord record(PageBreakRecord::START_PAGE); |
- return !!GdiComment(hdc_, sizeof(record), |
- reinterpret_cast<const BYTE *>(&record)); |
-} |
- |
-bool Emf::EndPage() { |
- DCHECK(hdc_); |
- if (!hdc_) |
- return false; |
- PageBreakRecord record(PageBreakRecord::END_PAGE); |
- return !!GdiComment(hdc_, sizeof(record), |
- reinterpret_cast<const BYTE *>(&record)); |
-} |
- |
- |
Emf::Enumerator::Enumerator(const Emf& emf, HDC context, const RECT* rect) { |
context_.handle_table = NULL; |
context_.objects_count = 0; |