Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fdp / src / fde / fde_object.h
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 #ifndef _FDE_BASEOBJECT_IMP\r
8 #define _FDE_BASEOBJECT_IMP\r
9 class CFDE_Pen : public IFDE_Pen, public CFX_Target\r
10 {\r
11 public:\r
12     CFDE_Pen()\r
13         : m_Color(0)\r
14         , m_iLineCap(0)\r
15         , m_iLineJoin(0)\r
16         , m_iDashStyle(0)\r
17         , m_fDashPhase(0)\r
18         , m_fMiterLimit(10)\r
19         , m_bAutoRelease(FALSE)\r
20         , m_pBrush(NULL)\r
21     {\r
22     }\r
23 \r
24     ~CFDE_Pen()\r
25     {\r
26         if (m_pBrush && m_bAutoRelease) {\r
27             m_pBrush->Release();\r
28         }\r
29     }\r
30     virtual void                                Release()\r
31     {\r
32         FDE_Delete this;\r
33     }\r
34 \r
35     virtual FX_INT32                    GetType() const\r
36     {\r
37         return m_pBrush ? m_pBrush->GetType() : FDE_PENTYPE_SolidColor;\r
38     }\r
39 \r
40     virtual FX_ARGB                             GetColor() const\r
41     {\r
42         return m_Color;\r
43     }\r
44     virtual void                                SetColor(FX_ARGB color)\r
45     {\r
46         m_Color = color;\r
47     }\r
48     virtual IFDE_Brush*                 GetBrush() const\r
49     {\r
50         return m_pBrush;\r
51     }\r
52     virtual void                                SetBrush(IFDE_Brush *pBrush, FX_BOOL bAutoRelease)\r
53     {\r
54         m_bAutoRelease = bAutoRelease;\r
55         m_pBrush = pBrush;\r
56         if (m_pBrush && m_pBrush->GetType() == FDE_BRUSHTYPE_Solid) {\r
57             m_Color = ((IFDE_SolidBrush*)m_pBrush)->GetColor();\r
58         }\r
59     }\r
60     virtual FX_INT32                    GetLineCap() const\r
61     {\r
62         return m_iLineCap;\r
63     }\r
64     virtual void                                SetLineCap(FX_INT32 iLineCap)\r
65     {\r
66         m_iLineCap = iLineCap;\r
67     }\r
68     virtual FX_INT32                    GetDashStyle() const\r
69     {\r
70         return m_iDashStyle;\r
71     }\r
72     virtual void                                SetDashStyle(FX_INT32 iDashStyle)\r
73     {\r
74         m_iDashStyle = iDashStyle;\r
75     }\r
76     virtual FX_FLOAT                    GetDashPhase() const\r
77     {\r
78         return m_fDashPhase;\r
79     }\r
80     virtual void                                SetDashPhase(FX_FLOAT fPhase)\r
81     {\r
82         m_fDashPhase = fPhase;\r
83     }\r
84     virtual FX_INT32                    CountDashArray() const\r
85     {\r
86         return m_DashArray.GetSize();\r
87     }\r
88     virtual FX_INT32                    GetDashArray(CFX_FloatArray &dashArray) const\r
89     {\r
90         dashArray.Copy(m_DashArray);\r
91         return dashArray.GetSize();\r
92     }\r
93     virtual void                                SetDashArray(const CFX_FloatArray &dashArray)\r
94     {\r
95         m_DashArray.Copy(dashArray);\r
96     }\r
97     virtual FX_INT32                    GetLineJoin() const\r
98     {\r
99         return m_iLineJoin;\r
100     }\r
101     virtual void                                SetLineJoin(FX_INT32 iLineJoin)\r
102     {\r
103         m_iLineJoin = iLineJoin;\r
104     }\r
105     virtual FX_FLOAT                    GetMiterLimit() const\r
106     {\r
107         return m_fMiterLimit;\r
108     }\r
109     virtual void                                SetMiterLimit(FX_FLOAT fMiterLimit)\r
110     {\r
111         m_fMiterLimit = fMiterLimit;\r
112     }\r
113     virtual FX_INT32                    CountCompoundPatterns() const\r
114     {\r
115         return m_CompoundPatterns.GetSize();\r
116     }\r
117     virtual FX_BOOL                             GetCompoundPatterns(CFDE_CompoundPatterns &compoundPatterns) const\r
118     {\r
119         return compoundPatterns.Copy(m_CompoundPatterns), TRUE;\r
120     }\r
121     virtual FX_BOOL                             SetCompoundPatterns(const CFDE_CompoundPatterns &compoundPatterns)\r
122     {\r
123         return m_CompoundPatterns.Copy(compoundPatterns), TRUE;\r
124     }\r
125 \r
126     FX_ARGB                                             m_Color;\r
127     FX_INT32                                    m_iLineCap;\r
128     FX_INT32                                    m_iLineJoin;\r
129     FX_INT32                                    m_iDashStyle;\r
130     FX_FLOAT                                    m_fDashPhase;\r
131     FX_FLOAT                                    m_fMiterLimit;\r
132     FX_BOOL                                             m_bAutoRelease;\r
133     IFDE_Brush                                  *m_pBrush;\r
134     CFX_FloatArray                              m_DashArray;\r
135     CFDE_CompoundPatterns               m_CompoundPatterns;\r
136 };\r
137 class CFDE_SolidBrush : public IFDE_SolidBrush, public CFX_Target\r
138 {\r
139 public:\r
140     CFDE_SolidBrush() : m_Color(0xFF000000)\r
141     {\r
142         m_Matrix.Reset();\r
143     }\r
144 \r
145     virtual void                                Release()\r
146     {\r
147         FDE_Delete this;\r
148     }\r
149     virtual FX_INT32                    GetType() const\r
150     {\r
151         return FDE_BRUSHTYPE_Solid;\r
152     }\r
153     virtual const CFX_Matrix&   GetMatrix() const\r
154     {\r
155         return m_Matrix;\r
156     }\r
157     virtual void                                ResetMatrix()\r
158     {\r
159         m_Matrix.Reset();\r
160     }\r
161     virtual void                                TranslateMatrix(FX_FLOAT dx, FX_FLOAT dy)\r
162     {\r
163         m_Matrix.Translate(dx, dy);\r
164     }\r
165     virtual void                                RotateMatrix(FX_FLOAT fRadian)\r
166     {\r
167         m_Matrix.Rotate(fRadian);\r
168     }\r
169     virtual void                                ScaleMatrix(FX_FLOAT sx, FX_FLOAT sy)\r
170     {\r
171         m_Matrix.Scale(sx, sy);\r
172     }\r
173     virtual void                                ConcatMatrix(const CFX_Matrix &matrix)\r
174     {\r
175         m_Matrix.Concat(matrix);\r
176     }\r
177     virtual void                                SetMatrix(const CFX_Matrix &matrix)\r
178     {\r
179         m_Matrix = matrix;\r
180     }\r
181     virtual FX_ARGB                             GetColor() const\r
182     {\r
183         return m_Color;\r
184     }\r
185     virtual void                                SetColor(FX_ARGB color)\r
186     {\r
187         m_Color = color;\r
188     }\r
189 \r
190     FX_ARGB                                             m_Color;\r
191     CFX_Matrix                                  m_Matrix;\r
192 };\r
193 class CFDE_HatchBrush : public IFDE_HatchBrush, public CFX_Target\r
194 {\r
195 public:\r
196     CFDE_HatchBrush() : m_iStyle(-1), m_BackColor(0), m_ForeColor(0)\r
197     {\r
198         m_Matrix.Reset();\r
199     }\r
200 \r
201     virtual void                                Release()\r
202     {\r
203         FDE_Delete this;\r
204     }\r
205     virtual FX_INT32                    GetType() const\r
206     {\r
207         return FDE_BRUSHTYPE_Hatch;\r
208     }\r
209     virtual const CFX_Matrix&   GetMatrix() const\r
210     {\r
211         return m_Matrix;\r
212     }\r
213     virtual void                                ResetMatrix()\r
214     {\r
215         m_Matrix.Reset();\r
216     }\r
217     virtual void                                TranslateMatrix(FX_FLOAT dx, FX_FLOAT dy)\r
218     {\r
219         m_Matrix.Translate(dx, dy);\r
220     }\r
221     virtual void                                RotateMatrix(FX_FLOAT fRadian)\r
222     {\r
223         m_Matrix.Rotate(fRadian);\r
224     }\r
225     virtual void                                ScaleMatrix(FX_FLOAT sx, FX_FLOAT sy)\r
226     {\r
227         m_Matrix.Scale(sx, sy);\r
228     }\r
229     virtual void                                ConcatMatrix(const CFX_Matrix &matrix)\r
230     {\r
231         m_Matrix.Concat(matrix);\r
232     }\r
233     virtual void                                SetMatrix(const CFX_Matrix &matrix)\r
234     {\r
235         m_Matrix = matrix;\r
236     }\r
237     virtual FX_ARGB                             GetColor(FX_BOOL bForegroundColor) const\r
238     {\r
239         return bForegroundColor ? m_ForeColor : m_BackColor;\r
240     }\r
241     virtual void                                SetColor(FX_ARGB color, FX_BOOL bForegroundColor)\r
242     {\r
243         if (bForegroundColor) {\r
244             m_ForeColor = color;\r
245         } else {\r
246             m_BackColor = color;\r
247         }\r
248     }\r
249 \r
250     virtual FX_INT32                    GetHatchStyle() const\r
251     {\r
252         return m_iStyle;\r
253     };\r
254     virtual FX_BOOL                             SetHatchStyle(FX_INT32 iHatchStyle)\r
255     {\r
256         m_iStyle = iHatchStyle;\r
257         return m_iStyle >= FDE_HATCHSTYLE_Min && m_iStyle <= FDE_HATCHSTYLE_Max;\r
258     }\r
259     FX_INT32                                    m_iStyle;\r
260     FX_ARGB                                             m_BackColor;\r
261     FX_ARGB                                             m_ForeColor;\r
262     CFX_Matrix                                  m_Matrix;\r
263 };\r
264 class CFDE_TextureBrush : public IFDE_TextureBrush, public CFX_Target\r
265 {\r
266 public:\r
267     CFDE_TextureBrush()\r
268         : m_iWrap(0)\r
269         , m_pImage(NULL)\r
270         , m_bAutoRelease(FALSE)\r
271     {\r
272         m_Matrix.Reset();\r
273     }\r
274 \r
275     virtual void                                Release()\r
276     {\r
277         FDE_Delete this;\r
278     }\r
279     virtual FX_INT32                    GetType() const\r
280     {\r
281         return FDE_BRUSHTYPE_Texture;\r
282     }\r
283     virtual const CFX_Matrix&   GetMatrix() const\r
284     {\r
285         return m_Matrix;\r
286     }\r
287     virtual void                                ResetMatrix()\r
288     {\r
289         m_Matrix.Reset();\r
290     }\r
291     virtual void                                TranslateMatrix(FX_FLOAT dx, FX_FLOAT dy)\r
292     {\r
293         m_Matrix.Translate(dx, dy);\r
294     }\r
295     virtual void                                RotateMatrix(FX_FLOAT fRadian)\r
296     {\r
297         m_Matrix.Rotate(fRadian);\r
298     }\r
299     virtual void                                ScaleMatrix(FX_FLOAT sx, FX_FLOAT sy)\r
300     {\r
301         m_Matrix.Scale(sx, sy);\r
302     }\r
303     virtual void                                ConcatMatrix(const CFX_Matrix &matrix)\r
304     {\r
305         m_Matrix.Concat(matrix);\r
306     }\r
307     virtual void                                SetMatrix(const CFX_Matrix &matrix)\r
308     {\r
309         m_Matrix = matrix;\r
310     }\r
311     virtual IFDE_Image*                 GetImage() const\r
312     {\r
313         return m_pImage;\r
314     }\r
315     virtual void                                SetImage(IFDE_Image *pImage, FX_BOOL bAutoRelease)\r
316     {\r
317         m_pImage = pImage;\r
318         m_bAutoRelease = bAutoRelease;\r
319     }\r
320     virtual FX_INT32                    GetWrapMode() const\r
321     {\r
322         return m_iWrap;\r
323     }\r
324     virtual void                                SetWrapMode(FX_INT32 iWrapMode)\r
325     {\r
326         m_iWrap = iWrapMode;\r
327     }\r
328     FX_INT32                                    m_iWrap;\r
329     IFDE_Image                                  *m_pImage;\r
330     FX_BOOL                                             m_bAutoRelease;\r
331     CFX_Matrix                                  m_Matrix;\r
332 };\r
333 class CFDE_LinearBrush : public IFDE_LinearGradientBrush, public CFX_Target\r
334 {\r
335 public:\r
336     CFDE_LinearBrush() : m_EndColor(0), m_StartColor(0), m_iWrapMode(0)\r
337     {\r
338         m_StartPoint.x = m_StartPoint.y = m_EndPoint.x = m_EndPoint.y = 0;\r
339         m_Matrix.Reset();\r
340     }\r
341 \r
342     virtual void                                Release()\r
343     {\r
344         FDE_Delete this;\r
345     }\r
346     virtual FX_INT32                    GetType() const\r
347     {\r
348         return FDE_BRUSHTYPE_LinearGradient;\r
349     }\r
350     virtual const CFX_Matrix&   GetMatrix() const\r
351     {\r
352         return m_Matrix;\r
353     }\r
354     virtual void                                ResetMatrix()\r
355     {\r
356         m_Matrix.Reset();\r
357     }\r
358     virtual void                                TranslateMatrix(FX_FLOAT dx, FX_FLOAT dy)\r
359     {\r
360         m_Matrix.Translate(dx, dy);\r
361     }\r
362     virtual void                                RotateMatrix(FX_FLOAT fRadian)\r
363     {\r
364         m_Matrix.Rotate(fRadian);\r
365     }\r
366     virtual void                                ScaleMatrix(FX_FLOAT sx, FX_FLOAT sy)\r
367     {\r
368         m_Matrix.Scale(sx, sy);\r
369     }\r
370     virtual void                                ConcatMatrix(const CFX_Matrix &matrix)\r
371     {\r
372         m_Matrix.Concat(matrix);\r
373     }\r
374     virtual void                                SetMatrix(const CFX_Matrix &matrix)\r
375     {\r
376         m_Matrix = matrix;\r
377     }\r
378     virtual void                                GetLinearPoints(CFX_PointF &startingPoint, CFX_PointF &endingPoint) const\r
379     {\r
380         startingPoint = m_StartPoint;\r
381         endingPoint = m_EndPoint;\r
382     }\r
383     virtual void                                SetLinearPoints(const CFX_PointF &startingPoint, const CFX_PointF &endingPoint)\r
384     {\r
385         m_StartPoint = startingPoint;\r
386         m_EndPoint = endingPoint;\r
387     }\r
388     virtual void                                GetLinearColors(FX_ARGB &startingColor, FX_ARGB &endingColor) const\r
389     {\r
390         startingColor = m_StartColor;\r
391         endingColor = m_EndColor;\r
392     }\r
393     virtual void                                SetLinearColors(const FX_ARGB &startingColor, const FX_ARGB &endingColor)\r
394     {\r
395         m_StartColor = startingColor;\r
396         m_EndColor = endingColor;\r
397     }\r
398     virtual FX_INT32                    CountGradientColors() const\r
399     {\r
400         return m_GradColors.GetSize();\r
401     }\r
402     virtual FX_BOOL                     GetGradientColors(CFDE_GradientColors &colors) const\r
403     {\r
404         return colors.Copy(m_GradColors), TRUE;\r
405     }\r
406     virtual FX_BOOL                     SetGradientColors(const CFDE_GradientColors &colors)\r
407     {\r
408         return m_GradColors.Copy(colors), TRUE;\r
409     }\r
410 \r
411     virtual FX_INT32                    GetWrapMode() const\r
412     {\r
413         return m_iWrapMode;\r
414     }\r
415     virtual void                                SetWrapMode(FX_INT32 iWrapMode)\r
416     {\r
417         m_iWrapMode = iWrapMode;\r
418     }\r
419     CFX_PointF                                  m_EndPoint;\r
420     CFX_PointF                                  m_StartPoint;\r
421     FX_ARGB                                             m_EndColor;\r
422     FX_ARGB                                             m_StartColor;\r
423     CFDE_GradientColors                 m_GradColors;\r
424     FX_INT32                                    m_iWrapMode;\r
425     CFX_Matrix                                  m_Matrix;\r
426 };\r
427 #endif\r