Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fxbarcode / pdf417 / BC_PDF417BarcodeMatrix.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 2011 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_PDF417BarcodeRow.h"\r
25 #include "BC_PDF417BarcodeMatrix.h"\r
26 CBC_BarcodeMatrix::CBC_BarcodeMatrix(int32_t height, int32_t width)\r
27 {\r
28     m_matrix.SetSize(height + 2);\r
29     for (int32_t i = 0, matrixLength = m_matrix.GetSize(); i < matrixLength; i++) {\r
30         m_matrix[i] = FX_NEW CBC_BarcodeRow((width + 4) * 17 + 1);\r
31     }\r
32     m_width = width * 17;\r
33     m_height = height + 2;\r
34     m_currentRow = 0;\r
35     m_outHeight = 0;\r
36     m_outWidth = 0;\r
37 }\r
38 CBC_BarcodeMatrix::~CBC_BarcodeMatrix()\r
39 {\r
40     for (int32_t i = 0; i < m_matrix.GetSize(); i++) {\r
41         delete (CBC_BarcodeRow*)m_matrix.GetAt(i);\r
42     }\r
43     m_matrix.RemoveAll();\r
44     m_matrixOut.RemoveAll();\r
45 }\r
46 void CBC_BarcodeMatrix::set(int32_t x, int32_t y, uint8_t value)\r
47 {\r
48     ((CBC_BarcodeRow*)m_matrix[y])->set(x, value);\r
49 }\r
50 void CBC_BarcodeMatrix::setMatrix(int32_t x, int32_t y, FX_BOOL black)\r
51 {\r
52     set(x, y, (uint8_t) (black ? 1 : 0));\r
53 }\r
54 void CBC_BarcodeMatrix::startRow()\r
55 {\r
56     ++m_currentRow;\r
57 }\r
58 CBC_BarcodeRow* CBC_BarcodeMatrix::getCurrentRow()\r
59 {\r
60     return (CBC_BarcodeRow*)m_matrix[m_currentRow];\r
61 }\r
62 int32_t CBC_BarcodeMatrix::getWidth()\r
63 {\r
64     return m_outWidth;\r
65 }\r
66 int32_t CBC_BarcodeMatrix::getHeight()\r
67 {\r
68     return m_outHeight;\r
69 }\r
70 CFX_ByteArray& CBC_BarcodeMatrix::getMatrix()\r
71 {\r
72     return getScaledMatrix(1, 1);\r
73 }\r
74 CFX_ByteArray& CBC_BarcodeMatrix::getScaledMatrix(int32_t scale)\r
75 {\r
76     return getScaledMatrix(scale, scale);\r
77 }\r
78 CFX_ByteArray& CBC_BarcodeMatrix::getScaledMatrix(int32_t xScale, int32_t yScale)\r
79 {\r
80     int32_t yMax = m_height * yScale;\r
81     CFX_ByteArray bytearray;\r
82     bytearray.Copy(((CBC_BarcodeRow*)m_matrix[0])->getScaledRow(xScale));\r
83     int32_t xMax = bytearray.GetSize();\r
84     m_matrixOut.SetSize(xMax * yMax);\r
85     m_outWidth = xMax;\r
86     m_outHeight = yMax;\r
87     int32_t k = 0;\r
88     for (int32_t i = 0; i < yMax; i++) {\r
89         if (i != 0) {\r
90             bytearray.Copy(((CBC_BarcodeRow*)m_matrix[i / yScale])->getScaledRow(xScale));\r
91         }\r
92         k = i * xMax;\r
93         for (int32_t l = 0; l < xMax; l++) {\r
94             m_matrixOut[k + l] = bytearray.GetAt(l);\r
95         }\r
96     }\r
97     return m_matrixOut;\r
98 }\r