Chromium Code Reviews| Index: core/src/fpdfdoc/doc_annot.cpp |
| diff --git a/core/src/fpdfdoc/doc_annot.cpp b/core/src/fpdfdoc/doc_annot.cpp |
| index d37b1aaadba3b6239508d7385ff7c9e2bf4a42d5..c7e195e02290d31b5104a823975b25aa38b1d754 100644 |
| --- a/core/src/fpdfdoc/doc_annot.cpp |
| +++ b/core/src/fpdfdoc/doc_annot.cpp |
| @@ -8,25 +8,23 @@ |
| #include "../../include/fpdfdoc/fpdf_doc.h" |
| #include "../../include/fpdfapi/fpdf_pageobj.h" |
| -CPDF_AnnotList::CPDF_AnnotList(CPDF_Page* pPage) { |
| - ASSERT(pPage != NULL); |
| - m_pPageDict = pPage->m_pFormDict; |
| - if (m_pPageDict == NULL) { |
| +CPDF_AnnotList::CPDF_AnnotList(CPDF_Page* pPage) |
| + : m_pDocument(pPage->m_pDocument) { |
| + if (!pPage->m_pFormDict) |
| return; |
| - } |
| - m_pDocument = pPage->m_pDocument; |
| - CPDF_Array* pAnnots = m_pPageDict->GetArray("Annots"); |
| - if (pAnnots == NULL) { |
| + |
| + CPDF_Array* pAnnots = pPage->m_pFormDict->GetArray("Annots"); |
| + if (!pAnnots) |
| return; |
| - } |
| + |
| CPDF_Dictionary* pRoot = m_pDocument->GetRoot(); |
| CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); |
| FX_BOOL bRegenerateAP = pAcroForm && pAcroForm->GetBoolean("NeedAppearances"); |
| for (FX_DWORD i = 0; i < pAnnots->GetCount(); ++i) { |
| CPDF_Dictionary* pDict = ToDictionary(pAnnots->GetElementValue(i)); |
| - if (!pDict) { |
| + if (!pDict) |
| continue; |
| - } |
| + |
| FX_DWORD dwObjNum = pDict->GetObjNum(); |
| if (dwObjNum == 0) { |
| dwObjNum = m_pDocument->AddIndirectObject(pDict); |
| @@ -35,24 +33,20 @@ CPDF_AnnotList::CPDF_AnnotList(CPDF_Page* pPage) { |
| pAnnots->RemoveAt(i + 1); |
| pDict = pAnnots->GetDict(i); |
| } |
| - CPDF_Annot* pAnnot = new CPDF_Annot(pDict, this); |
| - m_AnnotList.Add(pAnnot); |
| + m_AnnotList.push_back(new CPDF_Annot(pDict, this)); |
| if (bRegenerateAP && |
| - pDict->GetConstString(FX_BSTRC("Subtype")) == FX_BSTRC("Widget")) |
| - if (CPDF_InterForm::UpdatingAPEnabled()) { |
| - FPDF_GenerateAP(m_pDocument, pDict); |
| - } |
| + pDict->GetConstString(FX_BSTRC("Subtype")) == FX_BSTRC("Widget") && |
| + CPDF_InterForm::UpdatingAPEnabled()) { |
| + FPDF_GenerateAP(m_pDocument, pDict); |
| + } |
| } |
| } |
| + |
| CPDF_AnnotList::~CPDF_AnnotList() { |
| - int i = 0; |
| - for (i = 0; i < m_AnnotList.GetSize(); ++i) { |
| - delete (CPDF_Annot*)m_AnnotList[i]; |
| - } |
| - for (i = 0; i < m_Borders.GetSize(); ++i) { |
| - delete (CPDF_PageObjects*)m_Borders[i]; |
| - } |
| + for (CPDF_Annot* annot : m_AnnotList) |
| + delete annot; |
| } |
| + |
| void CPDF_AnnotList::DisplayPass(const CPDF_Page* pPage, |
| CFX_RenderDevice* pDevice, |
| CPDF_RenderContext* pContext, |
| @@ -61,34 +55,32 @@ void CPDF_AnnotList::DisplayPass(const CPDF_Page* pPage, |
| FX_BOOL bWidgetPass, |
| CPDF_RenderOptions* pOptions, |
| FX_RECT* clip_rect) { |
| - for (int i = 0; i < m_AnnotList.GetSize(); ++i) { |
| - CPDF_Annot* pAnnot = (CPDF_Annot*)m_AnnotList[i]; |
| + for (CPDF_Annot* pAnnot : m_AnnotList) { |
| FX_BOOL bWidget = pAnnot->GetSubType() == "Widget"; |
| - if ((bWidgetPass && !bWidget) || (!bWidgetPass && bWidget)) { |
| + if ((bWidgetPass && !bWidget) || (!bWidgetPass && bWidget)) |
| continue; |
| - } |
| + |
| FX_DWORD annot_flags = pAnnot->GetFlags(); |
| - if (annot_flags & ANNOTFLAG_HIDDEN) { |
| + if (annot_flags & ANNOTFLAG_HIDDEN) |
| continue; |
| - } |
| - if (bPrinting && (annot_flags & ANNOTFLAG_PRINT) == 0) { |
| + |
| + if (bPrinting && (annot_flags & ANNOTFLAG_PRINT) == 0) |
| continue; |
| - } |
| - if (!bPrinting && (annot_flags & ANNOTFLAG_NOVIEW)) { |
| + |
| + if (!bPrinting && (annot_flags & ANNOTFLAG_NOVIEW)) |
| continue; |
| - } |
| - if (pOptions != NULL) { |
| + |
| + if (pOptions) { |
| IPDF_OCContext* pOCContext = pOptions->m_pOCContext; |
| CPDF_Dictionary* pAnnotDict = pAnnot->GetAnnotDict(); |
| - if (pOCContext != NULL && pAnnotDict != NULL && |
| + if (pOCContext && pAnnotDict && |
| !pOCContext->CheckOCGVisible(pAnnotDict->GetDict(FX_BSTRC("OC")))) { |
| continue; |
| } |
| } |
| CPDF_Rect annot_rect_f; |
| pAnnot->GetRect(annot_rect_f); |
| - CFX_Matrix matrix; |
| - matrix = *pMatrix; |
| + CFX_Matrix matrix = *pMatrix; |
| if (clip_rect) { |
| annot_rect_f.Transform(&matrix); |
| FX_RECT annot_rect = annot_rect_f.GetOutterRect(); |
| @@ -105,20 +97,7 @@ void CPDF_AnnotList::DisplayPass(const CPDF_Page* pPage, |
| } |
| } |
| } |
| -void CPDF_AnnotList::DisplayAnnots(const CPDF_Page* pPage, |
| - CFX_RenderDevice* pDevice, |
| - CFX_AffineMatrix* pUser2Device, |
| - FX_BOOL bShowWidget, |
| - CPDF_RenderOptions* pOptions) { |
| - FX_RECT clip_rect; |
| - if (pDevice) { |
| - clip_rect = pDevice->GetClipBox(); |
| - } |
| - FX_BOOL bPrinting = pDevice->GetDeviceClass() == FXDC_PRINTER || |
| - (pOptions && (pOptions->m_Flags & RENDER_PRINTPREVIEW)); |
| - DisplayAnnots(pPage, pDevice, NULL, bPrinting, pUser2Device, |
| - bShowWidget ? 3 : 1, pOptions, &clip_rect); |
| -} |
| + |
| void CPDF_AnnotList::DisplayAnnots(const CPDF_Page* pPage, |
| CFX_RenderDevice* pDevice, |
| CPDF_RenderContext* pContext, |
| @@ -136,13 +115,7 @@ void CPDF_AnnotList::DisplayAnnots(const CPDF_Page* pPage, |
| pOptions, pClipRect); |
| } |
| } |
| -int CPDF_AnnotList::GetIndex(CPDF_Annot* pAnnot) { |
| - for (int i = 0; i < m_AnnotList.GetSize(); ++i) |
| - if (m_AnnotList[i] == (void*)pAnnot) { |
| - return i; |
| - } |
| - return -1; |
| -} |
| + |
| CPDF_Annot::CPDF_Annot(CPDF_Dictionary* pDict, CPDF_AnnotList* pList) |
| : m_pAnnotDict(pDict), |
| m_pList(pList), |
| @@ -176,6 +149,10 @@ FX_DWORD CPDF_Annot::GetFlags() const { |
| return m_pAnnotDict->GetInteger("F"); |
| } |
| +const CPDF_Dictionary* CPDF_Annot::GetAnnotDict() const { |
|
Tom Sepez
2015/10/30 20:26:06
This should be in the class declaration itself?
Lei Zhang
2015/10/30 22:17:50
Done.
|
| + return m_pAnnotDict; |
| +} |
| + |
| CPDF_Dictionary* CPDF_Annot::GetAnnotDict() { |
| return m_pAnnotDict; |
| } |
| @@ -217,20 +194,23 @@ CPDF_Stream* FPDFDOC_GetAnnotAP(CPDF_Dictionary* pAnnotDict, |
| } |
| return nullptr; |
| } |
| + |
| CPDF_Form* CPDF_Annot::GetAPForm(const CPDF_Page* pPage, AppearanceMode mode) { |
| CPDF_Stream* pStream = FPDFDOC_GetAnnotAP(m_pAnnotDict, mode); |
| - if (pStream == NULL) { |
| - return NULL; |
| - } |
| - CPDF_Form* pForm; |
| - if (m_APMap.Lookup(pStream, (void*&)pForm)) { |
| - return pForm; |
| - } |
| - pForm = new CPDF_Form(m_pList->m_pDocument, pPage->m_pResources, pStream); |
| - pForm->ParseContent(NULL, NULL, NULL, NULL); |
| - m_APMap.SetAt(pStream, pForm); |
| - return pForm; |
| + if (!pStream) |
| + return nullptr; |
| + |
| + void* pForm; |
|
Tom Sepez
2015/10/30 20:26:06
thank you!!!
Lei Zhang
2015/10/30 22:17:50
Acknowledged.
|
| + if (!m_APMap.Lookup(pStream, pForm)) |
| + return static_cast<CPDF_Form*>(pForm); |
| + |
| + CPDF_Form* pNewForm = |
| + new CPDF_Form(m_pList->GetDocument(), pPage->m_pResources, pStream); |
| + pNewForm->ParseContent(nullptr, nullptr, nullptr, nullptr); |
| + m_APMap.SetAt(pStream, pNewForm); |
| + return pNewForm; |
| } |
| + |
| static CPDF_Form* FPDFDOC_Annot_GetMatrix(const CPDF_Page* pPage, |
| CPDF_Annot* pAnnot, |
| CPDF_Annot::AppearanceMode mode, |