blob: 2a290ed2131c5733a303e4c0a512a310aa897a13 [file] [log] [blame]
Dan Sinclairb9eed2f2017-07-10 11:35:18 -04001// Copyright 2017 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "fpdfsdk/formfiller/cffl_button.h"
8
9CFFL_Button::CFFL_Button(CPDFSDK_FormFillEnvironment* pApp,
10 CPDFSDK_Widget* pWidget)
11 : CFFL_FormFiller(pApp, pWidget), m_bMouseIn(false), m_bMouseDown(false) {}
12
13CFFL_Button::~CFFL_Button() {}
14
15void CFFL_Button::OnMouseEnter(CPDFSDK_PageView* pPageView,
16 CPDFSDK_Annot* pAnnot) {
17 m_bMouseIn = true;
18 InvalidateRect(GetViewBBox(pPageView, pAnnot));
19}
20
21void CFFL_Button::OnMouseExit(CPDFSDK_PageView* pPageView,
22 CPDFSDK_Annot* pAnnot) {
23 m_bMouseIn = false;
24 InvalidateRect(GetViewBBox(pPageView, pAnnot));
25 EndTimer();
26 ASSERT(m_pWidget);
27}
28
29bool CFFL_Button::OnLButtonDown(CPDFSDK_PageView* pPageView,
30 CPDFSDK_Annot* pAnnot,
31 uint32_t nFlags,
32 const CFX_PointF& point) {
33 if (!pAnnot->GetRect().Contains(point))
34 return false;
35
36 m_bMouseDown = true;
37 m_bValid = true;
38 InvalidateRect(GetViewBBox(pPageView, pAnnot));
39 return true;
40}
41
42bool CFFL_Button::OnLButtonUp(CPDFSDK_PageView* pPageView,
43 CPDFSDK_Annot* pAnnot,
44 uint32_t nFlags,
45 const CFX_PointF& point) {
46 if (!pAnnot->GetRect().Contains(point))
47 return false;
48
49 m_bMouseDown = false;
50 m_pWidget->GetPDFPage();
51 InvalidateRect(GetViewBBox(pPageView, pAnnot));
52 return true;
53}
54
55bool CFFL_Button::OnMouseMove(CPDFSDK_PageView* pPageView,
56 CPDFSDK_Annot* pAnnot,
57 uint32_t nFlags,
58 const CFX_PointF& point) {
59 return true;
60}
61
62void CFFL_Button::OnDraw(CPDFSDK_PageView* pPageView,
63 CPDFSDK_Annot* pAnnot,
64 CFX_RenderDevice* pDevice,
65 CFX_Matrix* pUser2Device) {
66 ASSERT(pPageView);
67 CPDFSDK_Widget* pWidget = static_cast<CPDFSDK_Widget*>(pAnnot);
68 CPDF_FormControl* pCtrl = pWidget->GetFormControl();
69 if (pCtrl->GetHighlightingMode() != CPDF_FormControl::Push) {
70 pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, nullptr);
71 return;
72 }
73 if (m_bMouseDown) {
74 if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Down)) {
75 pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Down, nullptr);
76 } else {
77 pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal,
78 nullptr);
79 }
80 return;
81 }
82 if (m_bMouseIn) {
83 if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Rollover)) {
84 pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Rollover,
85 nullptr);
86 } else {
87 pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal,
88 nullptr);
89 }
90 return;
91 }
92
93 pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, nullptr);
94}
95
96void CFFL_Button::OnDrawDeactive(CPDFSDK_PageView* pPageView,
97 CPDFSDK_Annot* pAnnot,
98 CFX_RenderDevice* pDevice,
99 CFX_Matrix* pUser2Device) {
100 OnDraw(pPageView, pAnnot, pDevice, pUser2Device);
101}