1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code is licensed as follows:
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/*
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Copyright 2010 ZXing authors
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Licensed under the Apache License, Version 2.0 (the "License");
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * you may not use this file except in compliance with the License.
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * You may obtain a copy of the License at
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *      http://www.apache.org/licenses/LICENSE-2.0
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Unless required by applicable law or agreed to in writing, software
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * distributed under the License is distributed on an "AS IS" BASIS,
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * See the License for the specific language governing permissions and
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * limitations under the License.
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxbarcode/barcode.h"
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxbarcode/BC_Writer.h"
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "BC_OneDimWriter.h"
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "BC_OnedEAN13Writer.h"
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "BC_OnedUPCAWriter.h"
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCBC_OnedUPCAWriter::CBC_OnedUPCAWriter() {
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_subWriter = NULL;
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_bLeftPadding = TRUE;
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_bRightPadding = TRUE;
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CBC_OnedUPCAWriter::Init() {
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_subWriter = new CBC_OnedEAN13Writer;
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCBC_OnedUPCAWriter::~CBC_OnedUPCAWriter() {
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_subWriter != NULL) {
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete m_subWriter;
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_subWriter = NULL;
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CBC_OnedUPCAWriter::CheckContentValidity(
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CFX_WideStringC& contents) {
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t i = 0;
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (i = 0; i < contents.GetLength(); i++) {
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (contents.GetAt(i) >= '0' && contents.GetAt(i) <= '9') {
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return FALSE;
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return TRUE;
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CBC_OnedUPCAWriter::FilterContents(
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CFX_WideStringC& contents) {
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString filtercontents;
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_WCHAR ch;
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int32_t i = 0; i < contents.GetLength(); i++) {
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ch = contents.GetAt(i);
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (ch > 175) {
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      i++;
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (ch >= '0' && ch <= '9') {
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      filtercontents += ch;
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return filtercontents;
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CBC_OnedUPCAWriter::CalcChecksum(const CFX_ByteString& contents) {
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t odd = 0;
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t even = 0;
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t j = 1;
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int32_t i = contents.GetLength() - 1; i >= 0; i--) {
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (j % 2) {
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      odd += FXSYS_atoi(contents.Mid(i, 1));
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      even += FXSYS_atoi(contents.Mid(i, 1));
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    j++;
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t checksum = (odd * 3 + even) % 10;
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  checksum = (10 - checksum) % 10;
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return (checksum);
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannuint8_t* CBC_OnedUPCAWriter::Encode(const CFX_ByteString& contents,
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    BCFORMAT format,
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    int32_t& outWidth,
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    int32_t& outHeight,
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    int32_t& e) {
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e);
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return ret;
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannuint8_t* CBC_OnedUPCAWriter::Encode(const CFX_ByteString& contents,
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    BCFORMAT format,
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    int32_t& outWidth,
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    int32_t& outHeight,
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    int32_t hints,
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    int32_t& e) {
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (format != BCFORMAT_UPC_A) {
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    e = BCExceptionOnlyEncodeUPC_A;
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return NULL;
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString toEAN13String = '0' + contents;
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_iDataLenth = 13;
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t* ret = m_subWriter->Encode(toEAN13String, BCFORMAT_EAN_13, outWidth,
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     outHeight, hints, e);
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return ret;
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CBC_OnedUPCAWriter::ShowChars(const CFX_WideStringC& contents,
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   CFX_DIBitmap* pOutBitmap,
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   CFX_RenderDevice* device,
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   const CFX_Matrix* matrix,
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   int32_t barWidth,
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   int32_t multiple,
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   int32_t& e) {
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (device == NULL && pOutBitmap == NULL) {
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    e = BCExceptionIllegalArgument;
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t leftPadding = 7 * multiple;
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t leftPosition = 10 * multiple + leftPadding;
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString str = FX_UTF8Encode(contents);
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iLen = str.GetLength();
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLen);
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLen);
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString tempStr = str.Mid(1, 5);
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT strWidth = (FX_FLOAT)35 * multiple;
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT blank = 0.0;
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_FxgeDevice geBitmap;
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pOutBitmap != NULL) {
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    geBitmap.Attach(pOutBitmap);
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT charsWidth = 0;
137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  iLen = tempStr.GetLength();
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iFontSize = (int32_t)fabs(m_fFontSize);
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iTextHeight = iFontSize + 1;
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pOutBitmap == NULL) {
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_Matrix matr(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_FloatRect rect(
143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)leftPosition, (FX_FLOAT)(m_Height - iTextHeight),
144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height);
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    matr.Concat(*matrix);
146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    matr.TransformRect(rect);
147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_RECT re = rect.GetOutterRect();
148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    device->FillRect(&re, m_backgroundColor);
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_FloatRect rect1(
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)(leftPosition + 40 * multiple),
152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)(m_Height - iTextHeight),
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)((leftPosition + 40 * multiple) + strWidth - 0.5),
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)m_Height);
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    matr1.Concat(*matrix);
156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    matr1.TransformRect(rect1);
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    re = rect1.GetOutterRect();
158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    device->FillRect(&re, m_backgroundColor);
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT strWidth1 = (FX_FLOAT)multiple * 7;
160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_Matrix matr2(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_FloatRect rect2(0.0, (FX_FLOAT)(m_Height - iTextHeight),
162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        (FX_FLOAT)strWidth1 - 1, (FX_FLOAT)m_Height);
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    matr2.Concat(*matrix);
164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    matr2.TransformRect(rect2);
165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    re = rect2.GetOutterRect();
166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    device->FillRect(&re, m_backgroundColor);
167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_Matrix matr3(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_FloatRect rect3(
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)(leftPosition + 85 * multiple),
170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)(m_Height - iTextHeight),
171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)((leftPosition + 85 * multiple) + strWidth1 - 0.5),
172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)m_Height);
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    matr3.Concat(*matrix);
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    matr3.TransformRect(rect3);
175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    re = rect3.GetOutterRect();
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    device->FillRect(&re, m_backgroundColor);
177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pOutBitmap == NULL) {
179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    strWidth = strWidth * m_outputHScale;
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CalcTextInfo(tempStr, pCharPos + 1, m_pFont, strWidth, iFontSize, blank);
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_Matrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize);
183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_FxgeDevice ge;
184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pOutBitmap != NULL) {
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ge.Create((int)strWidth, iTextHeight, FXDIB_Argb);
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ge.GetBitmap()->Clear(m_backgroundColor);
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ge.DrawNormalText(iLen, pCharPos + 1, m_pFont,
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      (CFX_Matrix*)&affine_matrix, m_fontColor,
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      FXTEXT_CLEARTYPE);
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    geBitmap.SetDIBits(ge.GetBitmap(), leftPosition, m_Height - iTextHeight);
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_Matrix affine_matrix1(1.0, 0.0, 0.0, -1.0,
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              (FX_FLOAT)leftPosition * m_outputHScale,
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (matrix != NULL) {
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      affine_matrix1.Concat(*matrix);
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    device->DrawNormalText(iLen, pCharPos + 1, m_pFont,
200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           CFX_GEModule::Get()->GetFontCache(),
201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1,
202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           m_fontColor, FXTEXT_CLEARTYPE);
203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  tempStr = str.Mid(6, 5);
205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  iLen = tempStr.GetLength();
206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  charsWidth = 0.0f;
207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CalcTextInfo(tempStr, pCharPos + 6, m_pFont, strWidth, iFontSize, blank);
208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pOutBitmap != NULL) {
209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_RECT rect2(0, 0, (int)strWidth, iTextHeight);
210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ge.FillRect(&rect2, m_backgroundColor);
211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ge.DrawNormalText(iLen, pCharPos + 6, m_pFont,
212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      (CFX_Matrix*)&affine_matrix, m_fontColor,
214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      FXTEXT_CLEARTYPE);
215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 40 * multiple,
216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       m_Height - iTextHeight);
217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_Matrix affine_matrix1(
219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        1.0, 0.0, 0.0, -1.0,
220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)(leftPosition + 40 * multiple) * m_outputHScale,
221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (matrix != NULL) {
223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      affine_matrix1.Concat(*matrix);
224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    device->DrawNormalText(iLen, pCharPos + 6, m_pFont,
226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           CFX_GEModule::Get()->GetFontCache(),
227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1,
228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           m_fontColor, FXTEXT_CLEARTYPE);
229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  tempStr = str.Mid(0, 1);
231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  iLen = tempStr.GetLength();
232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  strWidth = (FX_FLOAT)multiple * 7;
233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pOutBitmap == NULL) {
234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    strWidth = strWidth * m_outputHScale;
235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CalcTextInfo(tempStr, pCharPos, m_pFont, strWidth, iFontSize, blank);
237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pOutBitmap != NULL) {
238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete ge.GetBitmap();
239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ge.Create((int)strWidth, iTextHeight, FXDIB_Argb);
240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ge.GetBitmap()->Clear(m_backgroundColor);
241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ge.DrawNormalText(iLen, pCharPos, m_pFont,
242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      (CFX_Matrix*)&affine_matrix, m_fontColor,
244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      FXTEXT_CLEARTYPE);
245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    geBitmap.SetDIBits(ge.GetBitmap(), 0, m_Height - iTextHeight);
246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_Matrix affine_matrix1(1.0, 0.0, 0.0, -1.0, 0,
248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (matrix != NULL) {
250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      affine_matrix1.Concat(*matrix);
251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    device->DrawNormalText(iLen, pCharPos, m_pFont,
253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           CFX_GEModule::Get()->GetFontCache(),
254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1,
255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           m_fontColor, FXTEXT_CLEARTYPE);
256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  tempStr = str.Mid(11, 1);
258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  iLen = tempStr.GetLength();
259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CalcTextInfo(tempStr, pCharPos + 11, m_pFont, strWidth, iFontSize, blank);
260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pOutBitmap != NULL) {
261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete ge.GetBitmap();
262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ge.Create((int)strWidth, iTextHeight, FXDIB_Argb);
263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ge.GetBitmap()->Clear(m_backgroundColor);
264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ge.DrawNormalText(iLen, pCharPos + 11, m_pFont,
265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      (CFX_Matrix*)&affine_matrix, m_fontColor,
267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      FXTEXT_CLEARTYPE);
268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 85 * multiple,
269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       m_Height - iTextHeight);
270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_Matrix affine_matrix1(
272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        1.0, 0.0, 0.0, -1.0,
273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)(leftPosition + 85 * multiple) * m_outputHScale,
274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (matrix != NULL) {
276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      affine_matrix1.Concat(*matrix);
277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    device->DrawNormalText(iLen, pCharPos + 11, m_pFont,
279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           CFX_GEModule::Get()->GetFontCache(),
280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1,
281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           m_fontColor, FXTEXT_CLEARTYPE);
282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_Free(pCharPos);
284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CBC_OnedUPCAWriter::RenderResult(const CFX_WideStringC& contents,
286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      uint8_t* code,
287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      int32_t codeLength,
288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      FX_BOOL isDevice,
289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      int32_t& e) {
290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CBC_OneDimWriter::RenderResult(contents, code, codeLength, isDevice, e);
291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
292