diff options
author | kmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-01 05:10:44 +0000 |
---|---|---|
committer | kmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-01 05:10:44 +0000 |
commit | 597516370da37bcd593e06f9369aa31c432013f9 (patch) | |
tree | cce497ef407158887bd72718908ca4354569911c /printing | |
parent | 6158d1fb8ac16fd41360581b3ad74587a05021bb (diff) | |
download | chromium_src-597516370da37bcd593e06f9369aa31c432013f9.zip chromium_src-597516370da37bcd593e06f9369aa31c432013f9.tar.gz chromium_src-597516370da37bcd593e06f9369aa31c432013f9.tar.bz2 |
PrintPreview: Implement GetMetafileForCurrentPage() function in PdfMetafileSkia.
This function is required for print preview pipeline sequence.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/7274026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@91269 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing')
-rw-r--r-- | printing/pdf_metafile_skia.cc | 29 | ||||
-rw-r--r-- | printing/pdf_metafile_skia.h | 6 |
2 files changed, 31 insertions, 4 deletions
diff --git a/printing/pdf_metafile_skia.cc b/printing/pdf_metafile_skia.cc index 69cae9e..d265ca0 100644 --- a/printing/pdf_metafile_skia.cc +++ b/printing/pdf_metafile_skia.cc @@ -51,7 +51,8 @@ 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); + DCHECK (!page_outstanding_); + page_outstanding_ = true; // Adjust for the margins and apply the scale factor. SkMatrix transform; @@ -84,7 +85,7 @@ bool PdfMetafileSkia::FinishPage() { DCHECK(data_->current_page_.get()); data_->pdf_doc_.appendPage(data_->current_page_); - data_->current_page_ = NULL; + page_outstanding_ = false; return true; } @@ -93,9 +94,10 @@ bool PdfMetafileSkia::FinishDocument() { if (data_->pdf_stream_.getOffset()) return true; - if (data_->current_page_.get()) + if (page_outstanding_) FinishPage(); + data_->current_page_ = NULL; base::hash_set<SkFontID> font_set; const SkTDArray<SkPDFPage*>& pages = data_->pdf_doc_.getPages(); @@ -234,6 +236,25 @@ bool PdfMetafileSkia::SaveToFD(const base::FileDescriptor& fd) const { PdfMetafileSkia::PdfMetafileSkia() : data_(new PdfMetafileSkiaData), - draft_(false) {} + draft_(false), + page_outstanding_(false) {} + +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 diff --git a/printing/pdf_metafile_skia.h b/printing/pdf_metafile_skia.h index c28cd08..5d6d448 100644 --- a/printing/pdf_metafile_skia.h +++ b/printing/pdf_metafile_skia.h @@ -68,12 +68,18 @@ class PdfMetafileSkia : public Metafile { virtual bool SaveToFD(const base::FileDescriptor& fd) const; #endif // if defined(OS_CHROMEOS) + // Return a new metafile containing just the current page in draft mode. + PdfMetafileSkia* GetMetafileForCurrentPage(); + private: scoped_ptr<PdfMetafileSkiaData> data_; // True when a draft version of metafile is requested. mutable bool draft_; + // True when finish page is outstanding for current page. + bool page_outstanding_; + DISALLOW_COPY_AND_ASSIGN(PdfMetafileSkia); }; |