1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file.
4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#ifndef CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_
8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_
9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../fxge/fx_ge.h"
11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "fpdf_resource.h"
12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Path;
14e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ClipPathData;
15e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ClipPath;
16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ColorStateData;
17e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ColorState;
18e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_GraphState;
19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_TextStateData;
20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_TextState;
21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_GeneralStateData;
22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_GeneralState;
23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ContentMarkItem;
24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ContentMark;
25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_GraphicStates;
26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_PageObject;
27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_TextObject;
28e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_PathObject;
29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ImageObject;
30e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ShadingObject;
31e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_FormObject;
32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_InlineImages;
33e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovtypedef CFX_PathData CPDF_PathData;
34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Path : public CFX_CountRef<CFX_PathData>
35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					GetPointCount()
42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_PointCount;
44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
45e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
46e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					GetFlag(int index)
47e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_pPoints[index].m_Flag;
49e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
51e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetPointX(int index)
52e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
53e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_pPoints[index].m_PointX;
54e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
55e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
56e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetPointY(int index)
57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
58e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_pPoints[index].m_PointY;
59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
60e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
61e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
62e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
63e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
64e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_PATHPOINT*		GetPoints()
65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_pPoints;
67e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
68e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_FloatRect		GetBoundingBox() const
71e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
72e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->GetBoundingBox();
73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
75e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_FloatRect		GetBoundingBox(FX_FLOAT line_width, FX_FLOAT miter_limit) const
76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->GetBoundingBox(line_width, miter_limit);
78e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
79e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
80e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				Transform(const CFX_AffineMatrix* pMatrix)
81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
82e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        GetModify()->Transform(pMatrix);
83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				Append(CPDF_Path src, const CFX_AffineMatrix* pMatrix)
86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
87e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        m_pObject->Append(src.m_pObject, pMatrix);
88e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top)
91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        m_pObject->AppendRect(left, bottom, right, top);
93e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
94e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
95e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_BOOL				IsRect() const
96e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->IsRect();
98e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ClipPathData
101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ClipPathData();
105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ClipPathData(const CPDF_ClipPathData&);
107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    ~CPDF_ClipPathData();
109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetCount(int path_count, int text_count);
111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					m_PathCount;
114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Path*			m_pPathList;
116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_BYTE*			m_pTypeList;
118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					m_TextCount;
120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_TextObject**	m_pTextList;
122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ClipPath : public CFX_CountRef<CPDF_ClipPathData>
124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_DWORD			GetPathCount() const
128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_PathCount;
130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Path			GetPath(int i) const
133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_pPathList[i];
135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					GetClipType(int i) const
138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_pTypeList[i];
140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_DWORD			GetTextCount() const
143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_TextCount;
145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_TextObject*	GetText(int i) const
148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_pTextList[i];
150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_FloatRect		GetClipBox() const;
153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				AppendPath(CPDF_Path path, int type, FX_BOOL bAutoMerge);
155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				DeletePath(int layer_index);
157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				AppendTexts(CPDF_TextObject** pTexts, int count);
159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				Transform(const CFX_AffineMatrix& matrix);
161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ColorStateData
163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ColorStateData(): m_FillRGB(0), m_StrokeRGB(0) {}
167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ColorStateData(const CPDF_ColorStateData& src);
169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				Default();
171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Color			m_FillColor;
173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_DWORD			m_FillRGB;
175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Color			m_StrokeColor;
177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_DWORD			m_StrokeRGB;
179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ColorState : public CFX_CountRef<CPDF_ColorStateData>
181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Color*			GetFillColor() const
185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject ? &m_pObject->m_FillColor : NULL;
187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Color*			GetStrokeColor() const
190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject ? &m_pObject->m_StrokeColor : NULL;
192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetFillColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);
195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetStrokeColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);
197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetFillPattern(CPDF_Pattern* pattern, FX_FLOAT* pValue, int nValues);
199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetStrokePattern(CPDF_Pattern* pattern, FX_FLOAT* pValue, int nValues);
201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprivate:
202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetColor(CPDF_Color& color, FX_DWORD& rgb, CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);
203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovtypedef CFX_GraphStateData CPDF_GraphStateData;
205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_GraphState : public CFX_CountRef<CFX_GraphStateData>
206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_TextStateData
210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_TextStateData();
214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_TextStateData(const CPDF_TextStateData& src);
216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    ~CPDF_TextStateData();
218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Font*			m_pFont;
220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Document*		m_pDocument;
222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_FontSize;
224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_CharSpace;
226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_WordSpace;
228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT		m_Matrix[4];
230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					m_TextMode;
232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT		m_CTM[4];
234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_TextState : public CFX_CountRef<CPDF_TextStateData>
236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Font*			GetFont() const
240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_pFont;
242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetFont(CPDF_Font* pFont);
245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetFontSize() const
247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_FontSize;
249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT*			GetMatrix() const
252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject->m_Matrix;
254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetFontSizeV() const;
259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetFontSizeH() const;
261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetBaselineAngle() const;
263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetShearAngle() const;
265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_TransferFunc;
268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_GeneralStateData
269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_GeneralStateData();
273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_GeneralStateData(const CPDF_GeneralStateData& src);
275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    ~CPDF_GeneralStateData();
276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetBlendMode(FX_BSTR blend_mode);
278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    char				m_BlendMode[16];
280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					m_BlendType;
282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Object*		m_pSoftMask;
284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_SMaskMatrix[6];
286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_StrokeAlpha;
288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_FillAlpha;
290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Object*		m_pTR;
292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_TransferFunc*	m_pTransferFunc;
294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_Matrix			m_Matrix;
296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					m_RenderIntent;
298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_BOOL				m_StrokeAdjust;
300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_BOOL				m_AlphaSource;
302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_BOOL				m_TextKnockout;
304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_BOOL				m_StrokeOP;
306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_BOOL				m_FillOP;
308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					m_OPMode;
310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Object*		m_pBG;
312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Object*		m_pUCR;
314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Object*		m_pHT;
316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_Flatness;
318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_Smoothness;
320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_GeneralState : public CFX_CountRef<CPDF_GeneralStateData>
322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetRenderIntent(const CFX_ByteString& ri);
326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					GetBlendType() const
328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject ? m_pObject->m_BlendType : FXDIB_BLEND_NORMAL;
330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					GetAlpha(FX_BOOL bStroke) const
333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject ? FXSYS_round((bStroke ? m_pObject->m_StrokeAlpha : m_pObject->m_FillAlpha) * 255) : 255;
335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ContentMarkItem
338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    typedef enum {
342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        None,
343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        PropertiesDict,
344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        DirectDict,
345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        MCID
346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    } ParamType;
347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ContentMarkItem();
349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ContentMarkItem(const CPDF_ContentMarkItem& src);
351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    ~CPDF_ContentMarkItem();
353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    inline const CFX_ByteString&	GetName() const
355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_MarkName;
357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    inline ParamType	GetParamType() const
360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_ParamType;
362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    inline void*		GetParam() const
365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pParam;
367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    inline FX_BOOL		HasMCID() const;
370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    inline void			SetName(const CFX_ByteString& name)
372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        m_MarkName = name;
374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    inline void			SetParam(ParamType type, void* param)
377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        m_ParamType = type;
379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        m_pParam = param;
380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprivate:
382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_ByteString		m_MarkName;
384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    ParamType			m_ParamType;
386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void*				m_pParam;
388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ContentMarkData
390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ContentMarkData() { }
394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ContentMarkData(const CPDF_ContentMarkData& src);
396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    inline int			CountItems() const
398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_Marks.GetSize();
400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    inline CPDF_ContentMarkItem&	GetItem(int index) const
403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_Marks[index];
405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					GetMCID() const;
408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				AddMark(const CFX_ByteString& name, CPDF_Dictionary* pDict, FX_BOOL bDictNeedClone);
410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				DeleteLastMark();
412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprivate:
413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_ObjectArray<CPDF_ContentMarkItem>	m_Marks;
415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ContentMark : public CFX_CountRef<CPDF_ContentMarkData>
417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					GetMCID() const
421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_pObject ? m_pObject->GetMCID() : -1;
423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_BOOL				HasMark(FX_BSTR mark) const;
426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_BOOL				LookupMark(FX_BSTR mark, CPDF_Dictionary*& pDict) const;
428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PDFPAGE_TEXT		1
430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PDFPAGE_PATH		2
431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PDFPAGE_IMAGE		3
432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PDFPAGE_SHADING		4
433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PDFPAGE_FORM		5
434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PDFPAGE_INLINES		6
435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_GraphicStates
436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				CopyStates(const CPDF_GraphicStates& src);
440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				DefaultStates();
442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ClipPath		m_ClipPath;
444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_GraphState		m_GraphState;
446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ColorState		m_ColorState;
448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_TextState		m_TextState;
450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_GeneralState	m_GeneralState;
452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_PageObject : public CPDF_GraphicStates
454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    static CPDF_PageObject* Create(int type);
457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual ~CPDF_PageObject();
458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_PageObject*	Clone() const;
460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				Copy(const CPDF_PageObject* pSrcObject);
462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		Transform(const CFX_AffineMatrix& matrix) = 0;
464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				RemoveClipPath();
468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				AppendClipPath(CPDF_Path path, int type, FX_BOOL bAutoMerge);
470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				CopyClipPath(CPDF_PageObject* pObj);
472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				TransformClipPath(CFX_AffineMatrix& matrix);
474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				TransformGeneralState(CFX_AffineMatrix& matrix);
476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetColorState(CPDF_ColorState state)
479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        m_ColorState = state;
481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_RECT				GetBBox(const CFX_AffineMatrix* pMatrix) const;
484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					m_Type;
486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_Left;
488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_Right;
490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_Top;
492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_Bottom;
494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ContentMark	m_ContentMark;
496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprotected:
497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		CopyData(const CPDF_PageObject* pSrcObject) {}
499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				RecalcBBox();
501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_PageObject() {}
503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPDF_TextObjectItem  {
506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_DWORD			m_CharCode;
508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_OriginX;
510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_OriginY;
512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_TextObject : public CPDF_PageObject
514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_TextObject();
518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual ~CPDF_TextObject();
520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					CountItems() const
522e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_nChars;
524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const;
527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					CountChars() const;
529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				GetCharInfo(int index, FX_DWORD& charcode, FX_FLOAT& kerning) const;
531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				GetCharInfo(int index, CPDF_TextObjectItem* pInfo) const;
532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				GetCharRect(int index, CFX_FloatRect& rect) const;
534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetCharWidth(FX_DWORD charcode) const;
537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetSpaceCharWidth() const;
538e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetPosX() const
540e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_PosX;
542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetPosY() const
545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_PosY;
547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				GetTextMatrix(CFX_AffineMatrix* pMatrix) const;
550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Font*			GetFont() const
552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_TextState.GetFont();
554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			GetFontSize() const
557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return m_TextState.GetFontSize();
559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
561e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetEmpty();
562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetText(const CFX_ByteString& text);
564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetText(CFX_ByteString* pStrs, FX_FLOAT* pKerning, int nSegs);
566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetText(int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pKernings);
568e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetPosition(FX_FLOAT x, FX_FLOAT y);
570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetTextState(CPDF_TextState TextState);
572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		Transform(const CFX_AffineMatrix& matrix);
573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				CalcCharPos(FX_FLOAT* pPosArray) const;
575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetData(int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos, FX_FLOAT x, FX_FLOAT y);
579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				GetData(int& nChars, FX_DWORD*& pCharCodes, FX_FLOAT*& pCharPos)
581e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        nChars = m_nChars;
583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        pCharCodes = m_pCharCodes;
584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        pCharPos = m_pCharPos;
585e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				RecalcPositionData()
589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        CalcPositionData(NULL, NULL, 1);
591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprotected:
593e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		CopyData(const CPDF_PageObject* pSrcObject);
594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
595e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_PosX;
596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
597e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT			m_PosY;
598e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
599e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					m_nChars;
600e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
601e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_DWORD*			m_pCharCodes;
602e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
603e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_FLOAT*		m_pCharPos;
604e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
605e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetSegments(const CFX_ByteString* pStrs, FX_FLOAT* pKerning, int nSegs);
606e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
607e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				CalcPositionData(FX_FLOAT* pTextAdvanceX, FX_FLOAT* pTextAdvanceY, FX_FLOAT horz_scale, int level = 0);
608e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    friend class		CPDF_StreamContentParser;
609e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    friend class		CPDF_RenderStatus;
610e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    friend class		CPDF_QuickDrawer;
611e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    friend class		CPDF_TextRenderer;
612e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    friend class		CTextPage;
613e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    friend class		CPDF_ContentGenerator;
614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
615e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_PathObject : public CPDF_PageObject
616e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
617e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
618e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
619e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_PathObject()
620e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
621e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        m_Type = PDFPAGE_PATH;
622e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
623e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
624e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual ~CPDF_PathObject() {}
625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		Transform(const CFX_AffineMatrix& maxtrix);
626e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
627e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				SetGraphState(CPDF_GraphState GraphState);
628e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
629e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Path			m_Path;
630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
631e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int					m_FillType;
632e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
633e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    FX_BOOL				m_bStroke;
634e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
635e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_AffineMatrix	m_Matrix;
636e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
638e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				CalcBoundingBox();
639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprotected:
640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		CopyData(const CPDF_PageObject* pSrcObjet);
641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ImageObject : public CPDF_PageObject
643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ImageObject();
647e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual ~CPDF_ImageObject();
649e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		Transform(const CFX_AffineMatrix& matrix);
650e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
651e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Image*			m_pImage;
652e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_AffineMatrix	m_Matrix;
654e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
655e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				CalcBoundingBox();
656e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprivate:
657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		CopyData(const CPDF_PageObject* pSrcObjet);
658e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
659e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ShadingObject : public CPDF_PageObject
660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
663e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ShadingObject();
664e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
665e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual ~CPDF_ShadingObject();
666e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_ShadingPattern*	m_pShading;
668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
669e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_AffineMatrix	m_Matrix;
670e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
671e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Page*			m_pPage;
672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		Transform(const CFX_AffineMatrix& matrix);
673e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				CalcBoundingBox();
675e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprotected:
676e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		CopyData(const CPDF_PageObject* pSrcObjet);
677e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
678e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_FormObject : public CPDF_PageObject
679e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
680e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
681e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_FormObject()
683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    {
684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        m_Type = PDFPAGE_FORM;
685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        m_pForm = NULL;
686e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
688e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual ~CPDF_FormObject();
689e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		Transform(const CFX_AffineMatrix& matrix);
690e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
691e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Form*			m_pForm;
692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
693e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_AffineMatrix	m_FormMatrix;
694e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
695e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				CalcBoundingBox();
696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprotected:
697e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		CopyData(const CPDF_PageObject* pSrcObjet);
698e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
699e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_InlineImages : public CPDF_PageObject
700e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
701e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
703e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_InlineImages();
704e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
705e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual ~CPDF_InlineImages();
706e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
707e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CPDF_Stream*		m_pStream;
708e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
709e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_DIBitmap*		m_pBitmap;
710e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
711e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    CFX_ArrayTemplate<CFX_AffineMatrix>	m_Matrices;
712e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
713e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    void				AddMatrix(CFX_AffineMatrix& matrix);
714e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprotected:
715e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		Transform(const CFX_AffineMatrix& matrix) {}
716e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    virtual void		CopyData(const CPDF_PageObject* pSrcObjet) {}
717e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
718e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
719e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif  // CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_
720