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