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