Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Unified Diff: printing/pdf_ps_metafile_cairo.cc

Issue 6611032: Unifying NativeMetafile class interface (as much as possible) for Linux, Mac, Win (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixes for CHROMEOS Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: printing/pdf_ps_metafile_cairo.cc
diff --git a/printing/pdf_ps_metafile_cairo.cc b/printing/pdf_ps_metafile_cairo.cc
index 8ab925833408d82d2f7bbceeb1bbe136dab6fd5a..0d10ff7f0af4c8c5d2941b85b2e1f890d5b966e0 100644
--- a/printing/pdf_ps_metafile_cairo.cc
+++ b/printing/pdf_ps_metafile_cairo.cc
@@ -15,6 +15,8 @@
#include "base/logging.h"
#include "printing/units.h"
#include "skia/ext/vector_platform_device_linux.h"
+#include "ui/gfx/rect.h"
+#include "ui/gfx/size.h"
namespace {
@@ -127,50 +129,21 @@ bool PdfPsMetafile::Init(const void* src_buffer, uint32 src_buffer_size) {
return true;
}
-bool PdfPsMetafile::SetRawData(const void* src_buffer,
- uint32 src_buffer_size) {
- if (!context_) {
- // If Init has not already been called, just call Init()
- return Init(src_buffer, src_buffer_size);
- }
- // If a context has already been created, remember this data in
- // raw_override_data_
- if (src_buffer == NULL || src_buffer_size == 0)
- return false;
-
- raw_override_data_ = std::string(reinterpret_cast<const char*>(src_buffer),
- src_buffer_size);
+uint32 PdfPsMetafile::GetDataSize() const {
+ // We need to check at least these two members to ensure that either Init()
+ // has been called to initialize |data_|, or metafile has been closed.
+ DCHECK(!context_);
+ DCHECK(!data_.empty());
- return true;
+ return data_.size();
}
-cairo_t* PdfPsMetafile::StartPage(double width_in_points,
- double height_in_points,
- double margin_top_in_points,
- double margin_right_in_points,
- double margin_bottom_in_points,
- double margin_left_in_points) {
- DCHECK(IsSurfaceValid(surface_));
- DCHECK(IsContextValid(context_));
- // Passing this check implies page_surface_ is NULL, and current_page_ is
- // empty.
- DCHECK_GT(width_in_points, 0.);
- DCHECK_GT(height_in_points, 0.);
-
- // We build in extra room for the margins. The Cairo PDF backend will scale
- // the output to fit a page.
- double width =
- width_in_points + margin_left_in_points + margin_right_in_points;
- double height =
- height_in_points + margin_top_in_points + margin_bottom_in_points;
-
- // Don't let WebKit draw over the margins.
- cairo_surface_set_device_offset(surface_,
- margin_left_in_points,
- margin_top_in_points);
+bool PdfPsMetafile::GetData(void* dst_buffer, uint32 dst_buffer_size) const {
+ DCHECK(dst_buffer);
+ DCHECK_GT(dst_buffer_size, 0u);
+ memcpy(dst_buffer, data_.data(), dst_buffer_size);
- cairo_pdf_surface_set_size(surface_, width, height);
- return context_;
+ return true;
}
bool PdfPsMetafile::FinishPage() {
@@ -200,24 +173,72 @@ void PdfPsMetafile::Close() {
CleanUpSurface(&surface_);
}
-uint32 PdfPsMetafile::GetDataSize() const {
+bool PdfPsMetafile::SaveTo(const FilePath& file_path) const {
// We need to check at least these two members to ensure that either Init()
// has been called to initialize |data_|, or metafile has been closed.
DCHECK(!context_);
DCHECK(!data_.empty());
- return data_.size();
+ bool success = true;
+ if (file_util::WriteFile(file_path, data_.data(), GetDataSize()) < 0) {
+ DLOG(ERROR) << "Failed to save file " << file_path.value().c_str();
+ success = false;
+ }
+ return success;
}
-bool PdfPsMetafile::GetData(void* dst_buffer, uint32 dst_buffer_size) const {
- DCHECK(dst_buffer);
- DCHECK_GT(dst_buffer_size, 0u);
- memcpy(dst_buffer, data_.data(), dst_buffer_size);
+gfx::Rect PdfPsMetafile::GetPageBounds(unsigned int page_number) const {
+ NOTIMPLEMENTED();
+ return gfx::Rect();
+}
+
+cairo_t* PdfPsMetafile::StartPage(const gfx::Size& page_size,
+ double margin_top_in_points,
+ double margin_right_in_points,
+ double margin_bottom_in_points,
+ double margin_left_in_points) {
+ DCHECK(IsSurfaceValid(surface_));
+ DCHECK(IsContextValid(context_));
+ // Passing this check implies page_surface_ is NULL, and current_page_ is
+ // empty.
+ DCHECK_GT(page_size.width(), 0.);
+ DCHECK_GT(page_size.height(), 0.);
+
+ // We build in extra room for the margins. The Cairo PDF backend will scale
+ // the output to fit a page.
+ double width =
+ page_size.width() + margin_left_in_points + margin_right_in_points;
+ double height =
+ page_size.height() + margin_top_in_points + margin_bottom_in_points;
+
+ // Don't let WebKit draw over the margins.
+ cairo_surface_set_device_offset(surface_,
+ margin_left_in_points,
+ margin_top_in_points);
+
+ cairo_pdf_surface_set_size(surface_, width, height);
+ return context_;
+}
+
+bool PdfPsMetafile::SetRawData(const void* src_buffer,
+ uint32 src_buffer_size) {
+ if (!context_) {
+ // If Init has not already been called, just call Init()
+ return Init(src_buffer, src_buffer_size);
+ }
+ // If a context has already been created, remember this data in
+ // raw_override_data_
+ if (src_buffer == NULL || src_buffer_size == 0)
+ return false;
+
+ raw_override_data_ = std::string(reinterpret_cast<const char*>(src_buffer),
+ src_buffer_size);
return true;
}
-bool PdfPsMetafile::SaveTo(const base::FileDescriptor& fd) const {
+#if defined(OS_CHROMEOS)
+bool PdfPsMetafile::SaveToFD(const base::FileDescriptor& fd) const {
// We need to check at least these two members to ensure that either Init()
// has been called to initialize |data_|, or metafile has been closed.
DCHECK(!context_);
@@ -244,6 +265,7 @@ bool PdfPsMetafile::SaveTo(const base::FileDescriptor& fd) const {
return success;
}
+#endif // if defined(OS_CHROMEOS)
PdfPsMetafile* PdfPsMetafile::FromCairoContext(cairo_t* context) {
return reinterpret_cast<PdfPsMetafile*>(

Powered by Google App Engine
This is Rietveld 408576698