Chromium Code Reviews| Index: printing/pdf_metafile_skia.cc |
| diff --git a/printing/pdf_metafile_skia.cc b/printing/pdf_metafile_skia.cc |
| index 0ef33f27955ff36ded7ee81cf9774ffd44187c57..2b4aa3d973da65dd5e3a55bd7d79e6653a270995 100644 |
| --- a/printing/pdf_metafile_skia.cc |
| +++ b/printing/pdf_metafile_skia.cc |
| @@ -51,7 +51,9 @@ bool PdfMetafileSkia::InitFromData(const void* src_buffer, |
| SkDevice* PdfMetafileSkia::StartPageForVectorCanvas( |
| const gfx::Size& page_size, const gfx::Rect& content_area, |
| const float& scale_factor) { |
| - DCHECK(data_->current_page_.get() == NULL); |
| + if (did_finish_page_) |
|
vandebo (ex-Chrome)
2011/06/29 20:23:45
I think this should just be DCHECK(did_finish_page
kmadhusu
2011/06/30 06:10:55
Renamed the variable to outstanding_finish_page_.
|
| + data_->current_page_ = NULL; |
| + did_finish_page_ = false; |
| // Adjust for the margins and apply the scale factor. |
| SkMatrix transform; |
| @@ -84,7 +86,7 @@ bool PdfMetafileSkia::FinishPage() { |
| DCHECK(data_->current_page_.get()); |
| data_->pdf_doc_.appendPage(data_->current_page_); |
| - data_->current_page_ = NULL; |
| + did_finish_page_ = true; |
| return true; |
| } |
| @@ -93,9 +95,10 @@ bool PdfMetafileSkia::FinishDocument() { |
| if (data_->pdf_stream_.getOffset()) |
| return true; |
| - if (data_->current_page_.get()) |
| + if (!did_finish_page_ && data_->current_page_.get()) |
|
vandebo (ex-Chrome)
2011/06/29 20:23:45
Don't (shouldn't) need to current_page_.get() chec
kmadhusu
2011/06/30 06:10:55
Done.
|
| FinishPage(); |
| + data_->current_page_ = NULL; |
| base::hash_set<SkFontID> font_set; |
| const SkTDArray<SkPDFPage*>& pages = data_->pdf_doc_.getPages(); |
| @@ -234,9 +237,29 @@ bool PdfMetafileSkia::SaveToFD(const base::FileDescriptor& fd) const { |
| PdfMetafileSkia::PdfMetafileSkia() |
| : data_(new PdfMetafileSkiaData), |
| - draft_(false) {} |
| + draft_(false), |
| + did_finish_page_(false) {} |
| void PdfMetafileSkia::set_draft(bool draft) const { |
| draft_ = draft; |
| } |
| + |
| +PdfMetafileSkia* PdfMetafileSkia::GetMetafileForCurrentPage() { |
| + SkPDFDocument pdf_doc; |
| + SkDynamicMemoryWStream pdf_stream; |
| + if (!pdf_doc.appendPage(data_->current_page_)) |
| + return NULL; |
| + |
| + if (!pdf_doc.emitPDF(&pdf_stream)) |
| + return NULL; |
| + |
| + SkAutoDataUnref data(pdf_stream.copyToData()); |
| + if (data.size() == 0) |
| + return NULL; |
| + |
| + PdfMetafileSkia* metafile = new printing::PdfMetafileSkia; |
| + metafile->InitFromData(data.bytes(),data.size()); |
| + return metafile; |
| +} |
| + |
| } // namespace printing |