OLD | NEW |
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 #include "public/fpdf_transformpage.h" | 7 #include "public/fpdf_transformpage.h" |
8 | 8 |
9 #include "core/fpdfapi/fpdf_page/include/cpdf_clippath.h" | 9 #include "core/fpdfapi/fpdf_page/include/cpdf_clippath.h" |
10 #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" | 10 #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 const CFX_ByteString& key, | 24 const CFX_ByteString& key, |
25 float left, | 25 float left, |
26 float bottom, | 26 float bottom, |
27 float right, | 27 float right, |
28 float top) { | 28 float top) { |
29 CPDF_Array* pBoundingBoxArray = new CPDF_Array; | 29 CPDF_Array* pBoundingBoxArray = new CPDF_Array; |
30 pBoundingBoxArray->Add(new CPDF_Number(left)); | 30 pBoundingBoxArray->Add(new CPDF_Number(left)); |
31 pBoundingBoxArray->Add(new CPDF_Number(bottom)); | 31 pBoundingBoxArray->Add(new CPDF_Number(bottom)); |
32 pBoundingBoxArray->Add(new CPDF_Number(right)); | 32 pBoundingBoxArray->Add(new CPDF_Number(right)); |
33 pBoundingBoxArray->Add(new CPDF_Number(top)); | 33 pBoundingBoxArray->Add(new CPDF_Number(top)); |
34 page->m_pFormDict->SetAt(key, pBoundingBoxArray); | 34 page->m_pFormDict->SetFor(key, pBoundingBoxArray); |
35 } | 35 } |
36 | 36 |
37 bool GetBoundingBox(CPDF_Page* page, | 37 bool GetBoundingBox(CPDF_Page* page, |
38 const CFX_ByteString& key, | 38 const CFX_ByteString& key, |
39 float* left, | 39 float* left, |
40 float* bottom, | 40 float* bottom, |
41 float* right, | 41 float* right, |
42 float* top) { | 42 float* top) { |
43 CPDF_Array* pArray = page->m_pFormDict->GetArrayBy(key); | 43 CPDF_Array* pArray = page->m_pFormDict->GetArrayFor(key); |
44 if (!pArray) | 44 if (!pArray) |
45 return false; | 45 return false; |
46 | 46 |
47 *left = pArray->GetFloatAt(0); | 47 *left = pArray->GetFloatAt(0); |
48 *bottom = pArray->GetFloatAt(1); | 48 *bottom = pArray->GetFloatAt(1); |
49 *right = pArray->GetFloatAt(2); | 49 *right = pArray->GetFloatAt(2); |
50 *top = pArray->GetFloatAt(3); | 50 *top = pArray->GetFloatAt(3); |
51 return true; | 51 return true; |
52 } | 52 } |
53 | 53 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 rect.Width(), rect.Height()); | 112 rect.Width(), rect.Height()); |
113 textBuf << bsClipping; | 113 textBuf << bsClipping; |
114 | 114 |
115 CFX_ByteString bsMatix; | 115 CFX_ByteString bsMatix; |
116 bsMatix.Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b, matrix->c, | 116 bsMatix.Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b, matrix->c, |
117 matrix->d, matrix->e, matrix->f); | 117 matrix->d, matrix->e, matrix->f); |
118 textBuf << bsMatix; | 118 textBuf << bsMatix; |
119 | 119 |
120 CPDF_Dictionary* pPageDic = pPage->m_pFormDict; | 120 CPDF_Dictionary* pPageDic = pPage->m_pFormDict; |
121 CPDF_Object* pContentObj = | 121 CPDF_Object* pContentObj = |
122 pPageDic ? pPageDic->GetObjectBy("Contents") : nullptr; | 122 pPageDic ? pPageDic->GetObjectFor("Contents") : nullptr; |
123 if (!pContentObj) | 123 if (!pContentObj) |
124 pContentObj = pPageDic ? pPageDic->GetArrayBy("Contents") : nullptr; | 124 pContentObj = pPageDic ? pPageDic->GetArrayFor("Contents") : nullptr; |
125 if (!pContentObj) | 125 if (!pContentObj) |
126 return FALSE; | 126 return FALSE; |
127 | 127 |
128 CPDF_Dictionary* pDic = new CPDF_Dictionary; | 128 CPDF_Dictionary* pDic = new CPDF_Dictionary; |
129 CPDF_Stream* pStream = new CPDF_Stream(nullptr, 0, pDic); | 129 CPDF_Stream* pStream = new CPDF_Stream(nullptr, 0, pDic); |
130 pStream->SetData(textBuf.GetBuffer(), textBuf.GetSize(), FALSE, FALSE); | 130 pStream->SetData(textBuf.GetBuffer(), textBuf.GetSize(), FALSE, FALSE); |
131 CPDF_Document* pDoc = pPage->m_pDocument; | 131 CPDF_Document* pDoc = pPage->m_pDocument; |
132 if (!pDoc) | 132 if (!pDoc) |
133 return FALSE; | 133 return FALSE; |
134 pDoc->AddIndirectObject(pStream); | 134 pDoc->AddIndirectObject(pStream); |
(...skipping 17 matching lines...) Expand all Loading... |
152 if (pObjArray) { | 152 if (pObjArray) { |
153 pContentArray = pObjArray; | 153 pContentArray = pObjArray; |
154 CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum()); | 154 CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum()); |
155 pContentArray->InsertAt(0, pRef); | 155 pContentArray->InsertAt(0, pRef); |
156 pContentArray->AddReference(pDoc, pEndStream); | 156 pContentArray->AddReference(pDoc, pEndStream); |
157 } else if (pDirectObj->IsStream()) { | 157 } else if (pDirectObj->IsStream()) { |
158 pContentArray = new CPDF_Array(); | 158 pContentArray = new CPDF_Array(); |
159 pContentArray->AddReference(pDoc, pStream->GetObjNum()); | 159 pContentArray->AddReference(pDoc, pStream->GetObjNum()); |
160 pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); | 160 pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); |
161 pContentArray->AddReference(pDoc, pEndStream); | 161 pContentArray->AddReference(pDoc, pEndStream); |
162 pPageDic->SetAtReference("Contents", pDoc, | 162 pPageDic->SetReferenceFor("Contents", pDoc, |
163 pDoc->AddIndirectObject(pContentArray)); | 163 pDoc->AddIndirectObject(pContentArray)); |
164 } | 164 } |
165 } | 165 } |
166 } | 166 } |
167 | 167 |
168 // Need to transform the patterns as well. | 168 // Need to transform the patterns as well. |
169 CPDF_Dictionary* pRes = pPageDic->GetDictBy("Resources"); | 169 CPDF_Dictionary* pRes = pPageDic->GetDictFor("Resources"); |
170 if (pRes) { | 170 if (pRes) { |
171 CPDF_Dictionary* pPattenDict = pRes->GetDictBy("Pattern"); | 171 CPDF_Dictionary* pPattenDict = pRes->GetDictFor("Pattern"); |
172 if (pPattenDict) { | 172 if (pPattenDict) { |
173 for (const auto& it : *pPattenDict) { | 173 for (const auto& it : *pPattenDict) { |
174 CPDF_Object* pObj = it.second; | 174 CPDF_Object* pObj = it.second; |
175 if (pObj->IsReference()) | 175 if (pObj->IsReference()) |
176 pObj = pObj->GetDirect(); | 176 pObj = pObj->GetDirect(); |
177 | 177 |
178 CPDF_Dictionary* pDict = nullptr; | 178 CPDF_Dictionary* pDict = nullptr; |
179 if (pObj->IsDictionary()) | 179 if (pObj->IsDictionary()) |
180 pDict = pObj->AsDictionary(); | 180 pDict = pObj->AsDictionary(); |
181 else if (CPDF_Stream* pObjStream = pObj->AsStream()) | 181 else if (CPDF_Stream* pObjStream = pObj->AsStream()) |
182 pDict = pObjStream->GetDict(); | 182 pDict = pObjStream->GetDict(); |
183 else | 183 else |
184 continue; | 184 continue; |
185 | 185 |
186 CFX_Matrix m = pDict->GetMatrixBy("Matrix"); | 186 CFX_Matrix m = pDict->GetMatrixFor("Matrix"); |
187 CFX_Matrix t = *(CFX_Matrix*)matrix; | 187 CFX_Matrix t = *(CFX_Matrix*)matrix; |
188 m.Concat(t); | 188 m.Concat(t); |
189 pDict->SetAtMatrix("Matrix", m); | 189 pDict->SetMatrixFor("Matrix", m); |
190 } | 190 } |
191 } | 191 } |
192 } | 192 } |
193 | 193 |
194 return TRUE; | 194 return TRUE; |
195 } | 195 } |
196 | 196 |
197 DLLEXPORT void STDCALL | 197 DLLEXPORT void STDCALL |
198 FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object, | 198 FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object, |
199 double a, | 199 double a, |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 } | 270 } |
271 | 271 |
272 DLLEXPORT void STDCALL FPDFPage_InsertClipPath(FPDF_PAGE page, | 272 DLLEXPORT void STDCALL FPDFPage_InsertClipPath(FPDF_PAGE page, |
273 FPDF_CLIPPATH clipPath) { | 273 FPDF_CLIPPATH clipPath) { |
274 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); | 274 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); |
275 if (!pPage) | 275 if (!pPage) |
276 return; | 276 return; |
277 | 277 |
278 CPDF_Dictionary* pPageDic = pPage->m_pFormDict; | 278 CPDF_Dictionary* pPageDic = pPage->m_pFormDict; |
279 CPDF_Object* pContentObj = | 279 CPDF_Object* pContentObj = |
280 pPageDic ? pPageDic->GetObjectBy("Contents") : nullptr; | 280 pPageDic ? pPageDic->GetObjectFor("Contents") : nullptr; |
281 if (!pContentObj) | 281 if (!pContentObj) |
282 pContentObj = pPageDic ? pPageDic->GetArrayBy("Contents") : nullptr; | 282 pContentObj = pPageDic ? pPageDic->GetArrayFor("Contents") : nullptr; |
283 if (!pContentObj) | 283 if (!pContentObj) |
284 return; | 284 return; |
285 | 285 |
286 CFX_ByteTextBuf strClip; | 286 CFX_ByteTextBuf strClip; |
287 CPDF_ClipPath* pClipPath = (CPDF_ClipPath*)clipPath; | 287 CPDF_ClipPath* pClipPath = (CPDF_ClipPath*)clipPath; |
288 uint32_t i; | 288 uint32_t i; |
289 for (i = 0; i < pClipPath->GetPathCount(); i++) { | 289 for (i = 0; i < pClipPath->GetPathCount(); i++) { |
290 CPDF_Path path = pClipPath->GetPath(i); | 290 CPDF_Path path = pClipPath->GetPath(i); |
291 int iClipType = pClipPath->GetClipType(i); | 291 int iClipType = pClipPath->GetClipType(i); |
292 if (path.GetPointCount() == 0) { | 292 if (path.GetPointCount() == 0) { |
(...skipping 26 matching lines...) Expand all Loading... |
319 if (pDirectObj) { | 319 if (pDirectObj) { |
320 CPDF_Array* pObjArray = pDirectObj->AsArray(); | 320 CPDF_Array* pObjArray = pDirectObj->AsArray(); |
321 if (pObjArray) { | 321 if (pObjArray) { |
322 pContentArray = pObjArray; | 322 pContentArray = pObjArray; |
323 CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum()); | 323 CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum()); |
324 pContentArray->InsertAt(0, pRef); | 324 pContentArray->InsertAt(0, pRef); |
325 } else if (pDirectObj->IsStream()) { | 325 } else if (pDirectObj->IsStream()) { |
326 pContentArray = new CPDF_Array(); | 326 pContentArray = new CPDF_Array(); |
327 pContentArray->AddReference(pDoc, pStream->GetObjNum()); | 327 pContentArray->AddReference(pDoc, pStream->GetObjNum()); |
328 pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); | 328 pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); |
329 pPageDic->SetAtReference("Contents", pDoc, | 329 pPageDic->SetReferenceFor("Contents", pDoc, |
330 pDoc->AddIndirectObject(pContentArray)); | 330 pDoc->AddIndirectObject(pContentArray)); |
331 } | 331 } |
332 } | 332 } |
333 } | 333 } |
334 } | 334 } |
OLD | NEW |