Add CPDFSDK_AnnotIteration subclasses to improve readability.
Make CPDFSDK_AnnotIteration's ctor protected, and force it to be
instantiated via CPDFSDK_AnnotForwardIteration and
CPDFSDK_AnnotReverseIteration. Then it becomes more obvious what these
classes do.
Change-Id: I769120ba31b9e1439a6f468d3e1d384239071231
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/92130
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_annotiteration.cpp b/fpdfsdk/cpdfsdk_annotiteration.cpp
index fa9a5ea..0869d0e 100644
--- a/fpdfsdk/cpdfsdk_annotiteration.cpp
+++ b/fpdfsdk/cpdfsdk_annotiteration.cpp
@@ -38,3 +38,15 @@
}
CPDFSDK_AnnotIteration::~CPDFSDK_AnnotIteration() = default;
+
+CPDFSDK_AnnotForwardIteration::CPDFSDK_AnnotForwardIteration(
+ CPDFSDK_PageView* pPageView)
+ : CPDFSDK_AnnotIteration(pPageView, /*bReverse=*/false) {}
+
+CPDFSDK_AnnotForwardIteration::~CPDFSDK_AnnotForwardIteration() = default;
+
+CPDFSDK_AnnotReverseIteration::CPDFSDK_AnnotReverseIteration(
+ CPDFSDK_PageView* pPageView)
+ : CPDFSDK_AnnotIteration(pPageView, /*bReverse=*/true) {}
+
+CPDFSDK_AnnotReverseIteration::~CPDFSDK_AnnotReverseIteration() = default;
diff --git a/fpdfsdk/cpdfsdk_annotiteration.h b/fpdfsdk/cpdfsdk_annotiteration.h
index d3a0f39..c6015a3 100644
--- a/fpdfsdk/cpdfsdk_annotiteration.h
+++ b/fpdfsdk/cpdfsdk_annotiteration.h
@@ -18,14 +18,27 @@
using const_iterator =
std::vector<ObservedPtr<CPDFSDK_Annot>>::const_iterator;
- CPDFSDK_AnnotIteration(CPDFSDK_PageView* pPageView, bool bReverse);
- ~CPDFSDK_AnnotIteration();
-
const_iterator begin() const { return m_List.begin(); }
const_iterator end() const { return m_List.end(); }
+ protected:
+ CPDFSDK_AnnotIteration(CPDFSDK_PageView* pPageView, bool bReverse);
+ ~CPDFSDK_AnnotIteration();
+
private:
std::vector<ObservedPtr<CPDFSDK_Annot>> m_List;
};
+class CPDFSDK_AnnotForwardIteration : public CPDFSDK_AnnotIteration {
+ public:
+ explicit CPDFSDK_AnnotForwardIteration(CPDFSDK_PageView* pPageView);
+ ~CPDFSDK_AnnotForwardIteration();
+};
+
+class CPDFSDK_AnnotReverseIteration : public CPDFSDK_AnnotIteration {
+ public:
+ explicit CPDFSDK_AnnotReverseIteration(CPDFSDK_PageView* pPageView);
+ ~CPDFSDK_AnnotReverseIteration();
+};
+
#endif // FPDFSDK_CPDFSDK_ANNOTITERATION_H_
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index b263da9..23c7de3 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -81,8 +81,8 @@
#endif // PDF_ENABLE_XFA
// for pdf/static xfa.
- CPDFSDK_AnnotIteration annotIteration(this, true);
- for (const auto& pSDKAnnot : annotIteration) {
+ CPDFSDK_AnnotReverseIteration annot_iteration(this);
+ for (const auto& pSDKAnnot : annot_iteration) {
m_pFormFillEnv->GetAnnotHandlerMgr()->Annot_OnDraw(
pSDKAnnot.Get(), pDevice, mtUser2Device, pOptions->GetDrawAnnots());
}
@@ -90,8 +90,8 @@
CPDFSDK_Annot* CPDFSDK_PageView::GetFXAnnotAtPoint(const CFX_PointF& point) {
CPDFSDK_AnnotHandlerMgr* pAnnotMgr = m_pFormFillEnv->GetAnnotHandlerMgr();
- CPDFSDK_AnnotIteration annotIteration(this, false);
- for (const auto& pSDKAnnot : annotIteration) {
+ CPDFSDK_AnnotForwardIteration annot_iteration(this);
+ for (const auto& pSDKAnnot : annot_iteration) {
CFX_FloatRect rc = pAnnotMgr->Annot_OnGetViewBBox(pSDKAnnot.Get());
if (pSDKAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::POPUP)
continue;
@@ -103,8 +103,8 @@
CPDFSDK_Annot* CPDFSDK_PageView::GetFXWidgetAtPoint(const CFX_PointF& point) {
CPDFSDK_AnnotHandlerMgr* pAnnotMgr = m_pFormFillEnv->GetAnnotHandlerMgr();
- CPDFSDK_AnnotIteration annotIteration(this, false);
- for (const auto& pSDKAnnot : annotIteration) {
+ CPDFSDK_AnnotForwardIteration annot_iteration(this);
+ for (const auto& pSDKAnnot : annot_iteration) {
bool bHitTest = pSDKAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::WIDGET;
#ifdef PDF_ENABLE_XFA
bHitTest = bHitTest ||
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 7777dda..a0bcf86 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -1025,9 +1025,9 @@
if (!pPageView)
return CJS_Result::Failure(JSMessage::kBadObjectError);
- CPDFSDK_AnnotIteration annotIteration(pPageView, false);
+ CPDFSDK_AnnotForwardIteration annot_iteration(pPageView);
CPDFSDK_BAAnnot* pSDKBAAnnot = nullptr;
- for (const auto& pSDKAnnotCur : annotIteration) {
+ for (const auto& pSDKAnnotCur : annot_iteration) {
auto* pBAAnnot = pSDKAnnotCur->AsBAAnnot();
if (pBAAnnot && pBAAnnot->GetAnnotName() == swAnnotName) {
pSDKBAAnnot = pBAAnnot;
@@ -1067,8 +1067,8 @@
if (!pPageView)
return CJS_Result::Failure(JSMessage::kBadObjectError);
- CPDFSDK_AnnotIteration annotIteration(pPageView, false);
- for (const auto& pSDKAnnotCur : annotIteration) {
+ CPDFSDK_AnnotForwardIteration annot_iteration(pPageView);
+ for (const auto& pSDKAnnotCur : annot_iteration) {
if (!pSDKAnnotCur)
return CJS_Result::Failure(JSMessage::kBadObjectError);