From 8e631772e34256ca2f3bb86a1e23cca34fe8d4fa Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Wed, 13 Jun 2018 21:26:56 +0000 Subject: Collapse some more xfa/non-xfa code in cpdfsdk annots. cpdfsdk_annot.cpp:315 and cpdfsdk_annot.cpp:338 are nearly identical, except that the #ifdef XFA code passed along the correct type from the argument. Prefer this behaviour even when non-XFA. Change-Id: Id4d5fbcc773ffd10746c4ddc77a571e818e5a957 Reviewed-on: https://pdfium-review.googlesource.com/35030 Reviewed-by: dsinclair Commit-Queue: Tom Sepez --- fpdfsdk/cpdfsdk_annothandlermgr.cpp | 49 +++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 27 deletions(-) (limited to 'fpdfsdk/cpdfsdk_annothandlermgr.cpp') diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.cpp b/fpdfsdk/cpdfsdk_annothandlermgr.cpp index 117bf936e4..09d844f809 100644 --- a/fpdfsdk/cpdfsdk_annothandlermgr.cpp +++ b/fpdfsdk/cpdfsdk_annothandlermgr.cpp @@ -309,34 +309,29 @@ CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot, #ifdef PDF_ENABLE_XFA CPDFSDK_PageView* pPageView = pSDKAnnot->GetPageView(); CPDFXFA_Page* pPage = pPageView->GetPDFXFAPage(); - if (!pPage) - return nullptr; - if (pPage->AsPDFPage()) { // for pdf annots. - CPDFSDK_AnnotIterator ai(pSDKAnnot->GetPageView(), - pSDKAnnot->GetAnnotSubtype()); - CPDFSDK_Annot* pNext = - bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot); - return pNext; + if (pPage && !pPage->AsPDFPage()) { + // For xfa annots in XFA pages not backed by PDF pages. + std::unique_ptr pWidgetIterator( + pPage->GetXFAPageView()->CreateWidgetIterator( + XFA_TRAVERSEWAY_Tranvalse, XFA_WidgetStatus_Visible | + XFA_WidgetStatus_Viewable | + XFA_WidgetStatus_Focused)); + if (!pWidgetIterator) + return nullptr; + if (pWidgetIterator->GetCurrentWidget() != pSDKAnnot->GetXFAWidget()) + pWidgetIterator->SetCurrentWidget(pSDKAnnot->GetXFAWidget()); + CXFA_FFWidget* hNextFocus = bNext ? pWidgetIterator->MoveToNext() + : pWidgetIterator->MoveToPrevious(); + if (!hNextFocus && pSDKAnnot) + hNextFocus = pWidgetIterator->MoveToFirst(); + + return pPageView->GetAnnotByXFAWidget(hNextFocus); } - // for xfa annots - std::unique_ptr pWidgetIterator( - pPage->GetXFAPageView()->CreateWidgetIterator( - XFA_TRAVERSEWAY_Tranvalse, XFA_WidgetStatus_Visible | - XFA_WidgetStatus_Viewable | - XFA_WidgetStatus_Focused)); - if (!pWidgetIterator) - return nullptr; - if (pWidgetIterator->GetCurrentWidget() != pSDKAnnot->GetXFAWidget()) - pWidgetIterator->SetCurrentWidget(pSDKAnnot->GetXFAWidget()); - CXFA_FFWidget* hNextFocus = - bNext ? pWidgetIterator->MoveToNext() : pWidgetIterator->MoveToPrevious(); - if (!hNextFocus && pSDKAnnot) - hNextFocus = pWidgetIterator->MoveToFirst(); - - return pPageView->GetAnnotByXFAWidget(hNextFocus); -#else // PDF_ENABLE_XFA +#endif // PDF_ENABLE_XFA + + // For PDF annots. + ASSERT(pSDKAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::WIDGET); CPDFSDK_AnnotIterator ai(pSDKAnnot->GetPageView(), - CPDF_Annot::Subtype::WIDGET); + pSDKAnnot->GetAnnotSubtype()); return bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot); -#endif // PDF_ENABLE_XFA } -- cgit v1.2.3