summaryrefslogtreecommitdiffstats
path: root/printing
diff options
context:
space:
mode:
authorkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-01 05:10:44 +0000
committerkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-01 05:10:44 +0000
commit597516370da37bcd593e06f9369aa31c432013f9 (patch)
treecce497ef407158887bd72718908ca4354569911c /printing
parent6158d1fb8ac16fd41360581b3ad74587a05021bb (diff)
downloadchromium_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.cc29
-rw-r--r--printing/pdf_metafile_skia.h6
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);
};