xref: /aosp_15_r20/external/pdfium/fpdfsdk/formfiller/cffl_button.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2017 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/formfiller/cffl_button.h"
8*3ac0a46fSAndroid Build Coastguard Worker 
9*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/cpdfsdk_widget.h"
10*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/check.h"
11*3ac0a46fSAndroid Build Coastguard Worker 
CFFL_Button(CFFL_InteractiveFormFiller * pFormFiller,CPDFSDK_Widget * pWidget)12*3ac0a46fSAndroid Build Coastguard Worker CFFL_Button::CFFL_Button(CFFL_InteractiveFormFiller* pFormFiller,
13*3ac0a46fSAndroid Build Coastguard Worker                          CPDFSDK_Widget* pWidget)
14*3ac0a46fSAndroid Build Coastguard Worker     : CFFL_FormField(pFormFiller, pWidget) {}
15*3ac0a46fSAndroid Build Coastguard Worker 
16*3ac0a46fSAndroid Build Coastguard Worker CFFL_Button::~CFFL_Button() = default;
17*3ac0a46fSAndroid Build Coastguard Worker 
OnMouseEnter(CPDFSDK_PageView * pPageView)18*3ac0a46fSAndroid Build Coastguard Worker void CFFL_Button::OnMouseEnter(CPDFSDK_PageView* pPageView) {
19*3ac0a46fSAndroid Build Coastguard Worker   m_bMouseIn = true;
20*3ac0a46fSAndroid Build Coastguard Worker   InvalidateRect(GetViewBBox(pPageView));
21*3ac0a46fSAndroid Build Coastguard Worker }
22*3ac0a46fSAndroid Build Coastguard Worker 
OnMouseExit(CPDFSDK_PageView * pPageView)23*3ac0a46fSAndroid Build Coastguard Worker void CFFL_Button::OnMouseExit(CPDFSDK_PageView* pPageView) {
24*3ac0a46fSAndroid Build Coastguard Worker   m_bMouseIn = false;
25*3ac0a46fSAndroid Build Coastguard Worker   InvalidateRect(GetViewBBox(pPageView));
26*3ac0a46fSAndroid Build Coastguard Worker   m_pTimer.reset();
27*3ac0a46fSAndroid Build Coastguard Worker   DCHECK(m_pWidget);
28*3ac0a46fSAndroid Build Coastguard Worker }
29*3ac0a46fSAndroid Build Coastguard Worker 
OnLButtonDown(CPDFSDK_PageView * pPageView,CPDFSDK_Widget * pWidget,Mask<FWL_EVENTFLAG> nFlags,const CFX_PointF & point)30*3ac0a46fSAndroid Build Coastguard Worker bool CFFL_Button::OnLButtonDown(CPDFSDK_PageView* pPageView,
31*3ac0a46fSAndroid Build Coastguard Worker                                 CPDFSDK_Widget* pWidget,
32*3ac0a46fSAndroid Build Coastguard Worker                                 Mask<FWL_EVENTFLAG> nFlags,
33*3ac0a46fSAndroid Build Coastguard Worker                                 const CFX_PointF& point) {
34*3ac0a46fSAndroid Build Coastguard Worker   if (!pWidget->GetRect().Contains(point))
35*3ac0a46fSAndroid Build Coastguard Worker     return false;
36*3ac0a46fSAndroid Build Coastguard Worker 
37*3ac0a46fSAndroid Build Coastguard Worker   m_bMouseDown = true;
38*3ac0a46fSAndroid Build Coastguard Worker   m_bValid = true;
39*3ac0a46fSAndroid Build Coastguard Worker   InvalidateRect(GetViewBBox(pPageView));
40*3ac0a46fSAndroid Build Coastguard Worker   return true;
41*3ac0a46fSAndroid Build Coastguard Worker }
42*3ac0a46fSAndroid Build Coastguard Worker 
OnLButtonUp(CPDFSDK_PageView * pPageView,CPDFSDK_Widget * pWidget,Mask<FWL_EVENTFLAG> nFlags,const CFX_PointF & point)43*3ac0a46fSAndroid Build Coastguard Worker bool CFFL_Button::OnLButtonUp(CPDFSDK_PageView* pPageView,
44*3ac0a46fSAndroid Build Coastguard Worker                               CPDFSDK_Widget* pWidget,
45*3ac0a46fSAndroid Build Coastguard Worker                               Mask<FWL_EVENTFLAG> nFlags,
46*3ac0a46fSAndroid Build Coastguard Worker                               const CFX_PointF& point) {
47*3ac0a46fSAndroid Build Coastguard Worker   if (!pWidget->GetRect().Contains(point))
48*3ac0a46fSAndroid Build Coastguard Worker     return false;
49*3ac0a46fSAndroid Build Coastguard Worker 
50*3ac0a46fSAndroid Build Coastguard Worker   m_bMouseDown = false;
51*3ac0a46fSAndroid Build Coastguard Worker   InvalidateRect(GetViewBBox(pPageView));
52*3ac0a46fSAndroid Build Coastguard Worker   return true;
53*3ac0a46fSAndroid Build Coastguard Worker }
54*3ac0a46fSAndroid Build Coastguard Worker 
OnMouseMove(CPDFSDK_PageView * pPageView,Mask<FWL_EVENTFLAG> nFlags,const CFX_PointF & point)55*3ac0a46fSAndroid Build Coastguard Worker bool CFFL_Button::OnMouseMove(CPDFSDK_PageView* pPageView,
56*3ac0a46fSAndroid Build Coastguard Worker                               Mask<FWL_EVENTFLAG> nFlags,
57*3ac0a46fSAndroid Build Coastguard Worker                               const CFX_PointF& point) {
58*3ac0a46fSAndroid Build Coastguard Worker   return true;
59*3ac0a46fSAndroid Build Coastguard Worker }
60*3ac0a46fSAndroid Build Coastguard Worker 
OnDraw(CPDFSDK_PageView * pPageView,CPDFSDK_Widget * pWidget,CFX_RenderDevice * pDevice,const CFX_Matrix & mtUser2Device)61*3ac0a46fSAndroid Build Coastguard Worker void CFFL_Button::OnDraw(CPDFSDK_PageView* pPageView,
62*3ac0a46fSAndroid Build Coastguard Worker                          CPDFSDK_Widget* pWidget,
63*3ac0a46fSAndroid Build Coastguard Worker                          CFX_RenderDevice* pDevice,
64*3ac0a46fSAndroid Build Coastguard Worker                          const CFX_Matrix& mtUser2Device) {
65*3ac0a46fSAndroid Build Coastguard Worker   DCHECK(pPageView);
66*3ac0a46fSAndroid Build Coastguard Worker   if (!pWidget->IsPushHighlighted()) {
67*3ac0a46fSAndroid Build Coastguard Worker     pWidget->DrawAppearance(pDevice, mtUser2Device,
68*3ac0a46fSAndroid Build Coastguard Worker                             CPDF_Annot::AppearanceMode::kNormal);
69*3ac0a46fSAndroid Build Coastguard Worker     return;
70*3ac0a46fSAndroid Build Coastguard Worker   }
71*3ac0a46fSAndroid Build Coastguard Worker   if (m_bMouseDown) {
72*3ac0a46fSAndroid Build Coastguard Worker     if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode::kDown)) {
73*3ac0a46fSAndroid Build Coastguard Worker       pWidget->DrawAppearance(pDevice, mtUser2Device,
74*3ac0a46fSAndroid Build Coastguard Worker                               CPDF_Annot::AppearanceMode::kDown);
75*3ac0a46fSAndroid Build Coastguard Worker     } else {
76*3ac0a46fSAndroid Build Coastguard Worker       pWidget->DrawAppearance(pDevice, mtUser2Device,
77*3ac0a46fSAndroid Build Coastguard Worker                               CPDF_Annot::AppearanceMode::kNormal);
78*3ac0a46fSAndroid Build Coastguard Worker     }
79*3ac0a46fSAndroid Build Coastguard Worker     return;
80*3ac0a46fSAndroid Build Coastguard Worker   }
81*3ac0a46fSAndroid Build Coastguard Worker   if (m_bMouseIn) {
82*3ac0a46fSAndroid Build Coastguard Worker     if (pWidget->IsWidgetAppearanceValid(
83*3ac0a46fSAndroid Build Coastguard Worker             CPDF_Annot::AppearanceMode::kRollover)) {
84*3ac0a46fSAndroid Build Coastguard Worker       pWidget->DrawAppearance(pDevice, mtUser2Device,
85*3ac0a46fSAndroid Build Coastguard Worker                               CPDF_Annot::AppearanceMode::kRollover);
86*3ac0a46fSAndroid Build Coastguard Worker     } else {
87*3ac0a46fSAndroid Build Coastguard Worker       pWidget->DrawAppearance(pDevice, mtUser2Device,
88*3ac0a46fSAndroid Build Coastguard Worker                               CPDF_Annot::AppearanceMode::kNormal);
89*3ac0a46fSAndroid Build Coastguard Worker     }
90*3ac0a46fSAndroid Build Coastguard Worker     return;
91*3ac0a46fSAndroid Build Coastguard Worker   }
92*3ac0a46fSAndroid Build Coastguard Worker 
93*3ac0a46fSAndroid Build Coastguard Worker   pWidget->DrawAppearance(pDevice, mtUser2Device,
94*3ac0a46fSAndroid Build Coastguard Worker                           CPDF_Annot::AppearanceMode::kNormal);
95*3ac0a46fSAndroid Build Coastguard Worker }
96*3ac0a46fSAndroid Build Coastguard Worker 
OnDrawDeactive(CPDFSDK_PageView * pPageView,CPDFSDK_Widget * pWidget,CFX_RenderDevice * pDevice,const CFX_Matrix & mtUser2Device)97*3ac0a46fSAndroid Build Coastguard Worker void CFFL_Button::OnDrawDeactive(CPDFSDK_PageView* pPageView,
98*3ac0a46fSAndroid Build Coastguard Worker                                  CPDFSDK_Widget* pWidget,
99*3ac0a46fSAndroid Build Coastguard Worker                                  CFX_RenderDevice* pDevice,
100*3ac0a46fSAndroid Build Coastguard Worker                                  const CFX_Matrix& mtUser2Device) {
101*3ac0a46fSAndroid Build Coastguard Worker   OnDraw(pPageView, pWidget, pDevice, mtUser2Device);
102*3ac0a46fSAndroid Build Coastguard Worker }
103