// 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 _BC_ONEDIMWRITER_H_
#define _BC_ONEDIMWRITER_H_
class CBC_Writer;
class CBC_CommonBitMatrix;
class CBC_OneDimWriter;
class CBC_OneDimWriter : public CBC_Writer
{
public:
    CBC_OneDimWriter();
    virtual ~CBC_OneDimWriter();
    uint8_t			*Encode(const CFX_ByteString &contents, BCFORMAT format,
                            int32_t &outWidth, int32_t &outHeight, int32_t &e);
    uint8_t			*Encode(const CFX_ByteString &contents, BCFORMAT format,
                            int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e);
    virtual uint8_t *Encode(const CFX_ByteString &contents, int32_t &outLength, int32_t &e)
    {
        return NULL;
    };
    virtual void     RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength,  FX_BOOL isDevice, int32_t &e);
    virtual void     RenderBitmapResult(CFX_DIBitmap *&pOutBitmap, const CFX_WideStringC& contents, int32_t &e);
    virtual void     RenderDeviceResult(CFX_RenderDevice* device, const CFX_Matrix* matrix, const CFX_WideStringC& contents, int32_t &e);
    virtual FX_BOOL			CheckContentValidity(const CFX_WideStringC& contents)
    {
        return TRUE;
    };
    virtual CFX_WideString	FilterContents(const CFX_WideStringC& contents)
    {
        return CFX_WideString();
    }
    virtual CFX_WideString	RenderTextContents(const CFX_WideStringC& contents)
    {
        return CFX_WideString();
    }
    virtual void			SetPrintChecksum(FX_BOOL checksum);
    virtual void			SetDataLength(int32_t length);
    virtual void			SetCalcChecksum(int32_t state);
    virtual void			SetFontSize(FX_FLOAT size);
    virtual void			SetFontStyle(int32_t style);
    virtual void			SetFontColor(FX_ARGB color);
    virtual FX_BOOL			SetFont(CFX_Font * cFont);
protected:
    FX_BOOL			m_bPrintChecksum;
    int32_t		m_iDataLenth;
    FX_BOOL			m_bCalcChecksum;
    CFX_Font*		m_pFont;
    FX_FLOAT		m_fFontSize;
    int32_t		m_iFontStyle;
    FX_DWORD		m_fontColor;
    BC_TEXT_LOC		m_locTextLoc;
    int32_t		m_iContentLen;
    FX_BOOL         m_bLeftPadding;
    FX_BOOL         m_bRightPadding;
    CBC_CommonBitMatrix*   m_output;
    int32_t               m_barWidth;
    int32_t               m_multiple;
    FX_FLOAT               m_outputHScale;
    void			CalcTextInfo(const CFX_ByteString &text, FXTEXT_CHARPOS *charPos, CFX_Font *cFont, FX_FLOAT geWidth, int32_t fontSize, FX_FLOAT &charsLen);
    virtual void	ShowChars(const CFX_WideStringC& contents, CFX_DIBitmap *pOutBitmap, CFX_RenderDevice *device, const CFX_Matrix* matrix, int32_t barWidth, int32_t multiple, int32_t &e);
    virtual void	ShowBitmapChars(CFX_DIBitmap *pOutBitmap, const CFX_ByteString str, FX_FLOAT geWidth, FXTEXT_CHARPOS* pCharPos, FX_FLOAT locX, FX_FLOAT locY, int32_t barWidth);
    virtual void    ShowDeviceChars(CFX_RenderDevice *device, const CFX_Matrix* matrix, const CFX_ByteString str, FX_FLOAT geWidth, FXTEXT_CHARPOS* pCharPos, FX_FLOAT locX, FX_FLOAT locY,  int32_t barWidth);
    int32_t		AppendPattern(uint8_t* target, int32_t pos, const int32_t* pattern, int32_t patternLength, int32_t startColor, int32_t &e);
    FX_WCHAR		Upper(FX_WCHAR ch);
};
#endif