diff options
-rw-r--r-- | core/fpdfdoc/cpdf_annot.cpp | 19 | ||||
-rw-r--r-- | core/fpdfdoc/include/cpdf_annot.h | 2 |
2 files changed, 17 insertions, 4 deletions
diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp index df12e9a82e..76d3f9c6d4 100644 --- a/core/fpdfdoc/cpdf_annot.cpp +++ b/core/fpdfdoc/cpdf_annot.cpp @@ -22,6 +22,14 @@ CPDF_Annot::CPDF_Annot(CPDF_Dictionary* pDict, CPDF_Document* pDocument) : m_pAnnotDict(pDict), m_pDocument(pDocument), m_sSubtype(m_pAnnotDict->GetStringBy("Subtype")) { + GenerateAPIfNeeded(); +} + +CPDF_Annot::~CPDF_Annot() { + ClearCachedAP(); +} + +void CPDF_Annot::GenerateAPIfNeeded() { if (m_sSubtype == "Circle") CPVT_GenerateAP::GenerateCircleAP(m_pDocument, m_pAnnotDict); else if (m_sSubtype == "Highlight") @@ -40,10 +48,6 @@ CPDF_Annot::CPDF_Annot(CPDF_Dictionary* pDict, CPDF_Document* pDocument) CPVT_GenerateAP::GenerateUnderlineAP(m_pDocument, m_pAnnotDict); } -CPDF_Annot::~CPDF_Annot() { - ClearCachedAP(); -} - void CPDF_Annot::ClearCachedAP() { m_APMap.clear(); } @@ -149,6 +153,13 @@ FX_BOOL CPDF_Annot::DrawAppearance(CPDF_Page* pPage, if (IsAnnotationHidden(m_pAnnotDict)) return FALSE; + // It might happen that by the time this annotation instance was created, + // it was flagged as "hidden" (e.g. /F 2), and hence CPVT_GenerateAP decided + // to not "generate" its AP. + // If for a reason the object is no longer hidden, but still does not have + // its "AP" generated, generate it now. + GenerateAPIfNeeded(); + CFX_Matrix matrix; CPDF_Form* pForm = FPDFDOC_Annot_GetMatrix(pPage, this, mode, pUser2Device, matrix); diff --git a/core/fpdfdoc/include/cpdf_annot.h b/core/fpdfdoc/include/cpdf_annot.h index 4999349155..4029bba4cc 100644 --- a/core/fpdfdoc/include/cpdf_annot.h +++ b/core/fpdfdoc/include/cpdf_annot.h @@ -63,6 +63,8 @@ class CPDF_Annot { CPDF_Form* GetAPForm(const CPDF_Page* pPage, AppearanceMode mode); private: + void GenerateAPIfNeeded(); + CPDF_Dictionary* const m_pAnnotDict; CPDF_Document* const m_pDocument; const CFX_ByteString m_sSubtype; |