Home | History | Annotate | Download | only in printing
      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_SKIA_H_
      6 #define PRINTING_PDF_METAFILE_SKIA_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/logging.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "build/build_config.h"
     12 #include "printing/metafile.h"
     13 
     14 #if defined(OS_WIN)
     15 #include <windows.h>
     16 #endif
     17 
     18 namespace printing {
     19 
     20 struct PdfMetafileSkiaData;
     21 
     22 // This class uses Skia graphics library to generate a PDF document.
     23 class PRINTING_EXPORT PdfMetafileSkia : public Metafile {
     24  public:
     25   PdfMetafileSkia();
     26   virtual ~PdfMetafileSkia();
     27 
     28   // Metafile methods.
     29   virtual bool Init() OVERRIDE;
     30   virtual bool InitFromData(const void* src_buffer,
     31                             uint32 src_buffer_size) OVERRIDE;
     32 
     33   virtual SkBaseDevice* StartPageForVectorCanvas(
     34       const gfx::Size& page_size,
     35       const gfx::Rect& content_area,
     36       const float& scale_factor) OVERRIDE;
     37 
     38   virtual bool StartPage(const gfx::Size& page_size,
     39                          const gfx::Rect& content_area,
     40                          const float& scale_factor) OVERRIDE;
     41   virtual bool FinishPage() OVERRIDE;
     42   virtual bool FinishDocument() OVERRIDE;
     43 
     44   virtual uint32 GetDataSize() const OVERRIDE;
     45   virtual bool GetData(void* dst_buffer, uint32 dst_buffer_size) const OVERRIDE;
     46 
     47   virtual bool SaveTo(const base::FilePath& file_path) const OVERRIDE;
     48 
     49   virtual gfx::Rect GetPageBounds(unsigned int page_number) const OVERRIDE;
     50   virtual unsigned int GetPageCount() const OVERRIDE;
     51 
     52   virtual gfx::NativeDrawingContext context() const OVERRIDE;
     53 
     54 #if defined(OS_WIN)
     55   virtual bool Playback(gfx::NativeDrawingContext hdc,
     56                         const RECT* rect) const OVERRIDE;
     57   virtual bool SafePlayback(gfx::NativeDrawingContext hdc) const OVERRIDE;
     58   virtual HENHMETAFILE emf() const OVERRIDE;
     59 #elif defined(OS_MACOSX)
     60   virtual bool RenderPage(unsigned int page_number,
     61                           gfx::NativeDrawingContext context,
     62                           const CGRect rect,
     63                           const MacRenderPageParams& params) const OVERRIDE;
     64 #endif
     65 
     66 #if defined(OS_CHROMEOS) || defined(OS_ANDROID)
     67   virtual bool SaveToFD(const base::FileDescriptor& fd) const OVERRIDE;
     68 #endif  // if defined(OS_CHROMEOS) || defined(OS_ANDROID)
     69 
     70   // Return a new metafile containing just the current page in draft mode.
     71   PdfMetafileSkia* GetMetafileForCurrentPage();
     72 
     73  private:
     74   scoped_ptr<PdfMetafileSkiaData> data_;
     75 
     76   // True when finish page is outstanding for current page.
     77   bool page_outstanding_;
     78 
     79   DISALLOW_COPY_AND_ASSIGN(PdfMetafileSkia);
     80 };
     81 
     82 }  // namespace printing
     83 
     84 #endif  // PRINTING_PDF_METAFILE_SKIA_H_
     85