| Index: core/fpdfdoc/cpdf_annot.cpp
|
| diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp
|
| index 4e0b04e9b623195c36ff47093d66f53cf7d53941..0cc3596a4d015acf1ab099d8cf31ba0315b66ffd 100644
|
| --- a/core/fpdfdoc/cpdf_annot.cpp
|
| +++ b/core/fpdfdoc/cpdf_annot.cpp
|
| @@ -73,6 +73,16 @@ void CPDF_Annot::GenerateAPIfNeeded() {
|
| CPVT_GenerateAP::GenerateUnderlineAP(m_pDocument, m_pAnnotDict);
|
| }
|
|
|
| +bool CPDF_Annot::ShouldDrawAnnotation() {
|
| + if (IsAnnotationHidden(m_pAnnotDict))
|
| + return false;
|
| +
|
| + if (m_nSubtype == CPDF_Annot::Subtype::POPUP && !m_bOpenState)
|
| + return false;
|
| +
|
| + return true;
|
| +}
|
| +
|
| void CPDF_Annot::ClearCachedAP() {
|
| m_APMap.clear();
|
| }
|
| @@ -294,10 +304,7 @@ FX_BOOL CPDF_Annot::DrawAppearance(CPDF_Page* pPage,
|
| const CFX_Matrix* pUser2Device,
|
| AppearanceMode mode,
|
| const CPDF_RenderOptions* pOptions) {
|
| - if (IsAnnotationHidden(m_pAnnotDict))
|
| - return FALSE;
|
| -
|
| - if (m_nSubtype == CPDF_Annot::Subtype::POPUP && !m_bOpenState)
|
| + if (!ShouldDrawAnnotation())
|
| return FALSE;
|
|
|
| // It might happen that by the time this annotation instance was created,
|
| @@ -322,6 +329,16 @@ FX_BOOL CPDF_Annot::DrawInContext(const CPDF_Page* pPage,
|
| CPDF_RenderContext* pContext,
|
| const CFX_Matrix* pUser2Device,
|
| AppearanceMode mode) {
|
| + if (!ShouldDrawAnnotation())
|
| + 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);
|
|
|