| 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_edit.h" | 7 #include "public/fpdf_edit.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); | 103 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 104 if (!pDoc) | 104 if (!pDoc) |
| 105 return nullptr; | 105 return nullptr; |
| 106 | 106 |
| 107 page_index = std::min(std::max(page_index, 0), pDoc->GetPageCount()); | 107 page_index = std::min(std::max(page_index, 0), pDoc->GetPageCount()); |
| 108 CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(page_index); | 108 CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(page_index); |
| 109 if (!pPageDict) | 109 if (!pPageDict) |
| 110 return nullptr; | 110 return nullptr; |
| 111 | 111 |
| 112 CPDF_Array* pMediaBoxArray = new CPDF_Array; | 112 CPDF_Array* pMediaBoxArray = new CPDF_Array; |
| 113 pMediaBoxArray->Add(new CPDF_Number(0)); | 113 pMediaBoxArray->AddNew<CPDF_Number>(0); |
| 114 pMediaBoxArray->Add(new CPDF_Number(0)); | 114 pMediaBoxArray->AddNew<CPDF_Number>(0); |
| 115 pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(width))); | 115 pMediaBoxArray->AddNew<CPDF_Number>(static_cast<FX_FLOAT>(width)); |
| 116 pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(height))); | 116 pMediaBoxArray->AddNew<CPDF_Number>(static_cast<FX_FLOAT>(height)); |
| 117 pPageDict->SetFor("MediaBox", pMediaBoxArray); | 117 pPageDict->SetFor("MediaBox", pMediaBoxArray); |
| 118 pPageDict->SetFor("Rotate", new CPDF_Number(0)); | 118 pPageDict->SetFor("Rotate", new CPDF_Number(0)); |
| 119 pPageDict->SetFor("Resources", | 119 pPageDict->SetFor("Resources", |
| 120 new CPDF_Dictionary(pDoc->GetByteStringPool())); | 120 new CPDF_Dictionary(pDoc->GetByteStringPool())); |
| 121 | 121 |
| 122 #ifdef PDF_ENABLE_XFA | 122 #ifdef PDF_ENABLE_XFA |
| 123 CPDFXFA_Page* pPage = | 123 CPDFXFA_Page* pPage = |
| 124 new CPDFXFA_Page(static_cast<CPDFXFA_Context*>(document), page_index); | 124 new CPDFXFA_Page(static_cast<CPDFXFA_Context*>(document), page_index); |
| 125 pPage->LoadPDFPage(pPageDict); | 125 pPage->LoadPDFPage(pPageDict); |
| 126 #else // PDF_ENABLE_XFA | 126 #else // PDF_ENABLE_XFA |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 CFX_FloatRect rect = pAnnot->GetRect(); // transformAnnots Rectangle | 291 CFX_FloatRect rect = pAnnot->GetRect(); // transformAnnots Rectangle |
| 292 CFX_Matrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d, | 292 CFX_Matrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d, |
| 293 (FX_FLOAT)e, (FX_FLOAT)f); | 293 (FX_FLOAT)e, (FX_FLOAT)f); |
| 294 rect.Transform(&matrix); | 294 rect.Transform(&matrix); |
| 295 | 295 |
| 296 CPDF_Array* pRectArray = pAnnot->GetAnnotDict()->GetArrayFor("Rect"); | 296 CPDF_Array* pRectArray = pAnnot->GetAnnotDict()->GetArrayFor("Rect"); |
| 297 if (!pRectArray) { | 297 if (!pRectArray) { |
| 298 pRectArray = new CPDF_Array; | 298 pRectArray = new CPDF_Array; |
| 299 pAnnot->GetAnnotDict()->SetFor("Rect", pRectArray); | 299 pAnnot->GetAnnotDict()->SetFor("Rect", pRectArray); |
| 300 } | 300 } |
| 301 pRectArray->SetAt(0, new CPDF_Number(rect.left)); | 301 pRectArray->SetNewAt<CPDF_Number>(0, rect.left); |
| 302 pRectArray->SetAt(1, new CPDF_Number(rect.bottom)); | 302 pRectArray->SetNewAt<CPDF_Number>(1, rect.bottom); |
| 303 pRectArray->SetAt(2, new CPDF_Number(rect.right)); | 303 pRectArray->SetNewAt<CPDF_Number>(2, rect.right); |
| 304 pRectArray->SetAt(3, new CPDF_Number(rect.top)); | 304 pRectArray->SetNewAt<CPDF_Number>(3, rect.top); |
| 305 | 305 |
| 306 // TODO: Transform AP's rectangle | 306 // TODO: Transform AP's rectangle |
| 307 } | 307 } |
| 308 } | 308 } |
| 309 | 309 |
| 310 DLLEXPORT void STDCALL FPDFPage_SetRotation(FPDF_PAGE page, int rotate) { | 310 DLLEXPORT void STDCALL FPDFPage_SetRotation(FPDF_PAGE page, int rotate) { |
| 311 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); | 311 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); |
| 312 if (!IsPageObject(pPage)) | 312 if (!IsPageObject(pPage)) |
| 313 return; | 313 return; |
| 314 | 314 |
| 315 CPDF_Dictionary* pDict = pPage->m_pFormDict; | 315 CPDF_Dictionary* pDict = pPage->m_pFormDict; |
| 316 rotate %= 4; | 316 rotate %= 4; |
| 317 pDict->SetFor("Rotate", new CPDF_Number(rotate * 90)); | 317 pDict->SetFor("Rotate", new CPDF_Number(rotate * 90)); |
| 318 } | 318 } |
| OLD | NEW |