Merge to XFA: Kill FXSYS_mem{cpy,cmp,set.move}{32,8}.
[pdfium.git] / xfa / src / fxbarcode / qrcode / 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 // Original code is licensed as follows:\r
7 /*\r
8  * Copyright 2008 ZXing authors\r
9  *\r
10  * Licensed under the Apache License, Version 2.0 (the "License");\r
11  * you may not use this file except in compliance with the License.\r
12  * You may obtain a copy of the License at\r
13  *\r
14  *      http://www.apache.org/licenses/LICENSE-2.0\r
15  *\r
16  * Unless required by applicable law or agreed to in writing, software\r
17  * distributed under the License is distributed on an "AS IS" BASIS,\r
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
19  * See the License for the specific language governing permissions and\r
20  * limitations under the License.\r
21  */\r
22 \r
23 #include "../barcode.h"\r
24 #include "../BC_TwoDimWriter.h"\r
25 #include "../BC_Reader.h"\r
26 #include "../common/BC_CommonByteMatrix.h"\r
27 #include "BC_QRCodeWriter.h"\r
28 #include "BC_QRCoderEncoder.h"\r
29 #include "BC_QRCoder.h"\r
30 #include "BC_QRCodeReader.h"\r
31 #include "BC_QRCoderErrorCorrectionLevel.h"\r
32 CBC_QRCodeWriter::CBC_QRCodeWriter()\r
33 {\r
34     m_bFixedSize = TRUE;\r
35     m_iCorrectLevel = 1;\r
36     m_iVersion = 0;\r
37 }\r
38 CBC_QRCodeWriter::~CBC_QRCodeWriter()\r
39 {\r
40 }\r
41 void CBC_QRCodeWriter::ReleaseAll()\r
42 {\r
43     CBC_QRCodeReader::ReleaseAll();\r
44 }\r
45 FX_BOOL CBC_QRCodeWriter::SetVersion(int32_t version)\r
46 {\r
47     if (version < 0 || version > 40) {\r
48         return FALSE;\r
49     }\r
50     m_iVersion = version;\r
51     return TRUE;\r
52 }\r
53 FX_BOOL CBC_QRCodeWriter::SetErrorCorrectionLevel(int32_t level)\r
54 {\r
55     if (level < 0 || level > 3) {\r
56         return FALSE;\r
57     }\r
58     m_iCorrectLevel = level;\r
59     return TRUE;\r
60 }\r
61 uint8_t* CBC_QRCodeWriter::Encode(const CFX_WideString& contents, int32_t ecLevel, int32_t &outWidth, int32_t &outHeight, int32_t &e)\r
62 {\r
63     CBC_QRCoderErrorCorrectionLevel *ec = NULL;\r
64     switch(ecLevel) {\r
65         case 0:\r
66             ec = CBC_QRCoderErrorCorrectionLevel::L;\r
67             break;\r
68         case 1:\r
69             ec = CBC_QRCoderErrorCorrectionLevel::M;\r
70             break;\r
71         case 2:\r
72             ec = CBC_QRCoderErrorCorrectionLevel::Q;\r
73             break;\r
74         case 3:\r
75             ec = CBC_QRCoderErrorCorrectionLevel::H;\r
76             break;\r
77         default: {\r
78                 e = BCExceptionUnSupportEclevel;\r
79                 BC_EXCEPTION_CHECK_ReturnValue(e, NULL);\r
80             }\r
81     }\r
82     CBC_QRCoder qr;\r
83     if (m_iVersion > 0 && m_iVersion < 41) {\r
84         CFX_ByteString byteStr = contents.UTF8Encode();\r
85         CBC_QRCoderEncoder::Encode(byteStr, ec, &qr, e, m_iVersion);\r
86     } else {\r
87         CBC_QRCoderEncoder::Encode(contents, ec, &qr, e);\r
88     }\r
89     BC_EXCEPTION_CHECK_ReturnValue(e, NULL);\r
90     outWidth = qr.GetMatrixWidth();\r
91     outHeight = qr.GetMatrixWidth();\r
92     uint8_t* result = FX_Alloc(uint8_t, outWidth * outWidth);\r
93     FXSYS_memcpy(result, qr.GetMatrix()->GetArray(), outWidth * outHeight);\r
94     return result;\r
95 }\r
96 uint8_t *CBC_QRCodeWriter::Encode(const CFX_ByteString& contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e)\r
97 {\r
98     return NULL;\r
99 }\r
100 uint8_t* CBC_QRCodeWriter::Encode(const CFX_ByteString& contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t &e)\r
101 {\r
102     return NULL;\r
103 }\r