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

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: Removing dead code, using gfx::Size in PdfPsMetafile::StartPage 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..9296bc9ab5aae234b95979ddafc4f7591df88aef 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,49 +173,68 @@ 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);
-
- return true;
+gfx::Rect PdfPsMetafile::GetPageBounds(unsigned int page_number) const {
+ NOTIMPLEMENTED();
+ return gfx::Rect();
}
-bool PdfPsMetafile::SaveTo(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_);
- DCHECK(!data_.empty());
+PlatformContext* 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.);
- if (fd.fd < 0) {
- DLOG(ERROR) << "Invalid file descriptor!";
- return false;
- }
+ // 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;
- bool success = true;
- if (file_util::WriteFileDescriptor(fd.fd, data_.data(),
- GetDataSize()) < 0) {
- DLOG(ERROR) << "Failed to save file with fd " << fd.fd;
- success = false;
- }
+ // 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_;
+}
- if (fd.auto_close) {
- if (HANDLE_EINTR(close(fd.fd)) < 0) {
- DPLOG(WARNING) << "close";
- success = false;
- }
+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;
- return success;
+ raw_override_data_ = std::string(reinterpret_cast<const char*>(src_buffer),
+ src_buffer_size);
+
+ return true;
}
PdfPsMetafile* PdfPsMetafile::FromCairoContext(cairo_t* context) {

Powered by Google App Engine
This is Rietveld 408576698