summaryrefslogtreecommitdiffstats
path: root/printing/pdf_metafile_mac.cc
diff options
context:
space:
mode:
authorvandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-04 23:15:06 +0000
committervandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-04 23:15:06 +0000
commit9b61753963f16cc6cf48f388a2c24e064add4cbb (patch)
tree6fbae6593eb9465c320a5f35ebdaa24612818bb0 /printing/pdf_metafile_mac.cc
parent22796b1a1791a0d1e84bf2d0eeba82d08d0687c1 (diff)
downloadchromium_src-9b61753963f16cc6cf48f388a2c24e064add4cbb.zip
chromium_src-9b61753963f16cc6cf48f388a2c24e064add4cbb.tar.gz
chromium_src-9b61753963f16cc6cf48f388a2c24e064add4cbb.tar.bz2
Rename some printing classes and minor cleanups.
Rename: PdfPsMetafile -> PdfMetafileCairo PdfMetafile -> PdfMetafileCg (Mac) VectorPlatformDevice -> VectorPlatformDeviceEmf/Cairo (Windows/Linux varients) This is in preparation for VectorPlatformDeviceSkia. BUG=NONE TEST=NONE Review URL: http://codereview.chromium.org/6783036 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80390 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing/pdf_metafile_mac.cc')
-rw-r--r--printing/pdf_metafile_mac.cc254
1 files changed, 0 insertions, 254 deletions
diff --git a/printing/pdf_metafile_mac.cc b/printing/pdf_metafile_mac.cc
deleted file mode 100644
index 913f6aa..0000000
--- a/printing/pdf_metafile_mac.cc
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "printing/pdf_metafile_mac.h"
-
-#include "base/file_path.h"
-#include "base/logging.h"
-#include "base/mac/scoped_cftyperef.h"
-#include "base/sys_string_conversions.h"
-#include "ui/gfx/rect.h"
-#include "ui/gfx/size.h"
-
-using base::mac::ScopedCFTypeRef;
-
-namespace printing {
-
-PdfMetafile::PdfMetafile()
- : page_is_open_(false) {
-}
-
-PdfMetafile::~PdfMetafile() {}
-
-bool PdfMetafile::Init() {
- // Ensure that Init hasn't already been called.
- DCHECK(!context_.get());
- DCHECK(!pdf_data_.get());
-
- pdf_data_.reset(CFDataCreateMutable(kCFAllocatorDefault, 0));
- if (!pdf_data_.get()) {
- LOG(ERROR) << "Failed to create pdf data for metafile";
- return false;
- }
- ScopedCFTypeRef<CGDataConsumerRef> pdf_consumer(
- CGDataConsumerCreateWithCFData(pdf_data_));
- if (!pdf_consumer.get()) {
- LOG(ERROR) << "Failed to create data consumer for metafile";
- pdf_data_.reset(NULL);
- return false;
- }
- context_.reset(CGPDFContextCreate(pdf_consumer, NULL, NULL));
- if (!context_.get()) {
- LOG(ERROR) << "Failed to create pdf context for metafile";
- pdf_data_.reset(NULL);
- }
-
- return true;
-}
-
-bool PdfMetafile::InitFromData(const void* src_buffer, uint32 src_buffer_size) {
- DCHECK(!context_.get());
- DCHECK(!pdf_data_.get());
-
- if (!src_buffer || src_buffer_size == 0) {
- return false;
- }
-
- pdf_data_.reset(CFDataCreateMutable(kCFAllocatorDefault, src_buffer_size));
- CFDataAppendBytes(pdf_data_, static_cast<const UInt8*>(src_buffer),
- src_buffer_size);
-
- return true;
-}
-
-skia::PlatformDevice* PdfMetafile::StartPageForVectorCanvas(
- const gfx::Size& page_size, const gfx::Point& content_origin,
- const float& scale_factor) {
- NOTIMPLEMENTED();
- return NULL;
-}
-
-bool PdfMetafile::StartPage(const gfx::Size& page_size,
- const gfx::Point& content_origin,
- const float& scale_factor) {
- DCHECK(context_.get());
- DCHECK(!page_is_open_);
-
- double height = page_size.height();
- double width = page_size.width();
-
- CGRect bounds = CGRectMake(0, 0, width, height);
- CGContextBeginPage(context_, &bounds);
- page_is_open_ = true;
- CGContextSaveGState(context_);
-
- // Flip the context.
- CGContextTranslateCTM(context_, 0, height);
- CGContextScaleCTM(context_, scale_factor, -scale_factor);
-
- // Move the context to origin.
- CGContextTranslateCTM(context_, content_origin.x(), content_origin.y());
-
- return context_.get() != NULL;
-}
-
-bool PdfMetafile::FinishPage() {
- DCHECK(context_.get());
- DCHECK(page_is_open_);
-
- CGContextRestoreGState(context_);
- CGContextEndPage(context_);
- page_is_open_ = false;
- return true;
-}
-
-bool PdfMetafile::FinishDocument() {
- DCHECK(context_.get());
- DCHECK(!page_is_open_);
-
-#ifndef NDEBUG
- // Check that the context will be torn down properly; if it's not, pdf_data_
- // will be incomplete and generate invalid PDF files/documents.
- if (context_.get()) {
- CFIndex extra_retain_count = CFGetRetainCount(context_.get()) - 1;
- if (extra_retain_count > 0) {
- LOG(ERROR) << "Metafile context has " << extra_retain_count
- << " extra retain(s) on Close";
- }
- }
-#endif
- CGPDFContextClose(context_.get());
- context_.reset(NULL);
- return true;
-}
-
-bool PdfMetafile::RenderPage(unsigned int page_number, CGContextRef context,
- const CGRect rect, bool shrink_to_fit,
- bool stretch_to_fit,
- bool center_horizontally,
- bool center_vertically) const {
- CGPDFDocumentRef pdf_doc = GetPDFDocument();
- if (!pdf_doc) {
- LOG(ERROR) << "Unable to create PDF document from data";
- return false;
- }
- CGPDFPageRef pdf_page = CGPDFDocumentGetPage(pdf_doc, page_number);
- CGRect source_rect = CGPDFPageGetBoxRect(pdf_page, kCGPDFMediaBox);
- float scaling_factor = 1.0;
- // See if we need to scale the output.
- bool scaling_needed =
- (shrink_to_fit && ((source_rect.size.width > rect.size.width) ||
- (source_rect.size.height > rect.size.height))) ||
- (stretch_to_fit && (source_rect.size.width < rect.size.width) &&
- (source_rect.size.height < rect.size.height));
- if (scaling_needed) {
- float x_scaling_factor = rect.size.width / source_rect.size.width;
- float y_scaling_factor = rect.size.height / source_rect.size.height;
- if (x_scaling_factor > y_scaling_factor) {
- scaling_factor = y_scaling_factor;
- } else {
- scaling_factor = x_scaling_factor;
- }
- }
- // Some PDFs have a non-zero origin. Need to take that into account.
- float x_offset = rect.origin.x - (source_rect.origin.x * scaling_factor);
- float y_offset = rect.origin.y - (source_rect.origin.y * scaling_factor);
-
- if (center_vertically) {
- x_offset += (rect.size.width -
- (source_rect.size.width * scaling_factor))/2;
- }
- if (center_horizontally) {
- y_offset += (rect.size.height -
- (source_rect.size.height * scaling_factor))/2;
- } else {
- // Since 0 y begins at the bottom, we need to adjust so the output appears
- // nearer the top if we are not centering horizontally.
- y_offset += rect.size.height - (source_rect.size.height * scaling_factor);
- }
- CGContextSaveGState(context);
- CGContextTranslateCTM(context, x_offset, y_offset);
- CGContextScaleCTM(context, scaling_factor, scaling_factor);
- CGContextDrawPDFPage(context, pdf_page);
- CGContextRestoreGState(context);
- return true;
-}
-
-unsigned int PdfMetafile::GetPageCount() const {
- CGPDFDocumentRef pdf_doc = GetPDFDocument();
- return pdf_doc ? CGPDFDocumentGetNumberOfPages(pdf_doc) : 0;
-}
-
-gfx::Rect PdfMetafile::GetPageBounds(unsigned int page_number) const {
- CGPDFDocumentRef pdf_doc = GetPDFDocument();
- if (!pdf_doc) {
- LOG(ERROR) << "Unable to create PDF document from data";
- return gfx::Rect();
- }
- if (page_number > GetPageCount()) {
- LOG(ERROR) << "Invalid page number: " << page_number;
- return gfx::Rect();
- }
- CGPDFPageRef pdf_page = CGPDFDocumentGetPage(pdf_doc, page_number);
- CGRect page_rect = CGPDFPageGetBoxRect(pdf_page, kCGPDFMediaBox);
- return gfx::Rect(page_rect);
-}
-
-uint32 PdfMetafile::GetDataSize() const {
- // PDF data is only valid/complete once the context is released.
- DCHECK(!context_);
-
- if (!pdf_data_)
- return 0;
- return static_cast<uint32>(CFDataGetLength(pdf_data_));
-}
-
-bool PdfMetafile::GetData(void* dst_buffer, uint32 dst_buffer_size) const {
- // PDF data is only valid/complete once the context is released.
- DCHECK(!context_);
- DCHECK(pdf_data_);
- DCHECK(dst_buffer);
- DCHECK_GT(dst_buffer_size, 0U);
-
- uint32 data_size = GetDataSize();
- if (dst_buffer_size > data_size) {
- return false;
- }
-
- CFDataGetBytes(pdf_data_, CFRangeMake(0, dst_buffer_size),
- static_cast<UInt8*>(dst_buffer));
- return true;
-}
-
-bool PdfMetafile::SaveTo(const FilePath& file_path) const {
- DCHECK(pdf_data_.get());
- DCHECK(!context_.get());
-
- std::string path_string = file_path.value();
- ScopedCFTypeRef<CFURLRef> path_url(CFURLCreateFromFileSystemRepresentation(
- kCFAllocatorDefault, reinterpret_cast<const UInt8*>(path_string.c_str()),
- path_string.length(), false));
- SInt32 error_code;
- CFURLWriteDataAndPropertiesToResource(path_url, pdf_data_, NULL, &error_code);
- return error_code == 0;
-}
-
-CGContextRef PdfMetafile::context() const {
- return context_.get();
-}
-
-CGPDFDocumentRef PdfMetafile::GetPDFDocument() const {
- // Make sure that we have data, and that it's not being modified any more.
- DCHECK(pdf_data_.get());
- DCHECK(!context_.get());
-
- if (!pdf_doc_.get()) {
- ScopedCFTypeRef<CGDataProviderRef> pdf_data_provider(
- CGDataProviderCreateWithCFData(pdf_data_));
- pdf_doc_.reset(CGPDFDocumentCreateWithProvider(pdf_data_provider));
- }
- return pdf_doc_.get();
-}
-
-} // namespace printing