blob: 2a45b0d4eb43a2cc1e9700fd27c9032ee20df353 [file] [log] [blame]
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -07001// Copyright 2016 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "fpdfsdk/cpdfsdk_annothandlermgr.h"
8
Haibo Huang49cc9302020-04-27 16:14:24 -07009#include <utility>
10
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070011#include "core/fpdfapi/parser/cpdf_number.h"
12#include "core/fpdfapi/parser/cpdf_string.h"
13#include "core/fpdfdoc/cpdf_annot.h"
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070014#include "fpdfsdk/cpdfsdk_annot.h"
Haibo Huang49cc9302020-04-27 16:14:24 -070015#include "fpdfsdk/cpdfsdk_annotiterator.h"
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070016#include "fpdfsdk/cpdfsdk_baannot.h"
17#include "fpdfsdk/cpdfsdk_baannothandler.h"
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070018#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
19#include "fpdfsdk/cpdfsdk_pageview.h"
Haibo Huang49cc9302020-04-27 16:14:24 -070020#include "fpdfsdk/cpdfsdk_widget.h"
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070021#include "fpdfsdk/cpdfsdk_widgethandler.h"
Haibo Huang49cc9302020-04-27 16:14:24 -070022#include "fpdfsdk/pwl/cpwl_wnd.h"
23#include "public/fpdf_fwlevent.h"
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070024#include "third_party/base/ptr_util.h"
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070025
26#ifdef PDF_ENABLE_XFA
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070027#include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
Haibo Huang49cc9302020-04-27 16:14:24 -070028#include "fpdfsdk/fpdfxfa/cpdfxfa_widget.h"
29#include "fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h"
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070030#endif // PDF_ENABLE_XFA
31
32CPDFSDK_AnnotHandlerMgr::CPDFSDK_AnnotHandlerMgr(
Haibo Huang49cc9302020-04-27 16:14:24 -070033 std::unique_ptr<CPDFSDK_BAAnnotHandler> pBAAnnotHandler,
34 std::unique_ptr<CPDFSDK_WidgetHandler> pWidgetHandler,
35 std::unique_ptr<IPDFSDK_AnnotHandler> pXFAWidgetHandler)
36 : m_pBAAnnotHandler(std::move(pBAAnnotHandler)),
37 m_pWidgetHandler(std::move(pWidgetHandler)),
38 m_pXFAWidgetHandler(std::move(pXFAWidgetHandler)) {
39 ASSERT(m_pBAAnnotHandler);
40 ASSERT(m_pWidgetHandler);
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070041}
42
Haibo Huang49cc9302020-04-27 16:14:24 -070043CPDFSDK_AnnotHandlerMgr::~CPDFSDK_AnnotHandlerMgr() = default;
44
45void CPDFSDK_AnnotHandlerMgr::SetFormFillEnv(
46 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
47 m_pBAAnnotHandler->SetFormFillEnvironment(pFormFillEnv);
48 m_pWidgetHandler->SetFormFillEnvironment(pFormFillEnv);
49 if (m_pXFAWidgetHandler)
50 m_pXFAWidgetHandler->SetFormFillEnvironment(pFormFillEnv);
51}
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070052
53CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::NewAnnot(CPDF_Annot* pAnnot,
54 CPDFSDK_PageView* pPageView) {
55 ASSERT(pPageView);
Haibo Huang49cc9302020-04-27 16:14:24 -070056 return GetAnnotHandlerOfType(pAnnot->GetSubtype())
57 ->NewAnnot(pAnnot, pPageView);
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070058}
59
60#ifdef PDF_ENABLE_XFA
Haibo Huang49cc9302020-04-27 16:14:24 -070061std::unique_ptr<CPDFSDK_Annot> CPDFSDK_AnnotHandlerMgr::NewXFAAnnot(
62 CXFA_FFWidget* pAnnot,
63 CPDFSDK_PageView* pPageView) {
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070064 ASSERT(pAnnot);
65 ASSERT(pPageView);
Haibo Huang49cc9302020-04-27 16:14:24 -070066 return static_cast<CPDFXFA_WidgetHandler*>(m_pXFAWidgetHandler.get())
67 ->NewAnnotForXFA(pAnnot, pPageView);
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070068}
69#endif // PDF_ENABLE_XFA
70
Haibo Huang49cc9302020-04-27 16:14:24 -070071void CPDFSDK_AnnotHandlerMgr::ReleaseAnnot(
72 std::unique_ptr<CPDFSDK_Annot> pAnnot) {
73 IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot.get());
74 pAnnotHandler->ReleaseAnnot(std::move(pAnnot));
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070075}
76
77void CPDFSDK_AnnotHandlerMgr::Annot_OnLoad(CPDFSDK_Annot* pAnnot) {
78 ASSERT(pAnnot);
79 GetAnnotHandler(pAnnot)->OnLoad(pAnnot);
80}
81
Haibo Huang49cc9302020-04-27 16:14:24 -070082WideString CPDFSDK_AnnotHandlerMgr::Annot_GetText(CPDFSDK_Annot* pAnnot) {
83 return GetAnnotHandler(pAnnot)->GetText(pAnnot);
84}
85
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070086WideString CPDFSDK_AnnotHandlerMgr::Annot_GetSelectedText(
87 CPDFSDK_Annot* pAnnot) {
88 return GetAnnotHandler(pAnnot)->GetSelectedText(pAnnot);
89}
90
91void CPDFSDK_AnnotHandlerMgr::Annot_ReplaceSelection(CPDFSDK_Annot* pAnnot,
92 const WideString& text) {
93 GetAnnotHandler(pAnnot)->ReplaceSelection(pAnnot, text);
94}
95
Haibo Huang49cc9302020-04-27 16:14:24 -070096bool CPDFSDK_AnnotHandlerMgr::Annot_CanUndo(CPDFSDK_Annot* pAnnot) {
97 return GetAnnotHandler(pAnnot)->CanUndo(pAnnot);
98}
99
100bool CPDFSDK_AnnotHandlerMgr::Annot_CanRedo(CPDFSDK_Annot* pAnnot) {
101 return GetAnnotHandler(pAnnot)->CanRedo(pAnnot);
102}
103
104bool CPDFSDK_AnnotHandlerMgr::Annot_Undo(CPDFSDK_Annot* pAnnot) {
105 return GetAnnotHandler(pAnnot)->Undo(pAnnot);
106}
107
108bool CPDFSDK_AnnotHandlerMgr::Annot_Redo(CPDFSDK_Annot* pAnnot) {
109 return GetAnnotHandler(pAnnot)->Redo(pAnnot);
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700110}
111
112IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(
Haibo Huang49cc9302020-04-27 16:14:24 -0700113 CPDFSDK_Annot* pAnnot) const {
114 return GetAnnotHandlerOfType(pAnnot->GetAnnotSubtype());
115}
116
117IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandlerOfType(
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700118 CPDF_Annot::Subtype nAnnotSubtype) const {
119 if (nAnnotSubtype == CPDF_Annot::Subtype::WIDGET)
120 return m_pWidgetHandler.get();
121
122#ifdef PDF_ENABLE_XFA
123 if (nAnnotSubtype == CPDF_Annot::Subtype::XFAWIDGET)
124 return m_pXFAWidgetHandler.get();
125#endif // PDF_ENABLE_XFA
126
127 return m_pBAAnnotHandler.get();
128}
129
130void CPDFSDK_AnnotHandlerMgr::Annot_OnDraw(CPDFSDK_PageView* pPageView,
131 CPDFSDK_Annot* pAnnot,
132 CFX_RenderDevice* pDevice,
Haibo Huang49cc9302020-04-27 16:14:24 -0700133 const CFX_Matrix& mtUser2Device,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700134 bool bDrawAnnots) {
135 ASSERT(pAnnot);
Haibo Huang49cc9302020-04-27 16:14:24 -0700136 GetAnnotHandler(pAnnot)->OnDraw(pPageView, pAnnot, pDevice, mtUser2Device,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700137 bDrawAnnots);
138}
139
140bool CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown(
141 CPDFSDK_PageView* pPageView,
Haibo Huang49cc9302020-04-27 16:14:24 -0700142 ObservedPtr<CPDFSDK_Annot>* pAnnot,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700143 uint32_t nFlags,
Philip P. Moltmann33357ca2017-05-11 09:25:13 -0700144 const CFX_PointF& point) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700145 ASSERT(pAnnot->HasObservable());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700146 return GetAnnotHandler(pAnnot->Get())
147 ->OnLButtonDown(pPageView, pAnnot, nFlags, point);
148}
149
150bool CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp(
151 CPDFSDK_PageView* pPageView,
Haibo Huang49cc9302020-04-27 16:14:24 -0700152 ObservedPtr<CPDFSDK_Annot>* pAnnot,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700153 uint32_t nFlags,
Philip P. Moltmann33357ca2017-05-11 09:25:13 -0700154 const CFX_PointF& point) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700155 ASSERT(pAnnot->HasObservable());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700156 return GetAnnotHandler(pAnnot->Get())
157 ->OnLButtonUp(pPageView, pAnnot, nFlags, point);
158}
159
160bool CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk(
161 CPDFSDK_PageView* pPageView,
Haibo Huang49cc9302020-04-27 16:14:24 -0700162 ObservedPtr<CPDFSDK_Annot>* pAnnot,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700163 uint32_t nFlags,
Philip P. Moltmann33357ca2017-05-11 09:25:13 -0700164 const CFX_PointF& point) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700165 ASSERT(pAnnot->HasObservable());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700166 return GetAnnotHandler(pAnnot->Get())
167 ->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
168}
169
170bool CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove(
171 CPDFSDK_PageView* pPageView,
Haibo Huang49cc9302020-04-27 16:14:24 -0700172 ObservedPtr<CPDFSDK_Annot>* pAnnot,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700173 uint32_t nFlags,
Philip P. Moltmann33357ca2017-05-11 09:25:13 -0700174 const CFX_PointF& point) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700175 ASSERT(pAnnot->HasObservable());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700176 return GetAnnotHandler(pAnnot->Get())
177 ->OnMouseMove(pPageView, pAnnot, nFlags, point);
178}
179
180bool CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel(
181 CPDFSDK_PageView* pPageView,
Haibo Huang49cc9302020-04-27 16:14:24 -0700182 ObservedPtr<CPDFSDK_Annot>* pAnnot,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700183 uint32_t nFlags,
184 short zDelta,
Philip P. Moltmann33357ca2017-05-11 09:25:13 -0700185 const CFX_PointF& point) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700186 ASSERT(pAnnot->HasObservable());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700187 return GetAnnotHandler(pAnnot->Get())
188 ->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point);
189}
190
191bool CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown(
192 CPDFSDK_PageView* pPageView,
Haibo Huang49cc9302020-04-27 16:14:24 -0700193 ObservedPtr<CPDFSDK_Annot>* pAnnot,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700194 uint32_t nFlags,
Philip P. Moltmann33357ca2017-05-11 09:25:13 -0700195 const CFX_PointF& point) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700196 ASSERT(pAnnot->HasObservable());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700197 return GetAnnotHandler(pAnnot->Get())
198 ->OnRButtonDown(pPageView, pAnnot, nFlags, point);
199}
200
201bool CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp(
202 CPDFSDK_PageView* pPageView,
Haibo Huang49cc9302020-04-27 16:14:24 -0700203 ObservedPtr<CPDFSDK_Annot>* pAnnot,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700204 uint32_t nFlags,
Philip P. Moltmann33357ca2017-05-11 09:25:13 -0700205 const CFX_PointF& point) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700206 ASSERT(pAnnot->HasObservable());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700207 return GetAnnotHandler(pAnnot->Get())
208 ->OnRButtonUp(pPageView, pAnnot, nFlags, point);
209}
210
211void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter(
212 CPDFSDK_PageView* pPageView,
Haibo Huang49cc9302020-04-27 16:14:24 -0700213 ObservedPtr<CPDFSDK_Annot>* pAnnot,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700214 uint32_t nFlag) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700215 ASSERT(pAnnot->HasObservable());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700216 GetAnnotHandler(pAnnot->Get())->OnMouseEnter(pPageView, pAnnot, nFlag);
217}
218
219void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit(
220 CPDFSDK_PageView* pPageView,
Haibo Huang49cc9302020-04-27 16:14:24 -0700221 ObservedPtr<CPDFSDK_Annot>* pAnnot,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700222 uint32_t nFlag) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700223 ASSERT(pAnnot->HasObservable());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700224 GetAnnotHandler(pAnnot->Get())->OnMouseExit(pPageView, pAnnot, nFlag);
225}
226
227bool CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot,
228 uint32_t nChar,
229 uint32_t nFlags) {
230 return GetAnnotHandler(pAnnot)->OnChar(pAnnot, nChar, nFlags);
231}
232
233bool CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot,
234 int nKeyCode,
235 int nFlag) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700236 if (CPWL_Wnd::IsCTRLKeyDown(nFlag) || CPWL_Wnd::IsALTKeyDown(nFlag)) {
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700237 return GetAnnotHandler(pAnnot)->OnKeyDown(pAnnot, nKeyCode, nFlag);
238 }
Haibo Huang49cc9302020-04-27 16:14:24 -0700239 ObservedPtr<CPDFSDK_Annot> pObservedAnnot(pAnnot);
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700240 CPDFSDK_PageView* pPage = pAnnot->GetPageView();
241 CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot();
242 if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700243 ObservedPtr<CPDFSDK_Annot> pNext(
244 GetNextAnnot(pFocusAnnot, !CPWL_Wnd::IsSHIFTKeyDown(nFlag)));
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700245 if (pNext && pNext.Get() != pFocusAnnot) {
246 pPage->GetFormFillEnv()->SetFocusAnnot(&pNext);
247 return true;
248 }
249 }
250
Haibo Huang49cc9302020-04-27 16:14:24 -0700251 // Check |pAnnot| again because JS may have destroyed it in |GetNextAnnot|
252 if (!pObservedAnnot)
253 return false;
254
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700255 return GetAnnotHandler(pAnnot)->OnKeyDown(pAnnot, nKeyCode, nFlag);
256}
257
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700258bool CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus(
Haibo Huang49cc9302020-04-27 16:14:24 -0700259 ObservedPtr<CPDFSDK_Annot>* pAnnot,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700260 uint32_t nFlag) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700261 ASSERT(pAnnot->HasObservable());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700262 return GetAnnotHandler(pAnnot->Get())->OnSetFocus(pAnnot, nFlag);
263}
264
265bool CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus(
Haibo Huang49cc9302020-04-27 16:14:24 -0700266 ObservedPtr<CPDFSDK_Annot>* pAnnot,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700267 uint32_t nFlag) {
Haibo Huang49cc9302020-04-27 16:14:24 -0700268 ASSERT(pAnnot->HasObservable());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700269 return GetAnnotHandler(pAnnot->Get())->OnKillFocus(pAnnot, nFlag);
270}
271
Haibo Huang49cc9302020-04-27 16:14:24 -0700272bool CPDFSDK_AnnotHandlerMgr::Annot_SetIndexSelected(
273 ObservedPtr<CPDFSDK_Annot>* pAnnot,
274 int index,
275 bool selected) {
276 return GetAnnotHandler(pAnnot->Get())
277 ->SetIndexSelected(pAnnot, index, selected);
278}
279
280bool CPDFSDK_AnnotHandlerMgr::Annot_IsIndexSelected(
281 ObservedPtr<CPDFSDK_Annot>* pAnnot,
282 int index) {
283 return GetAnnotHandler(pAnnot->Get())->IsIndexSelected(pAnnot, index);
284}
285
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700286#ifdef PDF_ENABLE_XFA
287bool CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus(
Haibo Huang49cc9302020-04-27 16:14:24 -0700288 ObservedPtr<CPDFSDK_Annot>* pSetAnnot,
289 ObservedPtr<CPDFSDK_Annot>* pKillAnnot) {
290 CPDFXFA_Widget* pSetXFAWidget = ToXFAWidget(pSetAnnot->Get());
291 CPDFXFA_Widget* pKillXFAWidget = ToXFAWidget(pKillAnnot->Get());
292 bool bXFA = (pSetXFAWidget && pSetXFAWidget->GetXFAFFWidget()) ||
293 (pKillXFAWidget && pKillXFAWidget->GetXFAFFWidget());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700294
Haibo Huang49cc9302020-04-27 16:14:24 -0700295 return !bXFA || static_cast<CPDFXFA_WidgetHandler*>(m_pXFAWidgetHandler.get())
296 ->OnXFAChangedFocus(pKillAnnot, pSetAnnot);
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700297}
298#endif // PDF_ENABLE_XFA
299
300CFX_FloatRect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox(
301 CPDFSDK_PageView* pPageView,
302 CPDFSDK_Annot* pAnnot) {
303 ASSERT(pAnnot);
304 return GetAnnotHandler(pAnnot)->GetViewBBox(pPageView, pAnnot);
305}
306
307bool CPDFSDK_AnnotHandlerMgr::Annot_OnHitTest(CPDFSDK_PageView* pPageView,
308 CPDFSDK_Annot* pAnnot,
Philip P. Moltmann33357ca2017-05-11 09:25:13 -0700309 const CFX_PointF& point) {
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700310 ASSERT(pAnnot);
311 IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot);
312 if (pAnnotHandler->CanAnswer(pAnnot))
313 return pAnnotHandler->HitTest(pPageView, pAnnot, point);
314
315 return false;
316}
317
318CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,
319 bool bNext) {
320#ifdef PDF_ENABLE_XFA
Haibo Huang49cc9302020-04-27 16:14:24 -0700321 IPDF_Page* pPage = pSDKAnnot->GetPageView()->GetXFAPage();
322 if (pPage && !pPage->AsPDFPage()) {
323 // For xfa annots in XFA pages not backed by PDF pages.
324 return static_cast<CPDFXFA_Page*>(pPage)->GetNextXFAAnnot(pSDKAnnot, bNext);
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700325 }
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700326#endif // PDF_ENABLE_XFA
Haibo Huang49cc9302020-04-27 16:14:24 -0700327
328 // For PDF annots.
329 CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pSDKAnnot);
330 CPDFSDK_AnnotIterator ai(pWidget->GetPageView(), pWidget->GetAnnotSubtype());
331 return bNext ? ai.GetNextAnnot(pWidget) : ai.GetPrevAnnot(pWidget);
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -0700332}