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

Side by Side Diff: fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp

Issue 1799773002: Move fpdfsdk/src up to fpdfsdk/. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase to master Created 4 years, 9 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 | « fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp ('k') | fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 #include "core/include/fpdfapi/cpdf_document.h"
8 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
9 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h"
10 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
11 #include "fpdfsdk/include/fsdk_define.h"
12 #include "fpdfsdk/include/fsdk_mgr.h"
13
14 CPDFXFA_Page::CPDFXFA_Page(CPDFXFA_Document* pDoc, int page_index)
15 : m_pPDFPage(NULL),
16 m_pXFAPageView(NULL),
17 m_iPageIndex(page_index),
18 m_pDocument(pDoc),
19 m_iRef(1) {}
20
21 CPDFXFA_Page::~CPDFXFA_Page() {
22 if (m_pPDFPage)
23 delete m_pPDFPage;
24 m_pPDFPage = NULL;
25 m_pXFAPageView = NULL;
26 }
27
28 void CPDFXFA_Page::Release() {
29 m_iRef--;
30 if (m_iRef > 0)
31 return;
32
33 if (m_pDocument)
34 m_pDocument->RemovePage(this);
35
36 delete this;
37 }
38
39 FX_BOOL CPDFXFA_Page::LoadPDFPage() {
40 if (!m_pDocument)
41 return FALSE;
42 CPDF_Document* pPDFDoc = m_pDocument->GetPDFDoc();
43 if (pPDFDoc) {
44 CPDF_Dictionary* pDict = pPDFDoc->GetPage(m_iPageIndex);
45 if (pDict == NULL)
46 return FALSE;
47 if (m_pPDFPage) {
48 if (m_pPDFPage->m_pFormDict == pDict)
49 return TRUE;
50
51 delete m_pPDFPage;
52 m_pPDFPage = NULL;
53 }
54
55 m_pPDFPage = new CPDF_Page;
56 m_pPDFPage->Load(pPDFDoc, pDict);
57 m_pPDFPage->ParseContent(nullptr);
58 return TRUE;
59 }
60
61 return FALSE;
62 }
63
64 FX_BOOL CPDFXFA_Page::LoadXFAPageView() {
65 if (!m_pDocument)
66 return FALSE;
67 IXFA_Doc* pXFADoc = m_pDocument->GetXFADoc();
68 if (!pXFADoc)
69 return FALSE;
70
71 IXFA_DocView* pXFADocView = m_pDocument->GetXFADocView();
72 if (!pXFADocView)
73 return FALSE;
74
75 IXFA_PageView* pPageView = pXFADocView->GetPageView(m_iPageIndex);
76 if (!pPageView)
77 return FALSE;
78
79 if (m_pXFAPageView == pPageView)
80 return TRUE;
81
82 m_pXFAPageView = pPageView;
83 (void)m_pXFAPageView->LoadPageView(nullptr);
84 return TRUE;
85 }
86
87 FX_BOOL CPDFXFA_Page::LoadPage() {
88 if (!m_pDocument || m_iPageIndex < 0)
89 return FALSE;
90
91 int iDocType = m_pDocument->GetDocType();
92 switch (iDocType) {
93 case DOCTYPE_PDF:
94 case DOCTYPE_STATIC_XFA: {
95 return LoadPDFPage();
96 }
97 case DOCTYPE_DYNAMIC_XFA: {
98 return LoadXFAPageView();
99 }
100 default:
101 return FALSE;
102 }
103
104 return FALSE;
105 }
106
107 FX_BOOL CPDFXFA_Page::LoadPDFPage(CPDF_Dictionary* pageDict) {
108 if (!m_pDocument || m_iPageIndex < 0 || !pageDict)
109 return FALSE;
110
111 if (m_pPDFPage)
112 delete m_pPDFPage;
113
114 m_pPDFPage = new CPDF_Page();
115 m_pPDFPage->Load(m_pDocument->GetPDFDoc(), pageDict);
116 m_pPDFPage->ParseContent(nullptr);
117
118 return TRUE;
119 }
120
121 FX_FLOAT CPDFXFA_Page::GetPageWidth() {
122 if (!m_pPDFPage && !m_pXFAPageView)
123 return 0.0f;
124
125 int nDocType = m_pDocument->GetDocType();
126 switch (nDocType) {
127 case DOCTYPE_DYNAMIC_XFA: {
128 if (m_pXFAPageView) {
129 CFX_RectF rect;
130 m_pXFAPageView->GetPageViewRect(rect);
131 return rect.width;
132 }
133 } break;
134 case DOCTYPE_STATIC_XFA:
135 case DOCTYPE_PDF: {
136 if (m_pPDFPage)
137 return m_pPDFPage->GetPageWidth();
138 } break;
139 default:
140 return 0.0f;
141 }
142
143 return 0.0f;
144 }
145
146 FX_FLOAT CPDFXFA_Page::GetPageHeight() {
147 if (!m_pPDFPage && !m_pXFAPageView)
148 return 0.0f;
149
150 int nDocType = m_pDocument->GetDocType();
151 switch (nDocType) {
152 case DOCTYPE_PDF:
153 case DOCTYPE_STATIC_XFA: {
154 if (m_pPDFPage)
155 return m_pPDFPage->GetPageHeight();
156 } break;
157 case DOCTYPE_DYNAMIC_XFA: {
158 if (m_pXFAPageView) {
159 CFX_RectF rect;
160 m_pXFAPageView->GetPageViewRect(rect);
161 return rect.height;
162 }
163 } break;
164 default:
165 return 0.0f;
166 }
167
168 return 0.0f;
169 }
170
171 void CPDFXFA_Page::DeviceToPage(int start_x,
172 int start_y,
173 int size_x,
174 int size_y,
175 int rotate,
176 int device_x,
177 int device_y,
178 double* page_x,
179 double* page_y) {
180 if (!m_pPDFPage && !m_pXFAPageView)
181 return;
182
183 CFX_Matrix page2device;
184 CFX_Matrix device2page;
185 FX_FLOAT page_x_f, page_y_f;
186
187 GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y, rotate);
188
189 device2page.SetReverse(page2device);
190 device2page.Transform((FX_FLOAT)(device_x), (FX_FLOAT)(device_y), page_x_f,
191 page_y_f);
192
193 *page_x = (page_x_f);
194 *page_y = (page_y_f);
195 }
196
197 void CPDFXFA_Page::PageToDevice(int start_x,
198 int start_y,
199 int size_x,
200 int size_y,
201 int rotate,
202 double page_x,
203 double page_y,
204 int* device_x,
205 int* device_y) {
206 if (!m_pPDFPage && !m_pXFAPageView)
207 return;
208
209 CFX_Matrix page2device;
210 FX_FLOAT device_x_f, device_y_f;
211
212 GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y, rotate);
213
214 page2device.Transform(((FX_FLOAT)page_x), ((FX_FLOAT)page_y), device_x_f,
215 device_y_f);
216
217 *device_x = FXSYS_round(device_x_f);
218 *device_y = FXSYS_round(device_y_f);
219 }
220
221 void CPDFXFA_Page::GetDisplayMatrix(CFX_Matrix& matrix,
222 int xPos,
223 int yPos,
224 int xSize,
225 int ySize,
226 int iRotate) const {
227 if (!m_pPDFPage && !m_pXFAPageView)
228 return;
229
230 int nDocType = m_pDocument->GetDocType();
231 switch (nDocType) {
232 case DOCTYPE_DYNAMIC_XFA: {
233 if (m_pXFAPageView) {
234 CFX_Rect rect;
235 rect.Set(xPos, yPos, xSize, ySize);
236 m_pXFAPageView->GetDisplayMatrix(matrix, rect, iRotate);
237 }
238 } break;
239 case DOCTYPE_PDF:
240 case DOCTYPE_STATIC_XFA: {
241 if (m_pPDFPage) {
242 m_pPDFPage->GetDisplayMatrix(matrix, xPos, yPos, xSize, ySize, iRotate);
243 }
244 } break;
245 default:
246 return;
247 }
248 }
OLDNEW
« no previous file with comments | « fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp ('k') | fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698