| 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..ae253a086afdac4444db779c2563047aa4f16deb 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,10 +149,6 @@ FX_DWORD CPDF_Annot::GetFlags() const {
|
| return m_pAnnotDict->GetInteger("F");
|
| }
|
|
|
| -CPDF_Dictionary* CPDF_Annot::GetAnnotDict() {
|
| - return m_pAnnotDict;
|
| -}
|
| -
|
| CPDF_Stream* FPDFDOC_GetAnnotAP(CPDF_Dictionary* pAnnotDict,
|
| CPDF_Annot::AppearanceMode mode) {
|
| CPDF_Dictionary* pAP = pAnnotDict->GetDict("AP");
|
| @@ -217,20 +186,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;
|
| + 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,
|
|
|