Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxbarcode / src / BC_QRCodeWriter.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #include "barcode.h"\r
8 #include "include/BC_TwoDimWriter.h"\r
9 #include "include/BC_Reader.h"\r
10 #include "include/BC_QRCodeWriter.h"\r
11 #include "include/BC_QRCoderEncoder.h"\r
12 #include "include/BC_QRCoder.h"\r
13 #include "include/BC_CommonByteMatrix.h"\r
14 #include "include/BC_QRCodeReader.h"\r
15 #include "include/BC_QRCoderErrorCorrectionLevel.h"\r
16 CBC_QRCodeWriter::CBC_QRCodeWriter()\r
17 {\r
18     m_bFixedSize = TRUE;\r
19     m_iCorrectLevel = 1;\r
20     m_iVersion = 0;\r
21 }\r
22 CBC_QRCodeWriter::~CBC_QRCodeWriter()\r
23 {\r
24 }\r
25 void CBC_QRCodeWriter::ReleaseAll()\r
26 {\r
27     CBC_QRCodeReader::ReleaseAll();\r
28 }\r
29 FX_BOOL CBC_QRCodeWriter::SetVersion(FX_INT32 version)\r
30 {\r
31     if (version < 0 || version > 40) {\r
32         return FALSE;\r
33     }\r
34     m_iVersion = version;\r
35     return TRUE;\r
36 }\r
37 FX_BOOL CBC_QRCodeWriter::SetErrorCorrectionLevel(FX_INT32 level)\r
38 {\r
39     if (level < 0 || level > 3) {\r
40         return FALSE;\r
41     }\r
42     m_iCorrectLevel = level;\r
43     return TRUE;\r
44 }\r
45 FX_BYTE* CBC_QRCodeWriter::Encode(const CFX_WideString& contents, FX_INT32 ecLevel, FX_INT32 &outWidth, FX_INT32 &outHeight, FX_INT32 &e)\r
46 {\r
47     CBC_QRCoderErrorCorrectionLevel *ec = NULL;\r
48     switch(ecLevel) {\r
49         case 0:\r
50             ec = CBC_QRCoderErrorCorrectionLevel::L;\r
51             break;\r
52         case 1:\r
53             ec = CBC_QRCoderErrorCorrectionLevel::M;\r
54             break;\r
55         case 2:\r
56             ec = CBC_QRCoderErrorCorrectionLevel::Q;\r
57             break;\r
58         case 3:\r
59             ec = CBC_QRCoderErrorCorrectionLevel::H;\r
60             break;\r
61         default: {\r
62                 e = BCExceptionUnSupportEclevel;\r
63                 BC_EXCEPTION_CHECK_ReturnValue(e, NULL);\r
64             }\r
65     }\r
66     CBC_QRCoder qr;\r
67     if (m_iVersion > 0 && m_iVersion < 41) {\r
68         CFX_ByteString byteStr = contents.UTF8Encode();\r
69         CBC_QRCoderEncoder::Encode(byteStr, ec, &qr, e, m_iVersion);\r
70     } else {\r
71         CBC_QRCoderEncoder::Encode(contents, ec, &qr, e);\r
72     }\r
73     BC_EXCEPTION_CHECK_ReturnValue(e, NULL);\r
74     outWidth = qr.GetMatrixWidth();\r
75     outHeight = qr.GetMatrixWidth();\r
76     FX_BYTE* result = FX_Alloc(FX_BYTE, outWidth * outWidth);\r
77     FXSYS_memcpy32(result, qr.GetMatrix()->GetArray(), outWidth * outHeight);\r
78     return result;\r
79 }\r
80 FX_BYTE *CBC_QRCodeWriter::Encode(const CFX_ByteString& contents, BCFORMAT format, FX_INT32 &outWidth, FX_INT32 &outHeight, FX_INT32 hints, FX_INT32 &e)\r
81 {\r
82     return NULL;\r
83 }\r
84 FX_BYTE* CBC_QRCodeWriter::Encode(const CFX_ByteString& contents, BCFORMAT format, FX_INT32 &outWidth, FX_INT32 &outHeight, FX_INT32 &e)\r
85 {\r
86     return NULL;\r
87 }\r