Sanitize mouse wheel code.

Consistently pass the mouse wheel delta as a CFX_Vector through out the
stack. Whereas currently sometimes only the delta-Y value gets passed,
and it is sometimes passed as a double and sometimes as a short.

Along the way, encapsulate the CFWL_MessageMouseWheel class and clean
up some nits.

Change-Id: I86a678f7ea841045883654f58f43375174e53f70
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/68471
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.cpp b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
index 891e950..d579298 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.cpp
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
@@ -182,11 +182,11 @@
     CPDFSDK_PageView* pPageView,
     ObservedPtr<CPDFSDK_Annot>* pAnnot,
     uint32_t nFlags,
-    short zDelta,
-    const CFX_PointF& point) {
+    const CFX_PointF& point,
+    const CFX_Vector& delta) {
   ASSERT(pAnnot->HasObservable());
-  return GetAnnotHandler(pAnnot->Get())
-      ->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point);
+  auto* handler = GetAnnotHandler(pAnnot->Get());
+  return handler->OnMouseWheel(pPageView, pAnnot, nFlags, point, delta);
 }
 
 bool CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown(
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.h b/fpdfsdk/cpdfsdk_annothandlermgr.h
index a103469..dd01348 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.h
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.h
@@ -86,8 +86,8 @@
   bool Annot_OnMouseWheel(CPDFSDK_PageView* pPageView,
                           ObservedPtr<CPDFSDK_Annot>* pAnnot,
                           uint32_t nFlags,
-                          short zDelta,
-                          const CFX_PointF& point);
+                          const CFX_PointF& point,
+                          const CFX_Vector& delta);
   bool Annot_OnRButtonDown(CPDFSDK_PageView* pPageView,
                            ObservedPtr<CPDFSDK_Annot>* pAnnot,
                            uint32_t nFlags,
diff --git a/fpdfsdk/cpdfsdk_baannothandler.cpp b/fpdfsdk/cpdfsdk_baannothandler.cpp
index a3a65ac..ea50f58 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.cpp
+++ b/fpdfsdk/cpdfsdk_baannothandler.cpp
@@ -7,6 +7,7 @@
 #include "fpdfsdk/cpdfsdk_baannothandler.h"
 
 #include <memory>
+#include <vector>
 
 #include "core/fpdfapi/page/cpdf_page.h"
 #include "core/fpdfdoc/cpdf_interactiveform.h"
@@ -136,8 +137,8 @@
 bool CPDFSDK_BAAnnotHandler::OnMouseWheel(CPDFSDK_PageView* pPageView,
                                           ObservedPtr<CPDFSDK_Annot>* pAnnot,
                                           uint32_t nFlags,
-                                          short zDelta,
-                                          const CFX_PointF& point) {
+                                          const CFX_PointF& point,
+                                          const CFX_Vector& delta) {
   return false;
 }
 
diff --git a/fpdfsdk/cpdfsdk_baannothandler.h b/fpdfsdk/cpdfsdk_baannothandler.h
index 03a6b9f..3eaf446 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.h
+++ b/fpdfsdk/cpdfsdk_baannothandler.h
@@ -76,8 +76,8 @@
   bool OnMouseWheel(CPDFSDK_PageView* pPageView,
                     ObservedPtr<CPDFSDK_Annot>* pAnnot,
                     uint32_t nFlags,
-                    short zDelta,
-                    const CFX_PointF& point) override;
+                    const CFX_PointF& point,
+                    const CFX_Vector& delta) override;
   bool OnRButtonDown(CPDFSDK_PageView* pPageView,
                      ObservedPtr<CPDFSDK_Annot>* pAnnot,
                      uint32_t nFlags,
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index e63fca6..4350605 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -419,8 +419,7 @@
   m_pCaptureWidget.Reset();
 }
 
-bool CPDFSDK_PageView::OnMouseWheel(double deltaX,
-                                    double deltaY,
+bool CPDFSDK_PageView::OnMouseWheel(const CFX_Vector& delta,
                                     const CFX_PointF& point,
                                     int nFlag) {
   ObservedPtr<CPDFSDK_Annot> pAnnot(GetFXWidgetAtPoint(point));
@@ -429,8 +428,8 @@
 
   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr =
       m_pFormFillEnv->GetAnnotHandlerMgr();
-  return pAnnotHandlerMgr->Annot_OnMouseWheel(this, &pAnnot, nFlag,
-                                              static_cast<int>(deltaY), point);
+  return pAnnotHandlerMgr->Annot_OnMouseWheel(this, &pAnnot, nFlag, point,
+                                              delta);
 }
 
 bool CPDFSDK_PageView::SetIndexSelected(int index, bool selected) {
diff --git a/fpdfsdk/cpdfsdk_pageview.h b/fpdfsdk/cpdfsdk_pageview.h
index 89adc7d..c59b671 100644
--- a/fpdfsdk/cpdfsdk_pageview.h
+++ b/fpdfsdk/cpdfsdk_pageview.h
@@ -73,8 +73,7 @@
   bool OnKeyDown(int nKeyCode, int nFlag);
   bool OnKeyUp(int nKeyCode, int nFlag);
   bool OnMouseMove(const CFX_PointF& point, int nFlag);
-  bool OnMouseWheel(double deltaX,
-                    double deltaY,
+  bool OnMouseWheel(const CFX_Vector& delta,
                     const CFX_PointF& point,
                     int nFlag);
 
diff --git a/fpdfsdk/cpdfsdk_widgethandler.cpp b/fpdfsdk/cpdfsdk_widgethandler.cpp
index f62f125..5881fd4 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_widgethandler.cpp
@@ -141,10 +141,10 @@
 bool CPDFSDK_WidgetHandler::OnMouseWheel(CPDFSDK_PageView* pPageView,
                                          ObservedPtr<CPDFSDK_Annot>* pAnnot,
                                          uint32_t nFlags,
-                                         short zDelta,
-                                         const CFX_PointF& point) {
+                                         const CFX_PointF& point,
+                                         const CFX_Vector& delta) {
   return !(*pAnnot)->IsSignatureWidget() &&
-         m_pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point);
+         m_pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, point, delta);
 }
 
 bool CPDFSDK_WidgetHandler::OnRButtonDown(CPDFSDK_PageView* pPageView,
diff --git a/fpdfsdk/cpdfsdk_widgethandler.h b/fpdfsdk/cpdfsdk_widgethandler.h
index a1fb781..ebb6f6f 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.h
+++ b/fpdfsdk/cpdfsdk_widgethandler.h
@@ -76,8 +76,8 @@
   bool OnMouseWheel(CPDFSDK_PageView* pPageView,
                     ObservedPtr<CPDFSDK_Annot>* pAnnot,
                     uint32_t nFlags,
-                    short zDelta,
-                    const CFX_PointF& point) override;
+                    const CFX_PointF& point,
+                    const CFX_Vector& delta) override;
   bool OnRButtonDown(CPDFSDK_PageView* pPageView,
                      ObservedPtr<CPDFSDK_Annot>* pAnnot,
                      uint32_t nFlags,
diff --git a/fpdfsdk/formfiller/cffl_formfiller.cpp b/fpdfsdk/formfiller/cffl_formfiller.cpp
index 2d9ffda..d44b32a 100644
--- a/fpdfsdk/formfiller/cffl_formfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_formfiller.cpp
@@ -137,13 +137,13 @@
 
 bool CFFL_FormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView,
                                    uint32_t nFlags,
-                                   short zDelta,
-                                   const CFX_PointF& point) {
+                                   const CFX_PointF& point,
+                                   const CFX_Vector& delta) {
   if (!IsValid())
     return false;
 
   CPWL_Wnd* pWnd = GetPWLWindow(pPageView, true);
-  return pWnd && pWnd->OnMouseWheel(zDelta, FFLtoPWL(point), nFlags);
+  return pWnd && pWnd->OnMouseWheel(delta, FFLtoPWL(point), nFlags);
 }
 
 bool CFFL_FormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView,
diff --git a/fpdfsdk/formfiller/cffl_formfiller.h b/fpdfsdk/formfiller/cffl_formfiller.h
index ce43bbd..ba0f753 100644
--- a/fpdfsdk/formfiller/cffl_formfiller.h
+++ b/fpdfsdk/formfiller/cffl_formfiller.h
@@ -57,8 +57,8 @@
                            const CFX_PointF& point);
   virtual bool OnMouseWheel(CPDFSDK_PageView* pPageView,
                             uint32_t nFlags,
-                            short zDelta,
-                            const CFX_PointF& point);
+                            const CFX_PointF& point,
+                            const CFX_Vector& delta);
   virtual bool OnRButtonDown(CPDFSDK_PageView* pPageView,
                              uint32_t nFlags,
                              const CFX_PointF& point);
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
index b6dc475..8681c30 100644
--- a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
@@ -312,12 +312,12 @@
     CPDFSDK_PageView* pPageView,
     ObservedPtr<CPDFSDK_Annot>* pAnnot,
     uint32_t nFlags,
-    short zDelta,
-    const CFX_PointF& point) {
+    const CFX_PointF& point,
+    const CFX_Vector& delta) {
   ASSERT((*pAnnot)->GetPDFAnnot()->GetSubtype() == CPDF_Annot::Subtype::WIDGET);
   CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot->Get());
   return pFormFiller &&
-         pFormFiller->OnMouseWheel(pPageView, nFlags, zDelta, point);
+         pFormFiller->OnMouseWheel(pPageView, nFlags, point, delta);
 }
 
 bool CFFL_InteractiveFormFiller::OnRButtonDown(
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.h b/fpdfsdk/formfiller/cffl_interactiveformfiller.h
index 3adfe4e..d614b24 100644
--- a/fpdfsdk/formfiller/cffl_interactiveformfiller.h
+++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.h
@@ -65,8 +65,8 @@
   bool OnMouseWheel(CPDFSDK_PageView* pPageView,
                     ObservedPtr<CPDFSDK_Annot>* pAnnot,
                     uint32_t nFlags,
-                    short zDelta,
-                    const CFX_PointF& point);
+                    const CFX_PointF& point,
+                    const CFX_Vector& delta);
   bool OnRButtonDown(CPDFSDK_PageView* pPageView,
                      ObservedPtr<CPDFSDK_Annot>* pAnnot,
                      uint32_t nFlags,
diff --git a/fpdfsdk/fpdf_formfill.cpp b/fpdfsdk/fpdf_formfill.cpp
index ac09b2e..35d8a24 100644
--- a/fpdfsdk/fpdf_formfill.cpp
+++ b/fpdfsdk/fpdf_formfill.cpp
@@ -389,7 +389,7 @@
   CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
   if (!pPageView || !page_coord)
     return false;
-  return pPageView->OnMouseWheel(delta_x, delta_y,
+  return pPageView->OnMouseWheel(CFX_Vector(delta_x, delta_y),
                                  CFXPointFFromFSPointF(*page_coord), modifier);
 }
 
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
index 855c5c4..04fbcec 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
@@ -456,8 +456,8 @@
 bool CPDFXFA_WidgetHandler::OnMouseWheel(CPDFSDK_PageView* pPageView,
                                          ObservedPtr<CPDFSDK_Annot>* pAnnot,
                                          uint32_t nFlags,
-                                         short zDelta,
-                                         const CFX_PointF& point) {
+                                         const CFX_PointF& point,
+                                         const CFX_Vector& delta) {
   if (!pPageView)
     return false;
 
@@ -467,7 +467,7 @@
 
   CXFA_FFWidgetHandler* pWidgetHandler = GetXFAFFWidgetHandler(pXFAWidget);
   return pWidgetHandler->OnMouseWheel(pXFAWidget->GetXFAFFWidget(),
-                                      GetFWLFlags(nFlags), zDelta, point);
+                                      GetFWLFlags(nFlags), point, delta);
 }
 
 bool CPDFXFA_WidgetHandler::OnRButtonDown(CPDFSDK_PageView* pPageView,
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
index 9f066c5..abef600 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
@@ -77,8 +77,8 @@
   bool OnMouseWheel(CPDFSDK_PageView* pPageView,
                     ObservedPtr<CPDFSDK_Annot>* pAnnot,
                     uint32_t nFlags,
-                    short zDelta,
-                    const CFX_PointF& point) override;
+                    const CFX_PointF& point,
+                    const CFX_Vector& delta) override;
   bool OnRButtonDown(CPDFSDK_PageView* pPageView,
                      ObservedPtr<CPDFSDK_Annot>* pAnnot,
                      uint32_t nFlags,
diff --git a/fpdfsdk/ipdfsdk_annothandler.h b/fpdfsdk/ipdfsdk_annothandler.h
index d650d25..234d0b5 100644
--- a/fpdfsdk/ipdfsdk_annothandler.h
+++ b/fpdfsdk/ipdfsdk_annothandler.h
@@ -73,8 +73,8 @@
   virtual bool OnMouseWheel(CPDFSDK_PageView* pPageView,
                             ObservedPtr<CPDFSDK_Annot>* pAnnot,
                             uint32_t nFlags,
-                            short zDelta,
-                            const CFX_PointF& point) = 0;
+                            const CFX_PointF& point,
+                            const CFX_Vector& delta) = 0;
   virtual bool OnRButtonDown(CPDFSDK_PageView* pPageView,
                              ObservedPtr<CPDFSDK_Annot>* pAnnot,
                              uint32_t nFlags,
diff --git a/fpdfsdk/pwl/cpwl_edit.cpp b/fpdfsdk/pwl/cpwl_edit.cpp
index 77491da..d8a6b41 100644
--- a/fpdfsdk/pwl/cpwl_edit.cpp
+++ b/fpdfsdk/pwl/cpwl_edit.cpp
@@ -538,14 +538,14 @@
   return CPWL_EditCtrl::OnChar(nChar, nFlag);
 }
 
-bool CPWL_Edit::OnMouseWheel(short zDelta,
+bool CPWL_Edit::OnMouseWheel(const CFX_Vector& delta,
                              const CFX_PointF& point,
                              uint32_t nFlag) {
   if (!HasFlag(PES_MULTILINE))
     return false;
 
   CFX_PointF ptScroll = GetScrollPos();
-  if (zDelta > 0)
+  if (delta.y > 0)
     ptScroll.y += GetFontSize();
   else
     ptScroll.y -= GetFontSize();
diff --git a/fpdfsdk/pwl/cpwl_edit.h b/fpdfsdk/pwl/cpwl_edit.h
index 1de382e..1dbdfe4 100644
--- a/fpdfsdk/pwl/cpwl_edit.h
+++ b/fpdfsdk/pwl/cpwl_edit.h
@@ -62,7 +62,7 @@
   bool OnLButtonDown(const CFX_PointF& point, uint32_t nFlag) override;
   bool OnLButtonDblClk(const CFX_PointF& point, uint32_t nFlag) override;
   bool OnRButtonUp(const CFX_PointF& point, uint32_t nFlag) override;
-  bool OnMouseWheel(short zDelta,
+  bool OnMouseWheel(const CFX_Vector& delta,
                     const CFX_PointF& point,
                     uint32_t nFlag) override;
   bool OnKeyDown(uint16_t nChar, uint32_t nFlag) override;
diff --git a/fpdfsdk/pwl/cpwl_list_box.cpp b/fpdfsdk/pwl/cpwl_list_box.cpp
index a0e2039..73bc46f 100644
--- a/fpdfsdk/pwl/cpwl_list_box.cpp
+++ b/fpdfsdk/pwl/cpwl_list_box.cpp
@@ -366,10 +366,10 @@
   return GetWindowRect().GetDeflated(width, width);
 }
 
-bool CPWL_ListBox::OnMouseWheel(short zDelta,
+bool CPWL_ListBox::OnMouseWheel(const CFX_Vector& delta,
                                 const CFX_PointF& point,
                                 uint32_t nFlag) {
-  if (zDelta < 0)
+  if (delta.y < 0)
     m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
   else
     m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
diff --git a/fpdfsdk/pwl/cpwl_list_box.h b/fpdfsdk/pwl/cpwl_list_box.h
index ba3a653..ab94eee 100644
--- a/fpdfsdk/pwl/cpwl_list_box.h
+++ b/fpdfsdk/pwl/cpwl_list_box.h
@@ -53,7 +53,7 @@
   bool OnLButtonDown(const CFX_PointF& point, uint32_t nFlag) override;
   bool OnLButtonUp(const CFX_PointF& point, uint32_t nFlag) override;
   bool OnMouseMove(const CFX_PointF& point, uint32_t nFlag) override;
-  bool OnMouseWheel(short zDelta,
+  bool OnMouseWheel(const CFX_Vector& delta,
                     const CFX_PointF& point,
                     uint32_t nFlag) override;
   WideString GetText() override;
diff --git a/fpdfsdk/pwl/cpwl_wnd.cpp b/fpdfsdk/pwl/cpwl_wnd.cpp
index 0ba0e56..7683188 100644
--- a/fpdfsdk/pwl/cpwl_wnd.cpp
+++ b/fpdfsdk/pwl/cpwl_wnd.cpp
@@ -352,7 +352,7 @@
   return false;
 }
 
-bool CPWL_Wnd::OnMouseWheel(short zDelta,
+bool CPWL_Wnd::OnMouseWheel(const CFX_Vector& delta,
                             const CFX_PointF& point,
                             uint32_t nFlag) {
   if (!IsValid() || !IsVisible() || !IsEnabled())
@@ -364,7 +364,7 @@
 
   for (const auto& pChild : m_Children) {
     if (IsWndCaptureKeyboard(pChild.get()))
-      return pChild->OnMouseWheel(zDelta, pChild->ParentToChild(point), nFlag);
+      return pChild->OnMouseWheel(delta, pChild->ParentToChild(point), nFlag);
   }
   return false;
 }
diff --git a/fpdfsdk/pwl/cpwl_wnd.h b/fpdfsdk/pwl/cpwl_wnd.h
index 6e8f073..208949c 100644
--- a/fpdfsdk/pwl/cpwl_wnd.h
+++ b/fpdfsdk/pwl/cpwl_wnd.h
@@ -151,7 +151,7 @@
   virtual bool OnRButtonDown(const CFX_PointF& point, uint32_t nFlag);
   virtual bool OnRButtonUp(const CFX_PointF& point, uint32_t nFlag);
   virtual bool OnMouseMove(const CFX_PointF& point, uint32_t nFlag);
-  virtual bool OnMouseWheel(short zDelta,
+  virtual bool OnMouseWheel(const CFX_Vector& delta,
                             const CFX_PointF& point,
                             uint32_t nFlag);
   virtual void SetScrollInfo(const PWL_SCROLL_INFO& info);
diff --git a/xfa/fwl/cfwl_messagemousewheel.cpp b/xfa/fwl/cfwl_messagemousewheel.cpp
index 3331179..9da3b7c 100644
--- a/xfa/fwl/cfwl_messagemousewheel.cpp
+++ b/xfa/fwl/cfwl_messagemousewheel.cpp
@@ -6,17 +6,11 @@
 
 #include "xfa/fwl/cfwl_messagemousewheel.h"
 
-#include <memory>
-
-#include "third_party/base/ptr_util.h"
-
-CFWL_MessageMouseWheel::CFWL_MessageMouseWheel(CFWL_Widget* pDstTarget,
-                                               uint32_t flags,
-                                               CFX_PointF pos,
-                                               CFX_PointF delta)
-    : CFWL_Message(CFWL_Message::Type::MouseWheel, nullptr, pDstTarget),
-      m_dwFlags(flags),
-      m_pos(pos),
-      m_delta(delta) {}
+CFWL_MessageMouseWheel::CFWL_MessageMouseWheel(CFWL_Widget* destination,
+                                               const CFX_PointF& pos,
+                                               const CFX_Vector& delta)
+    : CFWL_Message(CFWL_Message::Type::MouseWheel, nullptr, destination),
+      pos_(pos),
+      delta_(delta) {}
 
 CFWL_MessageMouseWheel::~CFWL_MessageMouseWheel() = default;
diff --git a/xfa/fwl/cfwl_messagemousewheel.h b/xfa/fwl/cfwl_messagemousewheel.h
index 9908951..235fcc3 100644
--- a/xfa/fwl/cfwl_messagemousewheel.h
+++ b/xfa/fwl/cfwl_messagemousewheel.h
@@ -7,22 +7,24 @@
 #ifndef XFA_FWL_CFWL_MESSAGEMOUSEWHEEL_H_
 #define XFA_FWL_CFWL_MESSAGEMOUSEWHEEL_H_
 
-#include <memory>
-
 #include "core/fxcrt/fx_coordinates.h"
 #include "xfa/fwl/cfwl_message.h"
 
 class CFWL_MessageMouseWheel final : public CFWL_Message {
  public:
-  CFWL_MessageMouseWheel(CFWL_Widget* pDstTarget,
-                         uint32_t flags,
-                         CFX_PointF pos,
-                         CFX_PointF delta);
+  CFWL_MessageMouseWheel(CFWL_Widget* destination,
+                         const CFX_PointF& pos,
+                         const CFX_Vector& delta);
   ~CFWL_MessageMouseWheel() override;
 
-  const uint32_t m_dwFlags;
-  CFX_PointF m_pos;
-  CFX_PointF m_delta;
+  void set_pos(const CFX_PointF& pos) { pos_ = pos; }
+  const CFX_PointF& pos() const { return pos_; }
+
+  const CFX_Vector& delta() const { return delta_; }
+
+ private:
+  CFX_PointF pos_;
+  const CFX_Vector delta_;
 };
 
 #endif  // XFA_FWL_CFWL_MESSAGEMOUSEWHEEL_H_
diff --git a/xfa/fwl/cfwl_notedriver.cpp b/xfa/fwl/cfwl_notedriver.cpp
index 821dd5c..204a17d 100644
--- a/xfa/fwl/cfwl_notedriver.cpp
+++ b/xfa/fwl/cfwl_notedriver.cpp
@@ -224,11 +224,11 @@
                               CFWL_Widget* pMessageForm) {
   CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr();
   CFWL_MessageMouseWheel* pMsg = static_cast<CFWL_MessageMouseWheel*>(pMessage);
-  CFWL_Widget* pDst = pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_pos);
+  CFWL_Widget* pDst = pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->pos());
   if (!pDst)
     return false;
 
-  pMsg->m_pos = pMessageForm->TransformTo(pDst, pMsg->m_pos);
+  pMsg->set_pos(pMessageForm->TransformTo(pDst, pMsg->pos()));
   pMsg->SetDstTarget(pDst);
   return true;
 }
diff --git a/xfa/fwl/cfwl_scrollbar.cpp b/xfa/fwl/cfwl_scrollbar.cpp
index acc144f..4269049 100644
--- a/xfa/fwl/cfwl_scrollbar.cpp
+++ b/xfa/fwl/cfwl_scrollbar.cpp
@@ -324,9 +324,8 @@
         break;
     }
   } else if (type == CFWL_Message::Type::MouseWheel) {
-    CFWL_MessageMouseWheel* pMsg =
-        static_cast<CFWL_MessageMouseWheel*>(pMessage);
-    OnMouseWheel(pMsg->m_delta);
+    auto* pMsg = static_cast<CFWL_MessageMouseWheel*>(pMessage);
+    OnMouseWheel(pMsg->delta());
   }
 }
 
@@ -389,8 +388,8 @@
   DoMouseLeave(4, m_rtMaxTrack, m_iMaxTrackState);
 }
 
-void CFWL_ScrollBar::OnMouseWheel(const CFX_PointF& delta) {
-  m_iMouseWheel = static_cast<int32_t>(delta.x);
+void CFWL_ScrollBar::OnMouseWheel(const CFX_Vector& delta) {
+  m_iMouseWheel = delta.y;
   SendEvent();
   m_iMouseWheel = 0;
 }
diff --git a/xfa/fwl/cfwl_scrollbar.h b/xfa/fwl/cfwl_scrollbar.h
index c98479d..5657c90 100644
--- a/xfa/fwl/cfwl_scrollbar.h
+++ b/xfa/fwl/cfwl_scrollbar.h
@@ -88,7 +88,7 @@
   void OnLButtonUp(const CFX_PointF& point);
   void OnMouseMove(const CFX_PointF& point);
   void OnMouseLeave();
-  void OnMouseWheel(const CFX_PointF& delta);
+  void OnMouseWheel(const CFX_Vector& delta);
   bool DoScroll(CFWL_EventScroll::Code dwCode, float fPos);
   void DoMouseDown(int32_t iItem,
                    const CFX_RectF& rtItem,
diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp
index f1438d5..4f5bf56 100644
--- a/xfa/fxfa/cxfa_fffield.cpp
+++ b/xfa/fxfa/cxfa_fffield.cpp
@@ -481,8 +481,8 @@
 }
 
 bool CXFA_FFField::OnMouseWheel(uint32_t dwFlags,
-                                int16_t zDelta,
-                                const CFX_PointF& point) {
+                                const CFX_PointF& point,
+                                const CFX_Vector& delta) {
   if (!GetNormalWidget())
     return false;
 
@@ -490,7 +490,7 @@
   RetainPtr<CXFA_ContentLayoutItem> retainer(m_pLayoutItem.Get());
 
   SendMessageToFWLWidget(pdfium::MakeUnique<CFWL_MessageMouseWheel>(
-      GetNormalWidget(), dwFlags, FWLToClient(point), CFX_PointF(zDelta, 0)));
+      GetNormalWidget(), FWLToClient(point), delta));
 
   return true;
 }
diff --git a/xfa/fxfa/cxfa_fffield.h b/xfa/fxfa/cxfa_fffield.h
index cce525a..59614e8 100644
--- a/xfa/fxfa/cxfa_fffield.h
+++ b/xfa/fxfa/cxfa_fffield.h
@@ -48,8 +48,8 @@
   bool OnLButtonDblClk(uint32_t dwFlags, const CFX_PointF& point) override;
   bool OnMouseMove(uint32_t dwFlags, const CFX_PointF& point) override;
   bool OnMouseWheel(uint32_t dwFlags,
-                    int16_t zDelta,
-                    const CFX_PointF& point) override;
+                    const CFX_PointF& point,
+                    const CFX_Vector& delta) override;
   bool OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
   bool OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point) override;
   bool OnRButtonDblClk(uint32_t dwFlags, const CFX_PointF& point) override;
diff --git a/xfa/fxfa/cxfa_ffsignature.cpp b/xfa/fxfa/cxfa_ffsignature.cpp
index a7dc173..058abc3 100644
--- a/xfa/fxfa/cxfa_ffsignature.cpp
+++ b/xfa/fxfa/cxfa_ffsignature.cpp
@@ -74,8 +74,8 @@
 }
 
 bool CXFA_FFSignature::OnMouseWheel(uint32_t dwFlags,
-                                    int16_t zDelta,
-                                    const CFX_PointF& point) {
+                                    const CFX_PointF& point,
+                                    const CFX_Vector& delta) {
   return false;
 }
 
diff --git a/xfa/fxfa/cxfa_ffsignature.h b/xfa/fxfa/cxfa_ffsignature.h
index 43f8344..0f6303c 100644
--- a/xfa/fxfa/cxfa_ffsignature.h
+++ b/xfa/fxfa/cxfa_ffsignature.h
@@ -29,8 +29,8 @@
   bool OnLButtonDblClk(uint32_t dwFlags, const CFX_PointF& point) override;
   bool OnMouseMove(uint32_t dwFlags, const CFX_PointF& point) override;
   bool OnMouseWheel(uint32_t dwFlags,
-                    int16_t zDelta,
-                    const CFX_PointF& pointy) override;
+                    const CFX_PointF& point,
+                    const CFX_Vector& delta) override;
   bool OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) override;
   bool OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point) override;
   bool OnRButtonDblClk(uint32_t dwFlags, const CFX_PointF& point) override;
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 45045a8..2ee8962 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -407,8 +407,8 @@
 }
 
 bool CXFA_FFWidget::OnMouseWheel(uint32_t dwFlags,
-                                 int16_t zDelta,
-                                 const CFX_PointF& point) {
+                                 const CFX_PointF& point,
+                                 const CFX_Vector& delta) {
   return false;
 }
 
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index 008adfa..9b27a91 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -107,8 +107,8 @@
   virtual bool OnMouseMove(uint32_t dwFlags,
                            const CFX_PointF& point) WARN_UNUSED_RESULT;
   virtual bool OnMouseWheel(uint32_t dwFlags,
-                            int16_t zDelta,
-                            const CFX_PointF& point) WARN_UNUSED_RESULT;
+                            const CFX_PointF& point,
+                            const CFX_Vector& delta) WARN_UNUSED_RESULT;
   virtual bool OnRButtonDown(uint32_t dwFlags,
                              const CFX_PointF& point) WARN_UNUSED_RESULT;
   virtual bool OnRButtonUp(uint32_t dwFlags,
diff --git a/xfa/fxfa/cxfa_ffwidgethandler.cpp b/xfa/fxfa/cxfa_ffwidgethandler.cpp
index f7153d6..d122917 100644
--- a/xfa/fxfa/cxfa_ffwidgethandler.cpp
+++ b/xfa/fxfa/cxfa_ffwidgethandler.cpp
@@ -86,9 +86,9 @@
 
 bool CXFA_FFWidgetHandler::OnMouseWheel(CXFA_FFWidget* hWidget,
                                         uint32_t dwFlags,
-                                        int16_t zDelta,
-                                        const CFX_PointF& point) {
-  return hWidget->OnMouseWheel(dwFlags, zDelta, hWidget->Rotate2Normal(point));
+                                        const CFX_PointF& point,
+                                        const CFX_Vector& delta) {
+  return hWidget->OnMouseWheel(dwFlags, hWidget->Rotate2Normal(point), delta);
 }
 
 bool CXFA_FFWidgetHandler::OnRButtonDown(CXFA_FFWidget* hWidget,
diff --git a/xfa/fxfa/cxfa_ffwidgethandler.h b/xfa/fxfa/cxfa_ffwidgethandler.h
index 3c56460..e5de8b8 100644
--- a/xfa/fxfa/cxfa_ffwidgethandler.h
+++ b/xfa/fxfa/cxfa_ffwidgethandler.h
@@ -37,8 +37,8 @@
                    const CFX_PointF& point);
   bool OnMouseWheel(CXFA_FFWidget* hWidget,
                     uint32_t dwFlags,
-                    int16_t zDelta,
-                    const CFX_PointF& point);
+                    const CFX_PointF& point,
+                    const CFX_Vector& delta);
   bool OnRButtonDown(CXFA_FFWidget* hWidget,
                      uint32_t dwFlags,
                      const CFX_PointF& point);