De-virtualize IsSignatureWidget()
Change-Id: I0b81f5fdaacb59a6b5d9f21cc92f72502990c06b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/85410
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_annot.cpp b/fpdfsdk/cpdfsdk_annot.cpp
index f8f8839..f41fb3a 100644
--- a/fpdfsdk/cpdfsdk_annot.cpp
+++ b/fpdfsdk/cpdfsdk_annot.cpp
@@ -40,10 +40,6 @@
return nullptr;
}
-bool CPDFSDK_Annot::IsSignatureWidget() const {
- return false;
-}
-
IPDF_Page* CPDFSDK_Annot::GetPage() {
#ifdef PDF_ENABLE_XFA
IPDF_Page* pXFAPage = GetXFAPage();
diff --git a/fpdfsdk/cpdfsdk_annot.h b/fpdfsdk/cpdfsdk_annot.h
index 2b40449..3979d0b 100644
--- a/fpdfsdk/cpdfsdk_annot.h
+++ b/fpdfsdk/cpdfsdk_annot.h
@@ -27,7 +27,6 @@
virtual int GetLayoutOrder() const;
virtual CPDF_Annot* GetPDFAnnot() const;
- virtual bool IsSignatureWidget() const;
virtual CPDF_Annot::Subtype GetAnnotSubtype() const = 0;
virtual CFX_FloatRect GetRect() const = 0;
diff --git a/fpdfsdk/cpdfsdk_annotiterator.cpp b/fpdfsdk/cpdfsdk_annotiterator.cpp
index 1c20f4c..aa373d4 100644
--- a/fpdfsdk/cpdfsdk_annotiterator.cpp
+++ b/fpdfsdk/cpdfsdk_annotiterator.cpp
@@ -12,6 +12,7 @@
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "fpdfsdk/cpdfsdk_annot.h"
#include "fpdfsdk/cpdfsdk_pageview.h"
+#include "fpdfsdk/cpdfsdk_widget.h"
#include "third_party/base/containers/contains.h"
namespace {
@@ -69,9 +70,10 @@
void CPDFSDK_AnnotIterator::CollectAnnots(
std::vector<UnownedPtr<CPDFSDK_Annot>>* pArray) {
for (auto* pAnnot : m_pPageView->GetAnnotList()) {
- if (pdfium::Contains(m_subtypes, pAnnot->GetAnnotSubtype()) &&
- !pAnnot->IsSignatureWidget()) {
- pArray->emplace_back(pAnnot);
+ if (pdfium::Contains(m_subtypes, pAnnot->GetAnnotSubtype())) {
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ if (!pWidget || !pWidget->IsSignatureWidget())
+ pArray->emplace_back(pAnnot);
}
}
}
diff --git a/fpdfsdk/cpdfsdk_widget.h b/fpdfsdk/cpdfsdk_widget.h
index b5fbea5..9b32489 100644
--- a/fpdfsdk/cpdfsdk_widget.h
+++ b/fpdfsdk/cpdfsdk_widget.h
@@ -50,13 +50,13 @@
~CPDFSDK_Widget() override;
// CPDFSDK_BAAnnot:
- bool IsSignatureWidget() const override;
CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT) override;
bool IsAppearanceValid() override;
// CPDFSDK_Annot:
int GetLayoutOrder() const override;
+ bool IsSignatureWidget() const;
void SetRect(const CFX_FloatRect& rect);
FormFieldType GetFieldType() const;
int GetFieldFlags() const;
diff --git a/fpdfsdk/cpdfsdk_widgethandler.cpp b/fpdfsdk/cpdfsdk_widgethandler.cpp
index 35f074b..dff2596 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_widgethandler.cpp
@@ -83,18 +83,20 @@
CFX_RenderDevice* pDevice,
const CFX_Matrix& mtUser2Device,
bool bDrawAnnots) {
- if (pAnnot->IsSignatureWidget()) {
- pAnnot->AsBAAnnot()->DrawAppearance(
- pDevice, mtUser2Device, CPDF_Annot::AppearanceMode::kNormal, nullptr);
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ if (pWidget->IsSignatureWidget()) {
+ pWidget->DrawAppearance(pDevice, mtUser2Device,
+ CPDF_Annot::AppearanceMode::kNormal, nullptr);
} else {
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnDraw(
- pAnnot->GetPageView(), pAnnot, pDevice, mtUser2Device);
+ pWidget->GetPageView(), pWidget, pDevice, mtUser2Device);
}
}
void CPDFSDK_WidgetHandler::OnMouseEnter(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlag) {
- if (!pAnnot->IsSignatureWidget()) {
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ if (!pWidget->IsSignatureWidget()) {
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnMouseEnter(
pAnnot->GetPageView(), pAnnot, nFlag);
}
@@ -102,7 +104,8 @@
void CPDFSDK_WidgetHandler::OnMouseExit(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlag) {
- if (!pAnnot->IsSignatureWidget()) {
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ if (!pWidget->IsSignatureWidget()) {
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnMouseExit(
pAnnot->GetPageView(), pAnnot, nFlag);
}
@@ -111,7 +114,8 @@
bool CPDFSDK_WidgetHandler::OnLButtonDown(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlags,
const CFX_PointF& point) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnLButtonDown(
pAnnot->GetPageView(), pAnnot, nFlags, point);
}
@@ -119,7 +123,8 @@
bool CPDFSDK_WidgetHandler::OnLButtonUp(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlags,
const CFX_PointF& point) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnLButtonUp(
pAnnot->GetPageView(), pAnnot, nFlags, point);
}
@@ -127,7 +132,8 @@
bool CPDFSDK_WidgetHandler::OnLButtonDblClk(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlags,
const CFX_PointF& point) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnLButtonDblClk(
pAnnot->GetPageView(), pAnnot, nFlags, point);
}
@@ -135,7 +141,8 @@
bool CPDFSDK_WidgetHandler::OnMouseMove(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlags,
const CFX_PointF& point) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnMouseMove(
pAnnot->GetPageView(), pAnnot, nFlags, point);
}
@@ -144,7 +151,8 @@
Mask<FWL_EVENTFLAG> nFlags,
const CFX_PointF& point,
const CFX_Vector& delta) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnMouseWheel(
pAnnot->GetPageView(), pAnnot, nFlags, point, delta);
}
@@ -152,7 +160,8 @@
bool CPDFSDK_WidgetHandler::OnRButtonDown(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlags,
const CFX_PointF& point) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnRButtonDown(
pAnnot->GetPageView(), pAnnot, nFlags, point);
}
@@ -160,7 +169,8 @@
bool CPDFSDK_WidgetHandler::OnRButtonUp(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlags,
const CFX_PointF& point) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnRButtonUp(
pAnnot->GetPageView(), pAnnot, nFlags, point);
}
@@ -174,7 +184,8 @@
bool CPDFSDK_WidgetHandler::OnChar(CPDFSDK_Annot* pAnnot,
uint32_t nChar,
Mask<FWL_EVENTFLAG> nFlags) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnChar(
pAnnot, nChar, nFlags);
}
@@ -182,7 +193,8 @@
bool CPDFSDK_WidgetHandler::OnKeyDown(CPDFSDK_Annot* pAnnot,
FWL_VKEYCODE nKeyCode,
Mask<FWL_EVENTFLAG> nFlag) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnKeyDown(
pAnnot, nKeyCode, nFlag);
}
@@ -194,10 +206,10 @@
}
void CPDFSDK_WidgetHandler::OnLoad(CPDFSDK_Annot* pAnnot) {
- if (pAnnot->IsSignatureWidget())
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ if (pWidget->IsSignatureWidget())
return;
- CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
if (!pWidget->IsAppearanceValid())
pWidget->ResetAppearance(pdfium::nullopt, CPDFSDK_Widget::kValueUnchanged);
@@ -227,7 +239,8 @@
if (!IsFocusableAnnot(pAnnot->GetPDFAnnot()->GetSubtype()))
return false;
- return pAnnot->IsSignatureWidget() ||
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ return pWidget->IsSignatureWidget() ||
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnSetFocus(
pAnnot, nFlag);
}
@@ -237,7 +250,8 @@
if (!IsFocusableAnnot(pAnnot->GetPDFAnnot()->GetSubtype()))
return false;
- return pAnnot->IsSignatureWidget() ||
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ return pWidget->IsSignatureWidget() ||
GetFormFillEnvironment()->GetInteractiveFormFiller()->OnKillFocus(
pAnnot, nFlag);
}
@@ -245,75 +259,85 @@
bool CPDFSDK_WidgetHandler::SetIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot,
int index,
bool selected) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->SetIndexSelected(
pAnnot, index, selected);
}
bool CPDFSDK_WidgetHandler::IsIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot,
int index) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot.Get());
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->IsIndexSelected(
pAnnot, index);
}
CFX_FloatRect CPDFSDK_WidgetHandler::GetViewBBox(CPDFSDK_Annot* pAnnot) {
- if (!pAnnot->IsSignatureWidget()) {
- return CFX_FloatRect(
- GetFormFillEnvironment()->GetInteractiveFormFiller()->GetViewBBox(
- pAnnot->GetPageView(), pAnnot));
- }
- return CFX_FloatRect();
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ if (pWidget->IsSignatureWidget())
+ return CFX_FloatRect();
+
+ return CFX_FloatRect(
+ GetFormFillEnvironment()->GetInteractiveFormFiller()->GetViewBBox(
+ pAnnot->GetPageView(), pAnnot));
}
WideString CPDFSDK_WidgetHandler::GetText(CPDFSDK_Annot* pAnnot) {
- if (!pAnnot->IsSignatureWidget()) {
- return GetFormFillEnvironment()->GetInteractiveFormFiller()->GetText(
- pAnnot);
- }
- return WideString();
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ if (pWidget->IsSignatureWidget())
+ return WideString();
+
+ return GetFormFillEnvironment()->GetInteractiveFormFiller()->GetText(pAnnot);
}
WideString CPDFSDK_WidgetHandler::GetSelectedText(CPDFSDK_Annot* pAnnot) {
- if (!pAnnot->IsSignatureWidget()) {
- return GetFormFillEnvironment()
- ->GetInteractiveFormFiller()
- ->GetSelectedText(pAnnot);
- }
- return WideString();
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ if (pWidget->IsSignatureWidget())
+ return WideString();
+
+ return GetFormFillEnvironment()->GetInteractiveFormFiller()->GetSelectedText(
+ pAnnot);
}
void CPDFSDK_WidgetHandler::ReplaceSelection(CPDFSDK_Annot* pAnnot,
const WideString& text) {
- if (!pAnnot->IsSignatureWidget()) {
- GetFormFillEnvironment()->GetInteractiveFormFiller()->ReplaceSelection(
- pAnnot, text);
- }
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ if (pWidget->IsSignatureWidget())
+ return;
+
+ GetFormFillEnvironment()->GetInteractiveFormFiller()->ReplaceSelection(pAnnot,
+ text);
}
bool CPDFSDK_WidgetHandler::SelectAllText(CPDFSDK_Annot* pAnnot) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->SelectAllText(
pAnnot);
}
bool CPDFSDK_WidgetHandler::CanUndo(CPDFSDK_Annot* pAnnot) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->CanUndo(pAnnot);
}
bool CPDFSDK_WidgetHandler::CanRedo(CPDFSDK_Annot* pAnnot) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->CanRedo(pAnnot);
}
bool CPDFSDK_WidgetHandler::Undo(CPDFSDK_Annot* pAnnot) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->Undo(pAnnot);
}
bool CPDFSDK_WidgetHandler::Redo(CPDFSDK_Annot* pAnnot) {
- return !pAnnot->IsSignatureWidget() &&
+ CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
+ return !pWidget->IsSignatureWidget() &&
GetFormFillEnvironment()->GetInteractiveFormFiller()->Redo(pAnnot);
}