OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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 "core/fpdfdoc/cpdf_annotlist.h" | 7 #include "core/fpdfdoc/cpdf_annotlist.h" |
8 | 8 |
| 9 #include <memory> |
| 10 #include <utility> |
| 11 |
9 #include "core/fpdfapi/page/cpdf_page.h" | 12 #include "core/fpdfapi/page/cpdf_page.h" |
10 #include "core/fpdfapi/parser/cpdf_document.h" | 13 #include "core/fpdfapi/parser/cpdf_document.h" |
11 #include "core/fpdfapi/parser/cpdf_reference.h" | 14 #include "core/fpdfapi/parser/cpdf_reference.h" |
12 #include "core/fpdfapi/render/cpdf_renderoptions.h" | 15 #include "core/fpdfapi/render/cpdf_renderoptions.h" |
13 #include "core/fpdfdoc/cpdf_annot.h" | 16 #include "core/fpdfdoc/cpdf_annot.h" |
14 #include "core/fpdfdoc/cpdf_interform.h" | 17 #include "core/fpdfdoc/cpdf_interform.h" |
15 #include "core/fpdfdoc/cpdf_occontext.h" | 18 #include "core/fpdfdoc/cpdf_occontext.h" |
16 #include "core/fpdfdoc/cpvt_generateap.h" | 19 #include "core/fpdfdoc/cpvt_generateap.h" |
17 #include "core/fxge/cfx_renderdevice.h" | 20 #include "core/fxge/cfx_renderdevice.h" |
18 | 21 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 : m_pDocument(pPage->m_pDocument) { | 60 : m_pDocument(pPage->m_pDocument) { |
58 if (!pPage->m_pFormDict) | 61 if (!pPage->m_pFormDict) |
59 return; | 62 return; |
60 | 63 |
61 CPDF_Array* pAnnots = pPage->m_pFormDict->GetArrayFor("Annots"); | 64 CPDF_Array* pAnnots = pPage->m_pFormDict->GetArrayFor("Annots"); |
62 if (!pAnnots) | 65 if (!pAnnots) |
63 return; | 66 return; |
64 | 67 |
65 CPDF_Dictionary* pRoot = m_pDocument->GetRoot(); | 68 CPDF_Dictionary* pRoot = m_pDocument->GetRoot(); |
66 CPDF_Dictionary* pAcroForm = pRoot->GetDictFor("AcroForm"); | 69 CPDF_Dictionary* pAcroForm = pRoot->GetDictFor("AcroForm"); |
67 FX_BOOL bRegenerateAP = | 70 bool bRegenerateAP = pAcroForm && pAcroForm->GetBooleanFor("NeedAppearances"); |
68 pAcroForm && pAcroForm->GetBooleanFor("NeedAppearances"); | |
69 for (size_t i = 0; i < pAnnots->GetCount(); ++i) { | 71 for (size_t i = 0; i < pAnnots->GetCount(); ++i) { |
70 CPDF_Dictionary* pDict = ToDictionary(pAnnots->GetDirectObjectAt(i)); | 72 CPDF_Dictionary* pDict = ToDictionary(pAnnots->GetDirectObjectAt(i)); |
71 if (!pDict || pDict->GetStringFor("Subtype") == "Popup") { | 73 if (!pDict) |
| 74 continue; |
| 75 const CFX_ByteString subtype = pDict->GetStringFor("Subtype"); |
| 76 if (subtype == "Popup") { |
72 // Skip creating Popup annotations in the PDF document since PDFium | 77 // Skip creating Popup annotations in the PDF document since PDFium |
73 // provides its own Popup annotations. | 78 // provides its own Popup annotations. |
74 continue; | 79 continue; |
75 } | 80 } |
76 pAnnots->ConvertToIndirectObjectAt(i, m_pDocument); | 81 pAnnots->ConvertToIndirectObjectAt(i, m_pDocument); |
77 m_AnnotList.push_back( | 82 m_AnnotList.push_back( |
78 std::unique_ptr<CPDF_Annot>(new CPDF_Annot(pDict, m_pDocument, false))); | 83 std::unique_ptr<CPDF_Annot>(new CPDF_Annot(pDict, m_pDocument, false))); |
79 if (bRegenerateAP && pDict->GetStringFor("Subtype") == "Widget" && | 84 if (bRegenerateAP && subtype == "Widget" && |
80 CPDF_InterForm::IsUpdateAPEnabled()) { | 85 CPDF_InterForm::IsUpdateAPEnabled()) { |
81 FPDF_GenerateAP(m_pDocument, pDict); | 86 FPDF_GenerateAP(m_pDocument, pDict); |
82 } | 87 } |
83 } | 88 } |
84 | 89 |
85 size_t nAnnotListSize = m_AnnotList.size(); | 90 size_t nAnnotListSize = m_AnnotList.size(); |
86 for (size_t i = 0; i < nAnnotListSize; ++i) { | 91 for (size_t i = 0; i < nAnnotListSize; ++i) { |
87 std::unique_ptr<CPDF_Annot> pPopupAnnot( | 92 std::unique_ptr<CPDF_Annot> pPopupAnnot( |
88 CreatePopupAnnot(m_AnnotList[i].get(), m_pDocument)); | 93 CreatePopupAnnot(m_AnnotList[i].get(), m_pDocument)); |
89 if (pPopupAnnot) | 94 if (pPopupAnnot) |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 CPDF_RenderContext* pContext, | 170 CPDF_RenderContext* pContext, |
166 FX_BOOL bPrinting, | 171 FX_BOOL bPrinting, |
167 CFX_Matrix* pMatrix, | 172 CFX_Matrix* pMatrix, |
168 FX_BOOL bShowWidget, | 173 FX_BOOL bShowWidget, |
169 CPDF_RenderOptions* pOptions) { | 174 CPDF_RenderOptions* pOptions) { |
170 uint32_t dwAnnotFlags = bShowWidget ? ANNOTFLAG_INVISIBLE | ANNOTFLAG_HIDDEN | 175 uint32_t dwAnnotFlags = bShowWidget ? ANNOTFLAG_INVISIBLE | ANNOTFLAG_HIDDEN |
171 : ANNOTFLAG_INVISIBLE; | 176 : ANNOTFLAG_INVISIBLE; |
172 DisplayAnnots(pPage, nullptr, pContext, bPrinting, pMatrix, dwAnnotFlags, | 177 DisplayAnnots(pPage, nullptr, pContext, bPrinting, pMatrix, dwAnnotFlags, |
173 pOptions, nullptr); | 178 pOptions, nullptr); |
174 } | 179 } |
OLD | NEW |