Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: core/include/fpdfapi/fpdf_page.h

Issue 1701073002: Split CPDF_PageObjectHolder off from CPDF_PageObjectList (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: m_pPage can never be null, remove checks. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/include/fpdfapi/fpdf_module.h ('k') | core/include/fpdfapi/fpdf_render.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_ 7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_
8 #define CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_ 8 #define CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_
9 9
10 #include <memory> 10 #include <memory>
11 11
12 #include "core/include/fpdfapi/fpdf_parser.h" 12 #include "core/include/fpdfapi/fpdf_parser.h"
13 #include "core/include/fpdfapi/fpdf_resource.h" 13 #include "core/include/fpdfapi/fpdf_resource.h"
14 #include "core/include/fxge/fx_dib.h" 14 #include "core/include/fxge/fx_dib.h"
15 15
16 class CPDF_Page; 16 class CPDF_Page;
17 class CPDF_Form; 17 class CPDF_Form;
18 class CPDF_ParseOptions; 18 class CPDF_ParseOptions;
19 class CPDF_PageObject; 19 class CPDF_PageObject;
20 class CPDF_PageRenderCache; 20 class CPDF_PageRenderCache;
21 class CPDF_StreamFilter; 21 class CPDF_StreamFilter;
22 class CPDF_AllStates; 22 class CPDF_AllStates;
23 class CPDF_ContentParser; 23 class CPDF_ContentParser;
24 class CPDF_StreamContentParser; 24 class CPDF_StreamContentParser;
25
25 #define PDFTRANS_GROUP 0x0100 26 #define PDFTRANS_GROUP 0x0100
26 #define PDFTRANS_ISOLATED 0x0200 27 #define PDFTRANS_ISOLATED 0x0200
27 #define PDFTRANS_KNOCKOUT 0x0400 28 #define PDFTRANS_KNOCKOUT 0x0400
28 29
29 class CPDF_PageObjectList { 30 class CPDF_PageObjectList : public CFX_PtrList {
30 public: 31 public:
31 CPDF_PageObjectList(); 32 explicit CPDF_PageObjectList(int nBlockSize) : CFX_PtrList(nBlockSize) {}
32 ~CPDF_PageObjectList();
33
34 void ContinueParse(IFX_Pause* pPause);
35
36 FX_BOOL IsParsed() const { return m_ParseState == CONTENT_PARSED; }
37
38 FX_POSITION GetFirstObjectPosition() const {
39 return m_ObjectList.GetHeadPosition();
40 }
41
42 FX_POSITION GetLastObjectPosition() const {
43 return m_ObjectList.GetTailPosition();
44 }
45 33
46 CPDF_PageObject* GetNextObject(FX_POSITION& pos) const { 34 CPDF_PageObject* GetNextObject(FX_POSITION& pos) const {
47 return (CPDF_PageObject*)m_ObjectList.GetNext(pos); 35 return static_cast<CPDF_PageObject*>(GetNext(pos));
48 } 36 }
49 37
50 CPDF_PageObject* GetPrevObject(FX_POSITION& pos) const { 38 CPDF_PageObject* GetPrevObject(FX_POSITION& pos) const {
51 return (CPDF_PageObject*)m_ObjectList.GetPrev(pos); 39 return static_cast<CPDF_PageObject*>(GetPrev(pos));
52 } 40 }
53 41
54 CPDF_PageObject* GetObjectAt(FX_POSITION pos) const { 42 CPDF_PageObject* GetObjectAt(FX_POSITION pos) const {
55 return (CPDF_PageObject*)m_ObjectList.GetAt(pos); 43 return static_cast<CPDF_PageObject*>(GetAt(pos));
56 } 44 }
57 45
58 void AddTail(CPDF_PageObject* obj) { m_ObjectList.AddTail(obj); } 46 // Linear complexity, to be avoided except as needed by public APIs.
59 FX_DWORD CountObjects() const { return m_ObjectList.GetCount(); }
60
61 int GetObjectIndex(CPDF_PageObject* pObj) const;
62
63 CPDF_PageObject* GetObjectByIndex(int index) const; 47 CPDF_PageObject* GetObjectByIndex(int index) const;
64 48
65 FX_POSITION InsertObject(FX_POSITION posInsertAfter, 49 FX_POSITION InsertObject(FX_POSITION posInsertAfter,
66 CPDF_PageObject* pNewObject); 50 CPDF_PageObject* pNewObject);
51 };
67 52
68 void Transform(const CFX_Matrix& matrix); 53 class CPDF_PageObjectHolder {
54 public:
55 CPDF_PageObjectHolder();
56 ~CPDF_PageObjectHolder();
57
58 void ContinueParse(IFX_Pause* pPause);
59 FX_BOOL IsParsed() const { return m_ParseState == CONTENT_PARSED; }
60
61 CPDF_PageObjectList* GetPageObjectList() { return &m_PageObjectList; }
62 const CPDF_PageObjectList* GetPageObjectList() const {
63 return &m_PageObjectList;
64 }
69 65
70 FX_BOOL BackgroundAlphaNeeded() const { return m_bBackgroundAlphaNeeded; } 66 FX_BOOL BackgroundAlphaNeeded() const { return m_bBackgroundAlphaNeeded; }
71 void SetBackgroundAlphaNeeded(FX_BOOL needed) { 67 void SetBackgroundAlphaNeeded(FX_BOOL needed) {
72 m_bBackgroundAlphaNeeded = needed; 68 m_bBackgroundAlphaNeeded = needed;
73 } 69 }
74 70
75 FX_BOOL HasImageMask() const { return m_bHasImageMask; } 71 FX_BOOL HasImageMask() const { return m_bHasImageMask; }
76 void SetHasImageMask(FX_BOOL value) { m_bHasImageMask = value; } 72 void SetHasImageMask(FX_BOOL value) { m_bHasImageMask = value; }
73
74 void Transform(const CFX_Matrix& matrix);
77 CFX_FloatRect CalcBoundingBox() const; 75 CFX_FloatRect CalcBoundingBox() const;
78 76
79 CPDF_Dictionary* m_pFormDict; 77 CPDF_Dictionary* m_pFormDict;
80 CPDF_Stream* m_pFormStream; 78 CPDF_Stream* m_pFormStream;
81 CPDF_Document* m_pDocument; 79 CPDF_Document* m_pDocument;
82 CPDF_Dictionary* m_pPageResources; 80 CPDF_Dictionary* m_pPageResources;
83 CPDF_Dictionary* m_pResources; 81 CPDF_Dictionary* m_pResources;
84 CFX_FloatRect m_BBox; 82 CFX_FloatRect m_BBox;
85 int m_Transparency; 83 int m_Transparency;
86 84
87 protected: 85 protected:
88 enum ParseState { CONTENT_NOT_PARSED, CONTENT_PARSING, CONTENT_PARSED }; 86 enum ParseState { CONTENT_NOT_PARSED, CONTENT_PARSING, CONTENT_PARSED };
89 87
90 void LoadTransInfo(); 88 void LoadTransInfo();
91 89
92 FX_BOOL m_bBackgroundAlphaNeeded; 90 FX_BOOL m_bBackgroundAlphaNeeded;
93 FX_BOOL m_bHasImageMask; 91 FX_BOOL m_bHasImageMask;
94 ParseState m_ParseState; 92 ParseState m_ParseState;
95 std::unique_ptr<CPDF_ContentParser> m_pParser; 93 std::unique_ptr<CPDF_ContentParser> m_pParser;
96 CFX_PtrList m_ObjectList; 94 CPDF_PageObjectList m_PageObjectList;
97 }; 95 };
98 96
99 class CPDF_Page : public CPDF_PageObjectList, public CFX_PrivateData { 97 class CPDF_Page : public CPDF_PageObjectHolder, public CFX_PrivateData {
100 public: 98 public:
101 CPDF_Page(); 99 CPDF_Page();
102 ~CPDF_Page(); 100 ~CPDF_Page();
103 101
104 void Load(CPDF_Document* pDocument, 102 void Load(CPDF_Document* pDocument,
105 CPDF_Dictionary* pPageDict, 103 CPDF_Dictionary* pPageDict,
106 FX_BOOL bPageCache = TRUE); 104 FX_BOOL bPageCache = TRUE);
107 105
108 void ParseContent(CPDF_ParseOptions* pOptions); 106 void ParseContent(CPDF_ParseOptions* pOptions);
109 107
(...skipping 25 matching lines...) Expand all
135 CPDF_ParseOptions(); 133 CPDF_ParseOptions();
136 134
137 FX_BOOL m_bTextOnly; 135 FX_BOOL m_bTextOnly;
138 136
139 FX_BOOL m_bMarkedContent; 137 FX_BOOL m_bMarkedContent;
140 138
141 FX_BOOL m_bSeparateForm; 139 FX_BOOL m_bSeparateForm;
142 140
143 FX_BOOL m_bDecodeInlineImage; 141 FX_BOOL m_bDecodeInlineImage;
144 }; 142 };
145 class CPDF_Form : public CPDF_PageObjectList { 143 class CPDF_Form : public CPDF_PageObjectHolder {
146 public: 144 public:
147 CPDF_Form(CPDF_Document* pDocument, 145 CPDF_Form(CPDF_Document* pDocument,
148 CPDF_Dictionary* pPageResources, 146 CPDF_Dictionary* pPageResources,
149 CPDF_Stream* pFormStream, 147 CPDF_Stream* pFormStream,
150 CPDF_Dictionary* pParentResources = NULL); 148 CPDF_Dictionary* pParentResources = NULL);
151 149
152 ~CPDF_Form(); 150 ~CPDF_Form();
153 151
154 void StartParse(CPDF_AllStates* pGraphicStates, 152 void StartParse(CPDF_AllStates* pGraphicStates,
155 CFX_Matrix* pParentMatrix, 153 CFX_Matrix* pParentMatrix,
(...skipping 25 matching lines...) Expand all
181 CFX_Matrix& matrix); 179 CFX_Matrix& matrix);
182 CFX_ByteString RealizeResource(CPDF_Object* pResourceObj, 180 CFX_ByteString RealizeResource(CPDF_Object* pResourceObj,
183 const FX_CHAR* szType); 181 const FX_CHAR* szType);
184 182
185 CPDF_Page* m_pPage; 183 CPDF_Page* m_pPage;
186 CPDF_Document* m_pDocument; 184 CPDF_Document* m_pDocument;
187 CFX_ArrayTemplate<CPDF_PageObject*> m_pageObjects; 185 CFX_ArrayTemplate<CPDF_PageObject*> m_pageObjects;
188 }; 186 };
189 187
190 #endif // CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_ 188 #endif // CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_
OLDNEW
« no previous file with comments | « core/include/fpdfapi/fpdf_module.h ('k') | core/include/fpdfapi/fpdf_render.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698