Initial commit.
[pdfium.git] / core / include / fpdfapi / fpdf_page.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 _FPDF_PAGE_\r
8 #define _FPDF_PAGE_\r
9 #ifndef _FPDF_PARSER_\r
10 #include "fpdf_parser.h"\r
11 #endif\r
12 #ifndef _FPDF_RESOURCE_\r
13 #include "fpdf_resource.h"\r
14 #endif\r
15 #ifndef _FX_DIB_H_\r
16 #include "../fxge/fx_dib.h"\r
17 #endif\r
18 class CPDF_PageObjects;\r
19 class CPDF_Page;\r
20 class CPDF_Form;\r
21 class CPDF_ParseOptions;\r
22 class CPDF_PageObject;\r
23 class CPDF_PageRenderCache;\r
24 class CPDF_StreamFilter;\r
25 class CPDF_AllStates;\r
26 class CPDF_ContentParser;\r
27 class CPDF_StreamContentParser;\r
28 class CPDF_ResourceNaming;\r
29 #define PDFTRANS_GROUP                  0x0100\r
30 #define PDFTRANS_ISOLATED               0x0200\r
31 #define PDFTRANS_KNOCKOUT               0x0400\r
32 #define PDF_CONTENT_NOT_PARSED  0\r
33 #define PDF_CONTENT_PARSING             1\r
34 #define PDF_CONTENT_PARSED              2\r
35 class CPDF_PageObjects : public CFX_Object\r
36 {\r
37 public:\r
38 \r
39     CPDF_PageObjects(FX_BOOL bReleaseMembers = TRUE);\r
40 \r
41     ~CPDF_PageObjects();\r
42 \r
43 \r
44 \r
45 \r
46     void                                ContinueParse(IFX_Pause* pPause);\r
47 \r
48     int                                 GetParseState() const\r
49     {\r
50         return m_ParseState;\r
51     }\r
52 \r
53     FX_BOOL                             IsParsed() const\r
54     {\r
55         return m_ParseState == PDF_CONTENT_PARSED;\r
56     }\r
57 \r
58     int                                 EstimateParseProgress() const;\r
59 \r
60 \r
61 \r
62 \r
63     FX_POSITION                 GetFirstObjectPosition() const\r
64     {\r
65         return m_ObjectList.GetHeadPosition();\r
66     }\r
67 \r
68     FX_POSITION                 GetLastObjectPosition() const\r
69     {\r
70         return m_ObjectList.GetTailPosition();\r
71     }\r
72 \r
73     CPDF_PageObject*    GetNextObject(FX_POSITION& pos) const\r
74     {\r
75         return (CPDF_PageObject*)m_ObjectList.GetNext(pos);\r
76     }\r
77 \r
78     CPDF_PageObject*    GetPrevObject(FX_POSITION& pos) const\r
79     {\r
80         return (CPDF_PageObject*)m_ObjectList.GetPrev(pos);\r
81     }\r
82 \r
83     CPDF_PageObject*    GetObjectAt(FX_POSITION pos) const\r
84     {\r
85         return (CPDF_PageObject*)m_ObjectList.GetAt(pos);\r
86     }\r
87 \r
88     FX_DWORD                    CountObjects() const\r
89     {\r
90         return m_ObjectList.GetCount();\r
91     }\r
92 \r
93     int                                 GetObjectIndex(CPDF_PageObject* pObj) const;\r
94 \r
95     CPDF_PageObject*    GetObjectByIndex(int index) const;\r
96 \r
97 \r
98 \r
99 \r
100 \r
101     FX_POSITION                 InsertObject(FX_POSITION posInsertAfter, CPDF_PageObject* pNewObject);\r
102 \r
103     void                                Transform(const CFX_AffineMatrix& matrix);\r
104 \r
105     FX_BOOL                             BackgroundAlphaNeeded() const\r
106     {\r
107         return m_bBackgroundAlphaNeeded;\r
108     }\r
109 \r
110     CFX_FloatRect               CalcBoundingBox() const;\r
111 \r
112     CPDF_Dictionary*    m_pFormDict;\r
113 \r
114     CPDF_Stream*                m_pFormStream;\r
115 \r
116     CPDF_Document*              m_pDocument;\r
117 \r
118     CPDF_Dictionary*    m_pPageResources;\r
119 \r
120     CPDF_Dictionary*    m_pResources;\r
121 \r
122     CFX_FloatRect               m_BBox;\r
123 \r
124     int                                 m_Transparency;\r
125 \r
126 protected:\r
127     friend class                CPDF_ContentParser;\r
128     friend class                CPDF_StreamContentParser;\r
129     friend class                CPDF_AllStates;\r
130 \r
131     CFX_PtrList                 m_ObjectList;\r
132 \r
133     FX_BOOL                             m_bBackgroundAlphaNeeded;\r
134 \r
135     FX_BOOL                             m_bReleaseMembers;\r
136     void                                LoadTransInfo();\r
137     void                ClearCacheObjects();\r
138 \r
139     CPDF_ContentParser* m_pParser;\r
140 \r
141     FX_BOOL                             m_ParseState;\r
142 };\r
143 class CPDF_Page : public CPDF_PageObjects, public CFX_PrivateData\r
144 {\r
145 public:\r
146 \r
147     CPDF_Page();\r
148 \r
149     ~CPDF_Page();\r
150 \r
151     void                                Load(CPDF_Document* pDocument, CPDF_Dictionary* pPageDict, FX_BOOL bPageCache = TRUE);\r
152 \r
153     void                                StartParse(CPDF_ParseOptions* pOptions = NULL, FX_BOOL bReParse = FALSE);\r
154 \r
155     void                                ParseContent(CPDF_ParseOptions* pOptions = NULL, FX_BOOL bReParse = FALSE);\r
156 \r
157     void                                GetDisplayMatrix(CFX_AffineMatrix& matrix, int xPos, int yPos,\r
158                                          int xSize, int ySize, int iRotate) const;\r
159 \r
160     FX_FLOAT                    GetPageWidth() const\r
161     {\r
162         return m_PageWidth;\r
163     }\r
164 \r
165     FX_FLOAT                    GetPageHeight() const\r
166     {\r
167         return m_PageHeight;\r
168     }\r
169 \r
170     CFX_FloatRect               GetPageBBox() const\r
171     {\r
172         return m_BBox;\r
173     }\r
174 \r
175     const CFX_AffineMatrix&     GetPageMatrix() const\r
176     {\r
177         return m_PageMatrix;\r
178     }\r
179 \r
180     CPDF_Object*                GetPageAttr(FX_BSTR name) const;\r
181 \r
182 \r
183 \r
184     CPDF_PageRenderCache*       GetRenderCache() const\r
185     {\r
186         return m_pPageRender;\r
187     }\r
188 \r
189     void                                ClearRenderCache();\r
190 \r
191 protected:\r
192     friend class                CPDF_ContentParser;\r
193 \r
194     FX_FLOAT                    m_PageWidth;\r
195 \r
196     FX_FLOAT                    m_PageHeight;\r
197 \r
198     CFX_AffineMatrix    m_PageMatrix;\r
199 \r
200     CPDF_PageRenderCache*       m_pPageRender;\r
201 };\r
202 class CPDF_ParseOptions : public CFX_Object\r
203 {\r
204 public:\r
205 \r
206     CPDF_ParseOptions();\r
207 \r
208     FX_BOOL                             m_bTextOnly;\r
209 \r
210     FX_BOOL                             m_bMarkedContent;\r
211 \r
212     FX_BOOL                             m_bSeparateForm;\r
213 \r
214     FX_BOOL                             m_bDecodeInlineImage;\r
215 };\r
216 class CPDF_Form : public CPDF_PageObjects\r
217 {\r
218 public:\r
219 \r
220     CPDF_Form(CPDF_Document* pDocument, CPDF_Dictionary* pPageResources, CPDF_Stream* pFormStream, CPDF_Dictionary* pParentResources = NULL);\r
221 \r
222     ~CPDF_Form();\r
223 \r
224     void                                StartParse(CPDF_AllStates* pGraphicStates,  CFX_AffineMatrix* pParentMatrix,\r
225                                    CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level = 0);\r
226 \r
227     void                                ParseContent(CPDF_AllStates* pGraphicStates, CFX_AffineMatrix* pParentMatrix,\r
228                                      CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level = 0);\r
229 \r
230     CPDF_Form*                  Clone() const;\r
231 };\r
232 class CPDF_PageContentGenerate : public CFX_Object\r
233 {\r
234 public:\r
235     CPDF_PageContentGenerate(CPDF_Page* pPage);\r
236     ~CPDF_PageContentGenerate();\r
237     FX_BOOL InsertPageObject(CPDF_PageObject* pPageObject);\r
238     void GenerateContent();\r
239     void TransformContent(CFX_Matrix& matrix);\r
240 protected:\r
241     void            ProcessImage(CFX_ByteTextBuf& buf, CPDF_ImageObject* pImageObj);\r
242     void            ProcessForm(CFX_ByteTextBuf& buf, FX_LPCBYTE data, FX_DWORD size, CFX_Matrix& matrix);\r
243     CFX_ByteString  RealizeResource(CPDF_Object* pResourceObj, const FX_CHAR* szType);\r
244 private:\r
245     CPDF_Page*      m_pPage;\r
246     CPDF_Document*  m_pDocument;\r
247     CFX_PtrArray    m_pageObjects;\r
248 };\r
249 #endif\r