blob: dab0045373f3271a44832f94695331363a25f302 [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,
Lei Zhang2b6e2a72017-08-28 11:34:16 -070065 const CFX_Matrix& mtUser2Device) {
Dan Sinclairb9eed2f2017-07-10 11:35:18 -040066 ASSERT(pPageView);
67 CPDFSDK_Widget* pWidget = static_cast<CPDFSDK_Widget*>(pAnnot);
68 CPDF_FormControl* pCtrl = pWidget->GetFormControl();
69 if (pCtrl->GetHighlightingMode() != CPDF_FormControl::Push) {
Lei Zhang2b6e2a72017-08-28 11:34:16 -070070 pWidget->DrawAppearance(pDevice, mtUser2Device, CPDF_Annot::Normal,
Lei Zhang8a449402017-08-17 15:07:47 -070071 nullptr);
Dan Sinclairb9eed2f2017-07-10 11:35:18 -040072 return;
73 }
74 if (m_bMouseDown) {
75 if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Down)) {
Lei Zhang2b6e2a72017-08-28 11:34:16 -070076 pWidget->DrawAppearance(pDevice, mtUser2Device, CPDF_Annot::Down,
Lei Zhang8a449402017-08-17 15:07:47 -070077 nullptr);
Dan Sinclairb9eed2f2017-07-10 11:35:18 -040078 } else {
Lei Zhang2b6e2a72017-08-28 11:34:16 -070079 pWidget->DrawAppearance(pDevice, mtUser2Device, CPDF_Annot::Normal,
Dan Sinclairb9eed2f2017-07-10 11:35:18 -040080 nullptr);
81 }
82 return;
83 }
84 if (m_bMouseIn) {
85 if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Rollover)) {
Lei Zhang2b6e2a72017-08-28 11:34:16 -070086 pWidget->DrawAppearance(pDevice, mtUser2Device, CPDF_Annot::Rollover,
Dan Sinclairb9eed2f2017-07-10 11:35:18 -040087 nullptr);
88 } else {
Lei Zhang2b6e2a72017-08-28 11:34:16 -070089 pWidget->DrawAppearance(pDevice, mtUser2Device, CPDF_Annot::Normal,
Dan Sinclairb9eed2f2017-07-10 11:35:18 -040090 nullptr);
91 }
92 return;
93 }
94
Lei Zhang2b6e2a72017-08-28 11:34:16 -070095 pWidget->DrawAppearance(pDevice, mtUser2Device, CPDF_Annot::Normal, nullptr);
Dan Sinclairb9eed2f2017-07-10 11:35:18 -040096}
97
98void CFFL_Button::OnDrawDeactive(CPDFSDK_PageView* pPageView,
99 CPDFSDK_Annot* pAnnot,
100 CFX_RenderDevice* pDevice,
Lei Zhang2b6e2a72017-08-28 11:34:16 -0700101 const CFX_Matrix& mtUser2Device) {
102 OnDraw(pPageView, pAnnot, pDevice, mtUser2Device);
Dan Sinclairb9eed2f2017-07-10 11:35:18 -0400103}