// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef XFA_FXBARCODE_BC_TWODIMWRITER_H_
#define XFA_FXBARCODE_BC_TWODIMWRITER_H_

#include "xfa/fxbarcode/BC_Writer.h"

class CBC_CommonBitMatrix;
class CFX_RenderDevice;

class CBC_TwoDimWriter : public CBC_Writer {
 public:
  CBC_TwoDimWriter();
  virtual ~CBC_TwoDimWriter();
  virtual void RenderResult(uint8_t* code,
                            int32_t codeWidth,
                            int32_t codeHeight,
                            int32_t& e);
  virtual void RenderBitmapResult(CFX_DIBitmap*& pOutBitmap, int32_t& e);
  virtual void RenderDeviceResult(CFX_RenderDevice* device,
                                  const CFX_Matrix* matrix);
  virtual FX_BOOL SetErrorCorrectionLevel(int32_t level) = 0;
  virtual int32_t GetErrorCorrectionLevel() { return m_iCorrectLevel; }

 protected:
  int32_t m_iCorrectLevel;
  FX_BOOL m_bFixedSize;
  CBC_CommonBitMatrix* m_output;
};

#endif  // XFA_FXBARCODE_BC_TWODIMWRITER_H_
