xref: /aosp_15_r20/external/pdfium/fxbarcode/oned/BC_OneDimWriter.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #ifndef FXBARCODE_ONED_BC_ONEDIMWRITER_H_
8*3ac0a46fSAndroid Build Coastguard Worker #define FXBARCODE_ONED_BC_ONEDIMWRITER_H_
9*3ac0a46fSAndroid Build Coastguard Worker 
10*3ac0a46fSAndroid Build Coastguard Worker #include <stddef.h>
11*3ac0a46fSAndroid Build Coastguard Worker #include <stdint.h>
12*3ac0a46fSAndroid Build Coastguard Worker 
13*3ac0a46fSAndroid Build Coastguard Worker #include <vector>
14*3ac0a46fSAndroid Build Coastguard Worker 
15*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/data_vector.h"
16*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_string.h"
17*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h"
18*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxge/cfx_textrenderoptions.h"
19*3ac0a46fSAndroid Build Coastguard Worker #include "fxbarcode/BC_Library.h"
20*3ac0a46fSAndroid Build Coastguard Worker #include "fxbarcode/BC_Writer.h"
21*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/containers/span.h"
22*3ac0a46fSAndroid Build Coastguard Worker 
23*3ac0a46fSAndroid Build Coastguard Worker class CFX_Font;
24*3ac0a46fSAndroid Build Coastguard Worker class CFX_Matrix;
25*3ac0a46fSAndroid Build Coastguard Worker class CFX_Path;
26*3ac0a46fSAndroid Build Coastguard Worker class CFX_RenderDevice;
27*3ac0a46fSAndroid Build Coastguard Worker class TextCharPos;
28*3ac0a46fSAndroid Build Coastguard Worker 
29*3ac0a46fSAndroid Build Coastguard Worker class CBC_OneDimWriter : public CBC_Writer {
30*3ac0a46fSAndroid Build Coastguard Worker  public:
GetTextRenderOptions()31*3ac0a46fSAndroid Build Coastguard Worker   static constexpr CFX_TextRenderOptions GetTextRenderOptions() {
32*3ac0a46fSAndroid Build Coastguard Worker     return CFX_TextRenderOptions(CFX_TextRenderOptions::kLcd);
33*3ac0a46fSAndroid Build Coastguard Worker   }
34*3ac0a46fSAndroid Build Coastguard Worker   static bool HasValidContentSize(WideStringView contents);
35*3ac0a46fSAndroid Build Coastguard Worker 
36*3ac0a46fSAndroid Build Coastguard Worker   CBC_OneDimWriter();
37*3ac0a46fSAndroid Build Coastguard Worker   ~CBC_OneDimWriter() override;
38*3ac0a46fSAndroid Build Coastguard Worker 
39*3ac0a46fSAndroid Build Coastguard Worker   virtual bool RenderResult(WideStringView contents,
40*3ac0a46fSAndroid Build Coastguard Worker                             pdfium::span<const uint8_t> code);
41*3ac0a46fSAndroid Build Coastguard Worker   virtual bool CheckContentValidity(WideStringView contents) = 0;
42*3ac0a46fSAndroid Build Coastguard Worker   virtual WideString FilterContents(WideStringView contents) = 0;
43*3ac0a46fSAndroid Build Coastguard Worker   virtual void SetDataLength(int32_t length);
44*3ac0a46fSAndroid Build Coastguard Worker 
45*3ac0a46fSAndroid Build Coastguard Worker   void SetPrintChecksum(bool checksum);
46*3ac0a46fSAndroid Build Coastguard Worker   void SetCalcChecksum(bool state);
47*3ac0a46fSAndroid Build Coastguard Worker   void SetFontSize(float size);
48*3ac0a46fSAndroid Build Coastguard Worker   void SetFontStyle(int32_t style);
49*3ac0a46fSAndroid Build Coastguard Worker   void SetFontColor(FX_ARGB color);
50*3ac0a46fSAndroid Build Coastguard Worker 
51*3ac0a46fSAndroid Build Coastguard Worker   virtual DataVector<uint8_t> Encode(const ByteString& contents) = 0;
52*3ac0a46fSAndroid Build Coastguard Worker   bool RenderDeviceResult(CFX_RenderDevice* device,
53*3ac0a46fSAndroid Build Coastguard Worker                           const CFX_Matrix& matrix,
54*3ac0a46fSAndroid Build Coastguard Worker                           WideStringView contents);
55*3ac0a46fSAndroid Build Coastguard Worker   bool SetFont(CFX_Font* cFont);
56*3ac0a46fSAndroid Build Coastguard Worker 
57*3ac0a46fSAndroid Build Coastguard Worker  protected:
58*3ac0a46fSAndroid Build Coastguard Worker   virtual bool ShowChars(WideStringView contents,
59*3ac0a46fSAndroid Build Coastguard Worker                          CFX_RenderDevice* device,
60*3ac0a46fSAndroid Build Coastguard Worker                          const CFX_Matrix& matrix,
61*3ac0a46fSAndroid Build Coastguard Worker                          int32_t barWidth);
62*3ac0a46fSAndroid Build Coastguard Worker   void ShowDeviceChars(CFX_RenderDevice* device,
63*3ac0a46fSAndroid Build Coastguard Worker                        const CFX_Matrix& matrix,
64*3ac0a46fSAndroid Build Coastguard Worker                        const ByteString str,
65*3ac0a46fSAndroid Build Coastguard Worker                        float geWidth,
66*3ac0a46fSAndroid Build Coastguard Worker                        TextCharPos* pCharPos,
67*3ac0a46fSAndroid Build Coastguard Worker                        float locX,
68*3ac0a46fSAndroid Build Coastguard Worker                        float locY,
69*3ac0a46fSAndroid Build Coastguard Worker                        int32_t barWidth);
70*3ac0a46fSAndroid Build Coastguard Worker   void CalcTextInfo(const ByteString& text,
71*3ac0a46fSAndroid Build Coastguard Worker                     TextCharPos* charPos,
72*3ac0a46fSAndroid Build Coastguard Worker                     CFX_Font* cFont,
73*3ac0a46fSAndroid Build Coastguard Worker                     float geWidth,
74*3ac0a46fSAndroid Build Coastguard Worker                     int32_t fontSize,
75*3ac0a46fSAndroid Build Coastguard Worker                     float& charsLen);
76*3ac0a46fSAndroid Build Coastguard Worker   pdfium::span<uint8_t> AppendPattern(pdfium::span<uint8_t> target,
77*3ac0a46fSAndroid Build Coastguard Worker                                       pdfium::span<const uint8_t> pattern,
78*3ac0a46fSAndroid Build Coastguard Worker                                       bool startColor);
79*3ac0a46fSAndroid Build Coastguard Worker 
80*3ac0a46fSAndroid Build Coastguard Worker   bool m_bPrintChecksum = true;
81*3ac0a46fSAndroid Build Coastguard Worker   bool m_bCalcChecksum = false;
82*3ac0a46fSAndroid Build Coastguard Worker   bool m_bLeftPadding = false;
83*3ac0a46fSAndroid Build Coastguard Worker   bool m_bRightPadding = false;
84*3ac0a46fSAndroid Build Coastguard Worker 
85*3ac0a46fSAndroid Build Coastguard Worker   UnownedPtr<CFX_Font> m_pFont;
86*3ac0a46fSAndroid Build Coastguard Worker   float m_fFontSize = 10.0f;
87*3ac0a46fSAndroid Build Coastguard Worker   int32_t m_iFontStyle = 0;
88*3ac0a46fSAndroid Build Coastguard Worker   uint32_t m_fontColor = 0xff000000;
89*3ac0a46fSAndroid Build Coastguard Worker   BC_TEXT_LOC m_locTextLoc = BC_TEXT_LOC::kBelowEmbed;
90*3ac0a46fSAndroid Build Coastguard Worker 
91*3ac0a46fSAndroid Build Coastguard Worker   int32_t m_iDataLenth = 0;
92*3ac0a46fSAndroid Build Coastguard Worker   size_t m_iContentLen = 0;
93*3ac0a46fSAndroid Build Coastguard Worker 
94*3ac0a46fSAndroid Build Coastguard Worker   std::vector<CFX_Path> m_output;
95*3ac0a46fSAndroid Build Coastguard Worker   int32_t m_barWidth;
96*3ac0a46fSAndroid Build Coastguard Worker   float m_outputHScale;
97*3ac0a46fSAndroid Build Coastguard Worker };
98*3ac0a46fSAndroid Build Coastguard Worker 
99*3ac0a46fSAndroid Build Coastguard Worker #endif  // FXBARCODE_ONED_BC_ONEDIMWRITER_H_
100