Home | History | Annotate | Download | only in cloud_print
      1 // Copyright 2013 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 CHROME_UTILITY_CLOUD_PRINT_PWG_ENCODER_H_
      6 #define CHROME_UTILITY_CLOUD_PRINT_PWG_ENCODER_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 
     12 namespace cloud_print {
     13 
     14 class BitmapImage;
     15 
     16 struct PwgHeaderInfo {
     17   PwgHeaderInfo()
     18       : dpi(300),
     19         total_pages(1),
     20         flipx(false),
     21         flipy(false),
     22         color_space(SRGB),
     23         duplex(false),
     24         tumble(false) {}
     25   enum ColorSpace { SGRAY = 18, SRGB = 19 };
     26   uint32 dpi;
     27   uint32 total_pages;
     28   bool flipx;
     29   bool flipy;
     30   ColorSpace color_space;
     31   bool duplex;
     32   bool tumble;
     33 };
     34 
     35 class PwgEncoder {
     36  public:
     37   PwgEncoder();
     38 
     39   void EncodeDocumentHeader(std::string *output) const;
     40   bool EncodePage(const BitmapImage& image,
     41                   const PwgHeaderInfo& pwg_header_info,
     42                   std::string* output) const;
     43 
     44  private:
     45   void EncodePageHeader(const BitmapImage& image,
     46                         const PwgHeaderInfo& pwg_header_info,
     47                         std::string* output) const;
     48 
     49   template <typename InputStruct, class RandomAccessIterator>
     50   void EncodeRow(RandomAccessIterator pos,
     51                  RandomAccessIterator row_end,
     52                  bool monochrome,
     53                  std::string* output) const;
     54 
     55   template <typename InputStruct>
     56   bool EncodePageWithColorspace(const BitmapImage& image,
     57                                 const PwgHeaderInfo& pwg_header_info,
     58                                 std::string* output) const;
     59 
     60   const uint8* GetRow(const BitmapImage& image, int row, bool flipy) const;
     61 };
     62 
     63 }  // namespace cloud_print
     64 
     65 #endif  // CHROME_UTILITY_CLOUD_PRINT_PWG_ENCODER_H_
     66