pdf_metafile_cg_mac.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef PRINTING_PDF_METAFILE_CG_MAC_H_ 6#define PRINTING_PDF_METAFILE_CG_MAC_H_ 7 8#include <ApplicationServices/ApplicationServices.h> 9#include <CoreFoundation/CoreFoundation.h> 10 11#include "base/basictypes.h" 12#include "base/gtest_prod_util.h" 13#include "base/mac/scoped_cftyperef.h" 14#include "base/threading/thread_checker.h" 15#include "printing/metafile.h" 16 17namespace base { 18class FilePath; 19} 20 21namespace gfx { 22class Rect; 23class Size; 24} 25 26namespace printing { 27 28// This class creates a graphics context that renders into a PDF data stream. 29class PRINTING_EXPORT PdfMetafileCg : public Metafile { 30 public: 31 PdfMetafileCg(); 32 virtual ~PdfMetafileCg(); 33 34 // Metafile methods. 35 virtual bool Init() OVERRIDE; 36 virtual bool InitFromData(const void* src_buffer, 37 uint32 src_buffer_size) OVERRIDE; 38 39 // Not implemented on mac. 40 virtual SkDevice* StartPageForVectorCanvas( 41 const gfx::Size& page_size, const gfx::Rect& content_area, 42 const float& scale_factor) OVERRIDE; 43 virtual bool StartPage(const gfx::Size& page_size, 44 const gfx::Rect& content_area, 45 const float& scale_factor) OVERRIDE; 46 virtual bool FinishPage() OVERRIDE; 47 virtual bool FinishDocument() OVERRIDE; 48 49 virtual uint32 GetDataSize() const OVERRIDE; 50 virtual bool GetData(void* dst_buffer, uint32 dst_buffer_size) const OVERRIDE; 51 52 // For testing purposes only. 53 virtual bool SaveTo(const base::FilePath& file_path) const OVERRIDE; 54 55 virtual gfx::Rect GetPageBounds(unsigned int page_number) const OVERRIDE; 56 virtual unsigned int GetPageCount() const OVERRIDE; 57 58 // Note: The returned context *must not be retained* past Close(). If it is, 59 // the data returned from GetData will not be valid PDF data. 60 virtual CGContextRef context() const OVERRIDE; 61 62 virtual bool RenderPage(unsigned int page_number, 63 gfx::NativeDrawingContext context, 64 const CGRect rect, 65 const MacRenderPageParams& params) const OVERRIDE; 66 67 private: 68 // Returns a CGPDFDocumentRef version of pdf_data_. 69 CGPDFDocumentRef GetPDFDocument() const; 70 71 base::ThreadChecker thread_checker_; 72 73 // Context for rendering to the pdf. 74 base::mac::ScopedCFTypeRef<CGContextRef> context_; 75 76 // PDF backing store. 77 base::mac::ScopedCFTypeRef<CFMutableDataRef> pdf_data_; 78 79 // Lazily-created CGPDFDocument representation of pdf_data_. 80 mutable base::mac::ScopedCFTypeRef<CGPDFDocumentRef> pdf_doc_; 81 82 // Whether or not a page is currently open. 83 bool page_is_open_; 84 85 // Whether this instantiation of the PdfMetafileCg owns the thread_pdf_docs. 86 bool thread_pdf_docs_owned_; 87 88 DISALLOW_COPY_AND_ASSIGN(PdfMetafileCg); 89}; 90 91} // namespace printing 92 93#endif // PRINTING_PDF_METAFILE_CG_MAC_H_ 94