Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fxgraphics / src / fx_metafile_interpreter.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 "pre.h"\r
8 #include "../include/fx_graphics.h"\r
9 #include "fx_metafile_interpreter.h"\r
10 CFX_MetafileInterpreter::CFX_MetafileInterpreter()\r
11 {\r
12     _element = NULL;\r
13 }\r
14 CFX_MetafileInterpreter::~CFX_MetafileInterpreter()\r
15 {\r
16     _element = NULL;\r
17 }\r
18 FX_BOOL CFX_MetafileInterpreter::SetCurrentElement(CXML_Element * element)\r
19 {\r
20     _FX_RETURN_VALUE_IF_FAIL(element, FALSE);\r
21     _element = element;\r
22     return TRUE;\r
23 }\r
24 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetLineCap(int32_t & lineCap)\r
25 {\r
26     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
27     CXML_Element * lineCapElement = _element->GetElement(0);\r
28     _FX_RETURN_VALUE_IF_FAIL(lineCapElement, FALSE);\r
29     lineCap = lineCapElement->GetAttrInteger("CFX_GraphStateData::LineCap");\r
30     return TRUE;\r
31 }\r
32 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetLineDash(FX_FLOAT & dashPhase,\r
33         int32_t &       dashArray,\r
34         int32_t &       dashCount)\r
35 {\r
36     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
37     CXML_Element * dashPhaseElement = _element->GetElement(0);\r
38     _FX_RETURN_VALUE_IF_FAIL(dashPhaseElement, FALSE);\r
39     dashPhase = dashPhaseElement->GetAttrFloat("FX_FLOAT");\r
40     CXML_Element * dashArrayElement = _element->GetElement(1);\r
41     _FX_RETURN_VALUE_IF_FAIL(dashArrayElement, FALSE);\r
42     dashArray = dashArrayElement->GetAttrInteger("FX_FLOAT *");\r
43     CXML_Element * dashCountElement = _element->GetElement(2);\r
44     _FX_RETURN_VALUE_IF_FAIL(dashCountElement, FALSE);\r
45     dashCount = dashCountElement->GetAttrInteger("int32_t");\r
46     return TRUE;\r
47 }\r
48 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetLineDash(int32_t & dashStyle)\r
49 {\r
50     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
51     CXML_Element * dashStyleElement = _element->GetElement(0);\r
52     _FX_RETURN_VALUE_IF_FAIL(dashStyleElement, FALSE);\r
53     dashStyle = dashStyleElement->GetAttrInteger("FX_DashStyle");\r
54     return TRUE;\r
55 }\r
56 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetLineJoin(int32_t & lineJoin)\r
57 {\r
58     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
59     CXML_Element * lineJoinElement = _element->GetElement(0);\r
60     _FX_RETURN_VALUE_IF_FAIL(lineJoinElement, FALSE);\r
61     lineJoin = lineJoinElement->GetAttrInteger("CFX_GraphStateData::LineJoin");\r
62     return TRUE;\r
63 }\r
64 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetMiterLimit(FX_FLOAT & miterLimit)\r
65 {\r
66     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
67     CXML_Element * miterLimitElement = _element->GetElement(0);\r
68     _FX_RETURN_VALUE_IF_FAIL(miterLimitElement, FALSE);\r
69     miterLimit = miterLimitElement->GetAttrFloat("FX_FLOAT");\r
70     return TRUE;\r
71 }\r
72 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetLineWidth(FX_FLOAT & lineWidth,\r
73         int32_t & isActOnDash)\r
74 {\r
75     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
76     CXML_Element * lineWidthElement = _element->GetElement(0);\r
77     _FX_RETURN_VALUE_IF_FAIL(lineWidthElement, FALSE);\r
78     lineWidth = lineWidthElement->GetAttrFloat("FX_FLOAT");\r
79     CXML_Element * isActOnDashElement = _element->GetElement(1);\r
80     _FX_RETURN_VALUE_IF_FAIL(isActOnDashElement, FALSE);\r
81     isActOnDash = isActOnDashElement->GetAttrInteger("FX_BOOL");\r
82     return TRUE;\r
83 }\r
84 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetStrokeColor(int32_t & color)\r
85 {\r
86     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
87     CXML_Element * colorElement = _element->GetElement(0);\r
88     _FX_RETURN_VALUE_IF_FAIL(colorElement, FALSE);\r
89     color = colorElement->GetAttrInteger("CFX_Color *");\r
90     return TRUE;\r
91 }\r
92 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetFillColor(int32_t & color)\r
93 {\r
94     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
95     CXML_Element * colorElement = _element->GetElement(0);\r
96     _FX_RETURN_VALUE_IF_FAIL(colorElement, FALSE);\r
97     color = colorElement->GetAttrInteger("CFX_Color *");\r
98     return TRUE;\r
99 }\r
100 FX_BOOL CFX_MetafileInterpreter::ParamOf_StrokePath(int32_t & path, int32_t & matrix)\r
101 {\r
102     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
103     CXML_Element * pathElement = _element->GetElement(0);\r
104     _FX_RETURN_VALUE_IF_FAIL(pathElement, FALSE);\r
105     path = pathElement->GetAttrInteger("CFX_Path *");\r
106     CXML_Element * matrixElement = _element->GetElement(1);\r
107     _FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);\r
108     matrix = matrixElement->GetAttrInteger("CFX_Matrix *");\r
109     return TRUE;\r
110 }\r
111 FX_BOOL CFX_MetafileInterpreter::ParamOf_FillPath(int32_t & path,\r
112         int32_t & fillMode,\r
113         int32_t & matrix)\r
114 {\r
115     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
116     CXML_Element * pathElement = _element->GetElement(0);\r
117     _FX_RETURN_VALUE_IF_FAIL(pathElement, FALSE);\r
118     path = pathElement->GetAttrInteger("CFX_Path *");\r
119     CXML_Element * fillModeElement = _element->GetElement(1);\r
120     _FX_RETURN_VALUE_IF_FAIL(fillModeElement, FALSE);\r
121     fillMode = fillModeElement->GetAttrInteger("FX_FillMode");\r
122     CXML_Element * matrixElement = _element->GetElement(2);\r
123     _FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);\r
124     matrix = matrixElement->GetAttrInteger("CFX_Matrix *");\r
125     return TRUE;\r
126 }\r
127 FX_BOOL CFX_MetafileInterpreter::ParamOf_ClipPath(int32_t & path,\r
128         int32_t & fillMode,\r
129         int32_t & matrix)\r
130 {\r
131     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
132     CXML_Element * pathElement = _element->GetElement(0);\r
133     _FX_RETURN_VALUE_IF_FAIL(pathElement, FALSE);\r
134     path = pathElement->GetAttrInteger("CFX_Path *");\r
135     CXML_Element * fillModeElement = _element->GetElement(1);\r
136     _FX_RETURN_VALUE_IF_FAIL(fillModeElement, FALSE);\r
137     fillMode = fillModeElement->GetAttrInteger("FX_FillMode");\r
138     CXML_Element * matrixElement = _element->GetElement(2);\r
139     _FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);\r
140     matrix = matrixElement->GetAttrInteger("CFX_Matrix *");\r
141     return TRUE;\r
142 }\r
143 FX_BOOL CFX_MetafileInterpreter::ParamOf_DrawImage(int32_t & source,\r
144         int32_t & point,\r
145         int32_t & matrix)\r
146 {\r
147     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
148     CXML_Element * sourceElement = _element->GetElement(0);\r
149     _FX_RETURN_VALUE_IF_FAIL(sourceElement, FALSE);\r
150     source = sourceElement->GetAttrInteger("CFX_DIBSource *");\r
151     CXML_Element * pointElement = _element->GetElement(1);\r
152     _FX_RETURN_VALUE_IF_FAIL(pointElement, FALSE);\r
153     point = pointElement->GetAttrInteger("CFX_PointF *");\r
154     CXML_Element * matrixElement = _element->GetElement(2);\r
155     _FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);\r
156     matrix = matrixElement->GetAttrInteger("CFX_Matrix *");\r
157     return TRUE;\r
158 }\r
159 FX_BOOL CFX_MetafileInterpreter::ParamOf_StretchImage(int32_t & source,\r
160         int32_t & rect,\r
161         int32_t & matrix)\r
162 {\r
163     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
164     CXML_Element * sourceElement = _element->GetElement(0);\r
165     _FX_RETURN_VALUE_IF_FAIL(sourceElement, FALSE);\r
166     source = sourceElement->GetAttrInteger("CFX_DIBSource *");\r
167     CXML_Element * rectElement = _element->GetElement(1);\r
168     _FX_RETURN_VALUE_IF_FAIL(rectElement, FALSE);\r
169     rect = rectElement->GetAttrInteger("CFX_RectF *");\r
170     CXML_Element * matrixElement = _element->GetElement(2);\r
171     _FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);\r
172     matrix = matrixElement->GetAttrInteger("CFX_Matrix *");\r
173     return TRUE;\r
174 }\r
175 FX_BOOL CFX_MetafileInterpreter::ParamOf_ConcatMatrix(int32_t & matrix)\r
176 {\r
177     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
178     CXML_Element * matrixElement = _element->GetElement(0);\r
179     _FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);\r
180     matrix = matrixElement->GetAttrInteger("CFX_Matrix *");\r
181     return TRUE;\r
182 }\r
183 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetClipRect(int32_t & rect)\r
184 {\r
185     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
186     CXML_Element * rectElement = _element->GetElement(0);\r
187     _FX_RETURN_VALUE_IF_FAIL(rectElement, FALSE);\r
188     rect = rectElement->GetAttrInteger("CFX_RectF *");\r
189     return TRUE;\r
190 }\r
191 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetFont(int32_t & font)\r
192 {\r
193     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
194     CXML_Element * fontElement = _element->GetElement(0);\r
195     _FX_RETURN_VALUE_IF_FAIL(fontElement, FALSE);\r
196     font = fontElement->GetAttrInteger("CFX_Font *");\r
197     return TRUE;\r
198 }\r
199 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetFontSize(FX_FLOAT & size)\r
200 {\r
201     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
202     CXML_Element * sizeElement = _element->GetElement(0);\r
203     _FX_RETURN_VALUE_IF_FAIL(sizeElement, FALSE);\r
204     size = sizeElement->GetAttrFloat("FX_FLOAT");\r
205     return TRUE;\r
206 }\r
207 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetFontHScale(FX_FLOAT & scale)\r
208 {\r
209     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
210     CXML_Element * scaleElement = _element->GetElement(0);\r
211     _FX_RETURN_VALUE_IF_FAIL(scaleElement, FALSE);\r
212     scale = scaleElement->GetAttrFloat("FX_FLOAT");\r
213     return TRUE;\r
214 }\r
215 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetCharSpacing(FX_FLOAT & spacing)\r
216 {\r
217     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
218     CXML_Element * spacingElement = _element->GetElement(0);\r
219     _FX_RETURN_VALUE_IF_FAIL(spacingElement, FALSE);\r
220     spacing = spacingElement->GetAttrFloat("FX_FLOAT");\r
221     return TRUE;\r
222 }\r
223 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetTextDrawingMode(int32_t & mode)\r
224 {\r
225     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
226     CXML_Element * modeElement = _element->GetElement(0);\r
227     _FX_RETURN_VALUE_IF_FAIL(modeElement, FALSE);\r
228     mode = modeElement->GetAttrInteger("int32_t");\r
229     return TRUE;\r
230 }\r
231 FX_BOOL CFX_MetafileInterpreter::ParamOf_SetText(int32_t &      point,\r
232         int32_t &       text,\r
233         int32_t &       matrix)\r
234 {\r
235     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
236     CXML_Element * pointElement = _element->GetElement(0);\r
237     _FX_RETURN_VALUE_IF_FAIL(pointElement, FALSE);\r
238     point = pointElement->GetAttrInteger("CFX_PointF *");\r
239     CXML_Element * textElement = _element->GetElement(1);\r
240     _FX_RETURN_VALUE_IF_FAIL(textElement, FALSE);\r
241     text = textElement->GetAttrInteger("CFX_WideString *");\r
242     CXML_Element * matrixElement = _element->GetElement(2);\r
243     _FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);\r
244     matrix = matrixElement->GetAttrInteger("CFX_Matrix *");\r
245     return TRUE;\r
246 }\r
247 FX_BOOL CFX_MetafileInterpreter::ParamOf_Transfer(int32_t & graphics, int32_t & matrix)\r
248 {\r
249     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
250     CXML_Element * graphicsElement = _element->GetElement(0);\r
251     _FX_RETURN_VALUE_IF_FAIL(graphicsElement, FALSE);\r
252     graphics = graphicsElement->GetAttrInteger("CFX_Graphics *");\r
253     CXML_Element * matrixElement = _element->GetElement(1);\r
254     _FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);\r
255     matrix = matrixElement->GetAttrInteger("CFX_Matrix *");\r
256     return TRUE;\r
257 }\r
258 FX_BOOL CFX_MetafileInterpreter::ParamOf_Transfer(int32_t & graphics,\r
259         FX_FLOAT & srcLeft,\r
260         FX_FLOAT & srcTop,\r
261         int32_t & dstRect,\r
262         int32_t & matrix)\r
263 {\r
264     _FX_RETURN_VALUE_IF_FAIL(_element, FALSE);\r
265     CXML_Element * graphicsElement = _element->GetElement(0);\r
266     _FX_RETURN_VALUE_IF_FAIL(graphicsElement, FALSE);\r
267     graphics = graphicsElement->GetAttrInteger("CFX_Graphics *");\r
268     CXML_Element * srcLeftElement = _element->GetElement(2);\r
269     _FX_RETURN_VALUE_IF_FAIL(srcLeftElement, FALSE);\r
270     srcLeft = srcLeftElement->GetAttrFloat("FX_FLOAT");\r
271     CXML_Element * srcTopElement = _element->GetElement(3);\r
272     _FX_RETURN_VALUE_IF_FAIL(srcTopElement, FALSE);\r
273     srcTop = srcTopElement->GetAttrFloat("FX_FLOAT");\r
274     CXML_Element * dstRectElement = _element->GetElement(1);\r
275     _FX_RETURN_VALUE_IF_FAIL(dstRectElement, FALSE);\r
276     dstRect = dstRectElement->GetAttrInteger("CFX_RectF *");\r
277     CXML_Element * matrixElement = _element->GetElement(4);\r
278     _FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);\r
279     matrix = matrixElement->GetAttrInteger("CFX_Matrix *");\r
280     return TRUE;\r
281 }\r