14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfx_barcode.h"
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <memory>
10d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxbarcode/cbc_codabar.h"
12d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxbarcode/cbc_code128.h"
13d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxbarcode/cbc_code39.h"
14d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxbarcode/cbc_codebase.h"
15d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxbarcode/cbc_datamatrix.h"
16d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxbarcode/cbc_ean13.h"
17d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxbarcode/cbc_ean8.h"
18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxbarcode/cbc_pdf417i.h"
19d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxbarcode/cbc_qrcode.h"
20d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxbarcode/cbc_upca.h"
21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxbarcode/utils.h"
22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "third_party/base/ptr_util.h"
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannnamespace {
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstd::unique_ptr<CBC_CodeBase> CreateBarCodeEngineObject(BC_TYPE type) {
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (type) {
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE39:
29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return pdfium::MakeUnique<CBC_Code39>();
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODABAR:
31d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return pdfium::MakeUnique<CBC_Codabar>();
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128:
33d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return pdfium::MakeUnique<CBC_Code128>(BC_CODE128_B);
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_B:
35d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return pdfium::MakeUnique<CBC_Code128>(BC_CODE128_B);
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_C:
37d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return pdfium::MakeUnique<CBC_Code128>(BC_CODE128_C);
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN8:
39d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return pdfium::MakeUnique<CBC_EAN8>();
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_UPCA:
41d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return pdfium::MakeUnique<CBC_UPCA>();
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN13:
43d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return pdfium::MakeUnique<CBC_EAN13>();
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_QR_CODE:
45d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return pdfium::MakeUnique<CBC_QRCode>();
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_PDF417:
47d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return pdfium::MakeUnique<CBC_PDF417I>();
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_DATAMATRIX:
49d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return pdfium::MakeUnique<CBC_DataMatrix>();
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_UNKNOWN:
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return nullptr;
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}  // namespace
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_Barcode::CFX_Barcode() {}
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_Barcode::~CFX_Barcode() {}
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::Create(BC_TYPE type) {
63d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  m_pBCEngine = CreateBarCodeEngineObject(type);
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return !!m_pBCEngine;
654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannBC_TYPE CFX_Barcode::GetType() {
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine ? m_pBCEngine->GetType() : BC_UNKNOWN;
694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetCharEncoding(BC_CHAR_ENCODING encoding) {
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine ? m_pBCEngine->SetCharEncoding(encoding) : false;
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetModuleHeight(int32_t moduleHeight) {
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine ? m_pBCEngine->SetModuleHeight(moduleHeight) : false;
774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetModuleWidth(int32_t moduleWidth) {
804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine ? m_pBCEngine->SetModuleWidth(moduleWidth) : false;
814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetHeight(int32_t height) {
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine ? m_pBCEngine->SetHeight(height) : false;
854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetWidth(int32_t width) {
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine ? m_pBCEngine->SetWidth(width) : false;
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetPrintChecksum(bool checksum) {
924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE39:
944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODABAR:
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128:
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_B:
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_C:
984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN8:
994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN13:
1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_UPCA:
1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine.get())
1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                ->SetPrintChecksum(checksum),
1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            true)
1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         : false;
1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetDataLength(int32_t length) {
1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE39:
1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODABAR:
1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128:
1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_B:
1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_C:
1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN8:
1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN13:
1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_UPCA:
1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine.get())
1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                ->SetDataLength(length),
1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            true)
1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         : false;
1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetCalChecksum(bool state) {
1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE39:
1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODABAR:
1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128:
1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_B:
1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_C:
1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN8:
1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN13:
1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_UPCA:
1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine.get())
1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                ->SetCalChecksum(state),
1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            true)
1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         : false;
1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetFont(CFX_Font* pFont) {
1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE39:
1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODABAR:
1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128:
1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_B:
1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_C:
1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN8:
1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN13:
1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_UPCA:
1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return m_pBCEngine
1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                 ? static_cast<CBC_OneCode*>(m_pBCEngine.get())->SetFont(pFont)
1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                 : false;
1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
166d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CFX_Barcode::SetFontSize(float size) {
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE39:
1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODABAR:
1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128:
1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_B:
1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_C:
1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN8:
1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN13:
1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_UPCA:
1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine.get())
1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                ->SetFontSize(size),
1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            true)
1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         : false;
1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetFontColor(FX_ARGB color) {
1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE39:
1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODABAR:
1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128:
1904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_B:
1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_C:
1924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN8:
1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_EAN13:
1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_UPCA:
1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine.get())
1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                ->SetFontColor(color),
1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            true)
1984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         : false;
1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
2004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetTextLocation(BC_TEXT_LOC location) {
2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  typedef bool (CBC_CodeBase::*memptrtype)(BC_TEXT_LOC);
2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  memptrtype memptr = nullptr;
2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE39:
2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      memptr = (memptrtype)&CBC_Code39::SetTextLocation;
2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODABAR:
2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      memptr = (memptrtype)&CBC_Codabar::SetTextLocation;
2134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128:
2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_B:
2164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE128_C:
2174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      memptr = (memptrtype)&CBC_Code128::SetTextLocation;
2184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine && memptr ? (m_pBCEngine.get()->*memptr)(location) : false;
2234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
225d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CFX_Barcode::SetWideNarrowRatio(int8_t ratio) {
226d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  typedef bool (CBC_CodeBase::*memptrtype)(int8_t);
2274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  memptrtype memptr = nullptr;
2284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
2294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODE39:
2304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      memptr = (memptrtype)&CBC_Code39::SetWideNarrowRatio;
2314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODABAR:
2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      memptr = (memptrtype)&CBC_Codabar::SetWideNarrowRatio;
2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
2364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine && memptr ? (m_pBCEngine.get()->*memptr)(ratio) : false;
2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
241d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CFX_Barcode::SetStartChar(char start) {
242d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  typedef bool (CBC_CodeBase::*memptrtype)(char);
2434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  memptrtype memptr = nullptr;
2444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODABAR:
2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      memptr = (memptrtype)&CBC_Codabar::SetStartChar;
2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
2494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine && memptr ? (m_pBCEngine.get()->*memptr)(start) : false;
2524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
254d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CFX_Barcode::SetEndChar(char end) {
255d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  typedef bool (CBC_CodeBase::*memptrtype)(char);
2564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  memptrtype memptr = nullptr;
2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
2584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_CODABAR:
2594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      memptr = (memptrtype)&CBC_Codabar::SetEndChar;
2604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
2624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine && memptr ? (m_pBCEngine.get()->*memptr)(end) : false;
2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetErrorCorrectionLevel(int32_t level) {
2684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  typedef bool (CBC_CodeBase::*memptrtype)(int32_t);
2694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  memptrtype memptr = nullptr;
2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
2714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_QR_CODE:
2724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      memptr = (memptrtype)&CBC_QRCode::SetErrorCorrectionLevel;
2734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_PDF417:
2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      memptr = (memptrtype)&CBC_PDF417I::SetErrorCorrectionLevel;
2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
2784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
2794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine && memptr ? (m_pBCEngine.get()->*memptr)(level) : false;
2814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
282d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::SetTruncated(bool truncated) {
2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  typedef void (CBC_CodeBase::*memptrtype)(bool);
2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  memptrtype memptr = nullptr;
2864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (GetType()) {
2874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case BC_PDF417:
2884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      memptr = (memptrtype)&CBC_PDF417I::SetTruncated;
2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
2914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pBCEngine && memptr ? ((m_pBCEngine.get()->*memptr)(truncated), true)
2944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               : false;
2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
297d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CFX_Barcode::Encode(const WideStringView& contents) {
298d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  return m_pBCEngine && m_pBCEngine->Encode(contents);
2994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFX_Barcode::RenderDevice(CFX_RenderDevice* device,
302d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                               const CFX_Matrix* matrix) {
303d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  return m_pBCEngine && m_pBCEngine->RenderDevice(device, matrix);
3044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
305