Move some CPDFXFA_Widget specific methods out of CPDFSDK_Annot Also rename methods returning CXFA_FFWidgets to contain the string "FF" in the name. Change-Id: I1641e65a2f233928ce1e42dbef9fdf176ea73fd9 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59715 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_annot.cpp b/fpdfsdk/cpdfsdk_annot.cpp index 32fdb6b..d6712d0 100644 --- a/fpdfsdk/cpdfsdk_annot.cpp +++ b/fpdfsdk/cpdfsdk_annot.cpp
@@ -19,15 +19,9 @@ return nullptr; } -#ifdef PDF_ENABLE_XFA -bool CPDFSDK_Annot::IsXFAField() const { - return false; -} - -CXFA_FFWidget* CPDFSDK_Annot::GetXFAWidget() const { +CPDFXFA_Widget* CPDFSDK_Annot::AsXFAWidget() { return nullptr; } -#endif // PDF_ENABLE_XFA IPDF_Page* CPDFSDK_Annot::GetXFAPage() { #ifdef PDF_ENABLE_XFA
diff --git a/fpdfsdk/cpdfsdk_annot.h b/fpdfsdk/cpdfsdk_annot.h index 536b6fe..e722de1 100644 --- a/fpdfsdk/cpdfsdk_annot.h +++ b/fpdfsdk/cpdfsdk_annot.h
@@ -19,23 +19,16 @@ class CPDF_RenderOptions; class CPDFSDK_BAAnnot; class CPDFSDK_PageView; +class CPDFXFA_Widget; class IPDF_Page; -#ifdef PDF_ENABLE_XFA -class CXFA_FFWidget; -#endif // PDF_ENABLE_XFA - class CPDFSDK_Annot : public Observable { public: explicit CPDFSDK_Annot(CPDFSDK_PageView* pPageView); virtual ~CPDFSDK_Annot(); virtual CPDFSDK_BAAnnot* AsBAAnnot(); - -#ifdef PDF_ENABLE_XFA - virtual bool IsXFAField() const; - virtual CXFA_FFWidget* GetXFAWidget() const; -#endif // PDF_ENABLE_XFA + virtual CPDFXFA_Widget* AsXFAWidget(); virtual int GetLayoutOrder() const; virtual CPDF_Annot* GetPDFAnnot() const; @@ -59,4 +52,8 @@ return pAnnot ? pAnnot->AsBAAnnot() : nullptr; } +inline CPDFXFA_Widget* ToXFAWidget(CPDFSDK_Annot* pAnnot) { + return pAnnot ? pAnnot->AsXFAWidget() : nullptr; +} + #endif // FPDFSDK_CPDFSDK_ANNOT_H_
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.cpp b/fpdfsdk/cpdfsdk_annothandlermgr.cpp index 20744cc..b077532 100644 --- a/fpdfsdk/cpdfsdk_annothandlermgr.cpp +++ b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
@@ -25,6 +25,7 @@ #ifdef PDF_ENABLE_XFA #include "fpdfsdk/fpdfxfa/cpdfxfa_page.h" +#include "fpdfsdk/fpdfxfa/cpdfxfa_widget.h" #include "fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h" #endif // PDF_ENABLE_XFA @@ -286,8 +287,10 @@ bool CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus( ObservedPtr<CPDFSDK_Annot>* pSetAnnot, ObservedPtr<CPDFSDK_Annot>* pKillAnnot) { - bool bXFA = (*pSetAnnot && (*pSetAnnot)->GetXFAWidget()) || - (*pKillAnnot && (*pKillAnnot)->GetXFAWidget()); + CPDFXFA_Widget* pSetXFAWidget = ToXFAWidget(pSetAnnot->Get()); + CPDFXFA_Widget* pKillXFAWidget = ToXFAWidget(pKillAnnot->Get()); + bool bXFA = (pSetXFAWidget && pSetXFAWidget->GetXFAFFWidget()) || + (pKillXFAWidget && pKillXFAWidget->GetXFAFFWidget()); return !bXFA || static_cast<CPDFXFA_WidgetHandler*>(m_pXFAWidgetHandler.get()) ->OnXFAChangedFocus(pKillAnnot, pSetAnnot);
diff --git a/fpdfsdk/cpdfsdk_baannothandler.cpp b/fpdfsdk/cpdfsdk_baannothandler.cpp index 39b6f31..6aa6de7 100644 --- a/fpdfsdk/cpdfsdk_baannothandler.cpp +++ b/fpdfsdk/cpdfsdk_baannothandler.cpp
@@ -62,10 +62,9 @@ CFX_RenderDevice* pDevice, const CFX_Matrix& mtUser2Device, bool bDrawAnnots) { -#ifdef PDF_ENABLE_XFA - if (pAnnot->IsXFAField()) + if (pAnnot->AsXFAWidget()) return; -#endif // PDF_ENABLE_XFA + if (bDrawAnnots && pAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::POPUP) { pAnnot->AsBAAnnot()->DrawAppearance(pDevice, mtUser2Device, CPDF_Annot::Normal, nullptr);
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp index e52a72b..7b878f7 100644 --- a/fpdfsdk/cpdfsdk_pageview.cpp +++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -25,6 +25,7 @@ #ifdef PDF_ENABLE_XFA #include "fpdfsdk/fpdfxfa/cpdfxfa_page.h" +#include "fpdfsdk/fpdfxfa/cpdfxfa_widget.h" #include "xfa/fxfa/cxfa_ffdocview.h" #include "xfa/fxfa/cxfa_ffpageview.h" #endif // PDF_ENABLE_XFA @@ -193,7 +194,7 @@ return nullptr; for (CPDFSDK_Annot* pAnnot : m_SDKAnnotArray) { - if (pAnnot->GetXFAWidget() == hWidget) + if (ToXFAWidget(pAnnot)->GetXFAFFWidget() == hWidget) return pAnnot; } return nullptr;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp index 3f26e66..79b3e87 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp +++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
@@ -13,6 +13,7 @@ #include "core/fpdfapi/render/cpdf_pagerendercache.h" #include "fpdfsdk/cpdfsdk_pageview.h" #include "fpdfsdk/fpdfxfa/cpdfxfa_context.h" +#include "fpdfsdk/fpdfxfa/cpdfxfa_widget.h" #include "third_party/base/ptr_util.h" #include "xfa/fxfa/cxfa_ffdocview.h" #include "xfa/fxfa/cxfa_ffpageview.h" @@ -175,6 +176,10 @@ CPDFSDK_Annot* CPDFXFA_Page::GetNextXFAAnnot(CPDFSDK_Annot* pSDKAnnot, bool bNext) { + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pSDKAnnot); + if (!pXFAWidget) + return nullptr; + ObservedPtr<CPDFSDK_Annot> pObservedAnnot(pSDKAnnot); CPDFSDK_PageView* pPageView = pSDKAnnot->GetPageView(); std::unique_ptr<IXFA_WidgetIterator> pWidgetIterator( @@ -187,8 +192,9 @@ if (!pObservedAnnot || !pWidgetIterator) return nullptr; - if (pWidgetIterator->GetCurrentWidget() != pSDKAnnot->GetXFAWidget()) - pWidgetIterator->SetCurrentWidget(pSDKAnnot->GetXFAWidget()); + if (pWidgetIterator->GetCurrentWidget() != pXFAWidget->GetXFAFFWidget()) + pWidgetIterator->SetCurrentWidget(pXFAWidget->GetXFAFFWidget()); + CXFA_FFWidget* hNextFocus = bNext ? pWidgetIterator->MoveToNext() : pWidgetIterator->MoveToPrevious(); if (!hNextFocus && pSDKAnnot) @@ -242,13 +248,14 @@ CXFA_RenderContext renderContext(xfaView, rectClip, mtUser2Device); renderContext.DoRender(&gs); - if (!pAnnot) + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return; CXFA_FFDocView* docView = xfaView->GetDocView(); if (!docView) return; - docView->GetWidgetHandler()->RenderWidget(pAnnot->GetXFAWidget(), &gs, + docView->GetWidgetHandler()->RenderWidget(pXFAWidget->GetXFAFFWidget(), &gs, mtUser2Device, false); }
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp index 3505a3e..f4c9934 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp +++ b/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp
@@ -9,21 +9,17 @@ #include "fpdfsdk/ipdfsdk_annothandler.h" #include "xfa/fxfa/cxfa_ffwidget.h" -CPDFXFA_Widget::CPDFXFA_Widget(CXFA_FFWidget* pAnnot, +CPDFXFA_Widget::CPDFXFA_Widget(CXFA_FFWidget* pXFAFFWidget, CPDFSDK_PageView* pPageView, CPDFSDK_InteractiveForm* pInteractiveForm) : CPDFSDK_Annot(pPageView), m_pInteractiveForm(pInteractiveForm), - m_pXFAWidget(pAnnot) {} + m_pXFAFFWidget(pXFAFFWidget) {} CPDFXFA_Widget::~CPDFXFA_Widget() = default; -bool CPDFXFA_Widget::IsXFAField() const { - return true; -} - -CXFA_FFWidget* CPDFXFA_Widget::GetXFAWidget() const { - return m_pXFAWidget.Get(); +CPDFXFA_Widget* CPDFXFA_Widget::AsXFAWidget() { + return this; } CPDF_Annot::Subtype CPDFXFA_Widget::GetAnnotSubtype() const { @@ -31,5 +27,5 @@ } CFX_FloatRect CPDFXFA_Widget::GetRect() const { - return GetXFAWidget()->GetLayoutItem()->GetRect(false).ToFloatRect(); + return GetXFAFFWidget()->GetLayoutItem()->GetRect(false).ToFloatRect(); }
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widget.h b/fpdfsdk/fpdfxfa/cpdfxfa_widget.h index ba3b23d..76d9878 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_widget.h +++ b/fpdfsdk/fpdfxfa/cpdfxfa_widget.h
@@ -12,37 +12,31 @@ #include "core/fxcrt/observed_ptr.h" #include "core/fxcrt/unowned_ptr.h" #include "fpdfsdk/cpdfsdk_annot.h" +#include "xfa/fxfa/cxfa_ffwidget.h" class CPDFSDK_InteractiveForm; class CPDFSDK_PageView; -class CXFA_FFWidget; class CPDFXFA_Widget final : public CPDFSDK_Annot { public: - CPDFXFA_Widget(CXFA_FFWidget* pAnnot, + CPDFXFA_Widget(CXFA_FFWidget* pXFAFFWidget, CPDFSDK_PageView* pPageView, CPDFSDK_InteractiveForm* pInteractiveForm); ~CPDFXFA_Widget() override; // CPDFSDK_Annot: - bool IsXFAField() const override; - CXFA_FFWidget* GetXFAWidget() const override; + CPDFXFA_Widget* AsXFAWidget() override; CPDF_Annot::Subtype GetAnnotSubtype() const override; CFX_FloatRect GetRect() const override; + CXFA_FFWidget* GetXFAFFWidget() const { return m_pXFAFFWidget.Get(); } CPDFSDK_InteractiveForm* GetInteractiveForm() const { return m_pInteractiveForm.Get(); } private: UnownedPtr<CPDFSDK_InteractiveForm> const m_pInteractiveForm; - ObservedPtr<CXFA_FFWidget> const m_pXFAWidget; + ObservedPtr<CXFA_FFWidget> const m_pXFAFFWidget; }; -inline CPDFXFA_Widget* ToXFAWidget(CPDFSDK_Annot* pAnnot) { - return pAnnot && pAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::XFAWIDGET - ? static_cast<CPDFXFA_Widget*>(pAnnot) - : nullptr; -} - #endif // FPDFSDK_FPDFXFA_CPDFXFA_WIDGET_H_
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp index 7b7c53b..b2bc251 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp +++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
@@ -210,7 +210,8 @@ } bool CPDFXFA_WidgetHandler::CanAnswer(CPDFSDK_Annot* pAnnot) { - return !!pAnnot->GetXFAWidget(); + CPDFXFA_Widget* pWidget = ToXFAWidget(pAnnot); + return pWidget && pWidget->GetXFAFFWidget(); } CPDFSDK_Annot* CPDFXFA_WidgetHandler::NewAnnot(CPDF_Annot* pAnnot, @@ -229,17 +230,17 @@ CFX_RenderDevice* pDevice, const CFX_Matrix& mtUser2Device, bool bDrawAnnots) { - ASSERT(pPageView); - ASSERT(pAnnot); - - CXFA_Graphics gs(pDevice); + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + ASSERT(pXFAWidget); bool bIsHighlight = false; if (pPageView->GetFormFillEnv()->GetFocusAnnot() != pAnnot) bIsHighlight = true; - GetXFAWidgetHandler(pAnnot)->RenderWidget(pAnnot->GetXFAWidget(), &gs, - mtUser2Device, bIsHighlight); + CXFA_Graphics gs(pDevice); + GetXFAFFWidgetHandler(pXFAWidget) + ->RenderWidget(pXFAWidget->GetXFAFFWidget(), &gs, mtUser2Device, + bIsHighlight); // to do highlight and shadow } @@ -252,10 +253,11 @@ CFX_FloatRect CPDFXFA_WidgetHandler::GetViewBBox(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot) { - CXFA_Node* node = pAnnot->GetXFAWidget()->GetNode(); + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + CXFA_Node* node = pXFAWidget->GetXFAFFWidget()->GetNode(); ASSERT(node->IsWidgetReady()); - CFX_RectF rcBBox = pAnnot->GetXFAWidget()->GetBBox( + CFX_RectF rcBBox = pXFAWidget->GetXFAFFWidget()->GetBBox( node->GetFFWidgetType() == XFA_FFWidgetType::kSignature ? CXFA_FFWidget::kDrawFocus : CXFA_FFWidget::kDoNotDrawFocus); @@ -266,62 +268,77 @@ } WideString CPDFXFA_WidgetHandler::GetText(CPDFSDK_Annot* pAnnot) { - if (!pAnnot) + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return WideString(); - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - return pWidgetHandler->GetText(pAnnot->GetXFAWidget()); + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->GetText(pXFAWidget->GetXFAFFWidget()); } WideString CPDFXFA_WidgetHandler::GetSelectedText(CPDFSDK_Annot* pAnnot) { - if (!pAnnot) + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return WideString(); - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - return pWidgetHandler->GetSelectedText(pAnnot->GetXFAWidget()); + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->GetSelectedText(pXFAWidget->GetXFAFFWidget()); } void CPDFXFA_WidgetHandler::ReplaceSelection(CPDFSDK_Annot* pAnnot, const WideString& text) { - if (!pAnnot) + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - return pWidgetHandler->PasteText(pAnnot->GetXFAWidget(), text); + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->PasteText(pXFAWidget->GetXFAFFWidget(), text); } bool CPDFXFA_WidgetHandler::CanUndo(CPDFSDK_Annot* pAnnot) { - if (!pAnnot) + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - return pWidgetHandler->CanUndo(pAnnot->GetXFAWidget()); + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->CanUndo(pXFAWidget->GetXFAFFWidget()); } bool CPDFXFA_WidgetHandler::CanRedo(CPDFSDK_Annot* pAnnot) { - if (!pAnnot) + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - return pWidgetHandler->CanRedo(pAnnot->GetXFAWidget()); + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->CanRedo(pXFAWidget->GetXFAFFWidget()); } bool CPDFXFA_WidgetHandler::Undo(CPDFSDK_Annot* pAnnot) { - if (!pAnnot) + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - return pWidgetHandler->Undo(pAnnot->GetXFAWidget()); + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->Undo(pXFAWidget->GetXFAFFWidget()); } bool CPDFXFA_WidgetHandler::Redo(CPDFSDK_Annot* pAnnot) { - if (!pAnnot) + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - return pWidgetHandler->Redo(pAnnot->GetXFAWidget()); + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->Redo(pXFAWidget->GetXFAFFWidget()); } bool CPDFXFA_WidgetHandler::HitTest(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, const CFX_PointF& point) { - if (!pPageView || !pAnnot) + if (!pPageView) + return false; + + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return false; CPDFSDK_FormFillEnvironment* pFormFillEnv = pPageView->GetFormFillEnv(); @@ -342,38 +359,51 @@ return false; FWL_WidgetHit dwHitTest = - pWidgetHandler->OnHitTest(pAnnot->GetXFAWidget(), point); + pWidgetHandler->OnHitTest(pXFAWidget->GetXFAFFWidget(), point); return dwHitTest != FWL_WidgetHit::Unknown; } void CPDFXFA_WidgetHandler::OnMouseEnter(CPDFSDK_PageView* pPageView, ObservedPtr<CPDFSDK_Annot>* pAnnot, uint32_t nFlag) { - if (!pPageView || !pAnnot->HasObservable()) + if (!pPageView) return; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get()); - pWidgetHandler->OnMouseEnter((*pAnnot)->GetXFAWidget()); + + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot->Get()); + if (!pXFAWidget) + return; + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + pWidgetHandler->OnMouseEnter(pXFAWidget->GetXFAFFWidget()); } void CPDFXFA_WidgetHandler::OnMouseExit(CPDFSDK_PageView* pPageView, ObservedPtr<CPDFSDK_Annot>* pAnnot, uint32_t nFlag) { - if (!pPageView || !pAnnot->HasObservable()) + if (!pPageView) return; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get()); - pWidgetHandler->OnMouseExit((*pAnnot)->GetXFAWidget()); + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot->Get()); + if (!pXFAWidget) + return; + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + pWidgetHandler->OnMouseExit(pXFAWidget->GetXFAFFWidget()); } bool CPDFXFA_WidgetHandler::OnLButtonDown(CPDFSDK_PageView* pPageView, ObservedPtr<CPDFSDK_Annot>* pAnnot, uint32_t nFlags, const CFX_PointF& point) { - if (!pPageView || !pAnnot->HasObservable()) + if (!pPageView) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get()); - return pWidgetHandler->OnLButtonDown((*pAnnot)->GetXFAWidget(), + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot->Get()); + if (!pXFAWidget) + return false; + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->OnLButtonDown(pXFAWidget->GetXFAFFWidget(), GetFWLFlags(nFlags), point); } @@ -381,11 +411,15 @@ ObservedPtr<CPDFSDK_Annot>* pAnnot, uint32_t nFlags, const CFX_PointF& point) { - if (!pPageView || !pAnnot->HasObservable()) + if (!pPageView) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get()); - return pWidgetHandler->OnLButtonUp((*pAnnot)->GetXFAWidget(), + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot->Get()); + if (!pXFAWidget) + return false; + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->OnLButtonUp(pXFAWidget->GetXFAFFWidget(), GetFWLFlags(nFlags), point); } @@ -393,11 +427,15 @@ ObservedPtr<CPDFSDK_Annot>* pAnnot, uint32_t nFlags, const CFX_PointF& point) { - if (!pPageView || !pAnnot->HasObservable()) + if (!pPageView) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get()); - return pWidgetHandler->OnLButtonDblClk((*pAnnot)->GetXFAWidget(), + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot->Get()); + if (!pXFAWidget) + return false; + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->OnLButtonDblClk(pXFAWidget->GetXFAFFWidget(), GetFWLFlags(nFlags), point); } @@ -405,11 +443,15 @@ ObservedPtr<CPDFSDK_Annot>* pAnnot, uint32_t nFlags, const CFX_PointF& point) { - if (!pPageView || !pAnnot->HasObservable()) + if (!pPageView) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get()); - return pWidgetHandler->OnMouseMove((*pAnnot)->GetXFAWidget(), + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot->Get()); + if (!pXFAWidget) + return false; + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->OnMouseMove(pXFAWidget->GetXFAFFWidget(), GetFWLFlags(nFlags), point); } @@ -418,11 +460,15 @@ uint32_t nFlags, short zDelta, const CFX_PointF& point) { - if (!pPageView || !pAnnot->HasObservable()) + if (!pPageView) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get()); - return pWidgetHandler->OnMouseWheel((*pAnnot)->GetXFAWidget(), + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot->Get()); + if (!pXFAWidget) + return false; + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->OnMouseWheel(pXFAWidget->GetXFAFFWidget(), GetFWLFlags(nFlags), zDelta, point); } @@ -430,11 +476,15 @@ ObservedPtr<CPDFSDK_Annot>* pAnnot, uint32_t nFlags, const CFX_PointF& point) { - if (!pPageView || !pAnnot->HasObservable()) + if (!pPageView) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get()); - return pWidgetHandler->OnRButtonDown((*pAnnot)->GetXFAWidget(), + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot->Get()); + if (!pXFAWidget) + return false; + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->OnRButtonDown(pXFAWidget->GetXFAFFWidget(), GetFWLFlags(nFlags), point); } @@ -442,11 +492,15 @@ ObservedPtr<CPDFSDK_Annot>* pAnnot, uint32_t nFlags, const CFX_PointF& point) { - if (!pPageView || !pAnnot->HasObservable()) + if (!pPageView) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get()); - return pWidgetHandler->OnRButtonUp((*pAnnot)->GetXFAWidget(), + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot->Get()); + if (!pXFAWidget) + return false; + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->OnRButtonUp(pXFAWidget->GetXFAFFWidget(), GetFWLFlags(nFlags), point); } @@ -454,44 +508,51 @@ ObservedPtr<CPDFSDK_Annot>* pAnnot, uint32_t nFlags, const CFX_PointF& point) { - if (!pPageView || !pAnnot->HasObservable()) + if (!pPageView) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get()); - return pWidgetHandler->OnRButtonDblClk((*pAnnot)->GetXFAWidget(), + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot->Get()); + if (!pXFAWidget) + return false; + + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->OnRButtonDblClk(pXFAWidget->GetXFAFFWidget(), GetFWLFlags(nFlags), point); } bool CPDFXFA_WidgetHandler::OnChar(CPDFSDK_Annot* pAnnot, uint32_t nChar, uint32_t nFlags) { - if (!pAnnot) + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - return pWidgetHandler->OnChar(pAnnot->GetXFAWidget(), nChar, + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->OnChar(pXFAWidget->GetXFAFFWidget(), nChar, GetFWLFlags(nFlags)); } bool CPDFXFA_WidgetHandler::OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) { - if (!pAnnot) + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - return pWidgetHandler->OnKeyDown(pAnnot->GetXFAWidget(), nKeyCode, + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->OnKeyDown(pXFAWidget->GetXFAFFWidget(), nKeyCode, GetFWLFlags(nFlag)); } bool CPDFXFA_WidgetHandler::OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) { - if (!pAnnot) + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + if (!pXFAWidget) return false; - CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - return pWidgetHandler->OnKeyUp(pAnnot->GetXFAWidget(), nKeyCode, + CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget); + return pWidgetHandler->OnKeyUp(pXFAWidget->GetXFAFFWidget(), nKeyCode, GetFWLFlags(nFlag)); } @@ -502,7 +563,11 @@ bool CPDFXFA_WidgetHandler::OnKillFocus(ObservedPtr<CPDFSDK_Annot>* pAnnot, uint32_t nFlag) { - CXFA_FFWidget* hWidget = *pAnnot ? (*pAnnot)->GetXFAWidget() : nullptr; + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot->Get()); + if (!pXFAWidget) + return true; + + CXFA_FFWidget* hWidget = pXFAWidget->GetXFAFFWidget(); if (!hWidget) return true; @@ -519,14 +584,18 @@ ObservedPtr<CPDFSDK_Annot>* pNewAnnot) { CXFA_FFWidgetHandler* pWidgetHandler = nullptr; if (pOldAnnot->HasObservable()) - pWidgetHandler = GetXFAWidgetHandler(pOldAnnot->Get()); + pWidgetHandler = GetXFAFFWidgetHandler(pOldAnnot->Get()); else if (pNewAnnot->HasObservable()) - pWidgetHandler = GetXFAWidgetHandler(pNewAnnot->Get()); + pWidgetHandler = GetXFAFFWidgetHandler(pNewAnnot->Get()); if (!pWidgetHandler) return true; - CXFA_FFWidget* hWidget = *pNewAnnot ? (*pNewAnnot)->GetXFAWidget() : nullptr; + CPDFXFA_Widget* pNewXFAWidget = ToXFAWidget(pNewAnnot->Get()); + if (!pNewXFAWidget) + return true; + + CXFA_FFWidget* hWidget = pNewXFAWidget->GetXFAFFWidget(); if (!hWidget) return true; @@ -557,7 +626,7 @@ return false; } -CXFA_FFWidgetHandler* CPDFXFA_WidgetHandler::GetXFAWidgetHandler( +CXFA_FFWidgetHandler* CPDFXFA_WidgetHandler::GetXFAFFWidgetHandler( CPDFSDK_Annot* pAnnot) { if (!pAnnot) return nullptr;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h index 9bb5891..9926052 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h +++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
@@ -105,7 +105,7 @@ ObservedPtr<CPDFSDK_Annot>* pNewAnnot); private: - CXFA_FFWidgetHandler* GetXFAWidgetHandler(CPDFSDK_Annot* pAnnot); + CXFA_FFWidgetHandler* GetXFAFFWidgetHandler(CPDFSDK_Annot* pAnnot); uint32_t GetFWLFlags(uint32_t dwFlag); UnownedPtr<CPDFSDK_FormFillEnvironment> m_pFormFillEnv;