| // Copyright 2017 The PDFium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #include "fpdfsdk/formfiller/cffl_button.h" |
| |
| #include "fpdfsdk/cpdfsdk_widget.h" |
| #include "third_party/base/check.h" |
| |
| CFFL_Button::CFFL_Button(CFFL_InteractiveFormFiller* pFormFiller, |
| CPDFSDK_Widget* pWidget) |
| : CFFL_FormField(pFormFiller, pWidget) {} |
| |
| CFFL_Button::~CFFL_Button() = default; |
| |
| void CFFL_Button::OnMouseEnter(CPDFSDK_PageView* pPageView) { |
| m_bMouseIn = true; |
| InvalidateRect(GetViewBBox(pPageView)); |
| } |
| |
| void CFFL_Button::OnMouseExit(CPDFSDK_PageView* pPageView) { |
| m_bMouseIn = false; |
| InvalidateRect(GetViewBBox(pPageView)); |
| m_pTimer.reset(); |
| DCHECK(m_pWidget); |
| } |
| |
| bool CFFL_Button::OnLButtonDown(CPDFSDK_PageView* pPageView, |
| CPDFSDK_Widget* pWidget, |
| Mask<FWL_EVENTFLAG> nFlags, |
| const CFX_PointF& point) { |
| if (!pWidget->GetRect().Contains(point)) |
| return false; |
| |
| m_bMouseDown = true; |
| m_bValid = true; |
| InvalidateRect(GetViewBBox(pPageView)); |
| return true; |
| } |
| |
| bool CFFL_Button::OnLButtonUp(CPDFSDK_PageView* pPageView, |
| CPDFSDK_Widget* pWidget, |
| Mask<FWL_EVENTFLAG> nFlags, |
| const CFX_PointF& point) { |
| if (!pWidget->GetRect().Contains(point)) |
| return false; |
| |
| m_bMouseDown = false; |
| InvalidateRect(GetViewBBox(pPageView)); |
| return true; |
| } |
| |
| bool CFFL_Button::OnMouseMove(CPDFSDK_PageView* pPageView, |
| Mask<FWL_EVENTFLAG> nFlags, |
| const CFX_PointF& point) { |
| return true; |
| } |
| |
| void CFFL_Button::OnDraw(CPDFSDK_PageView* pPageView, |
| CPDFSDK_Widget* pWidget, |
| CFX_RenderDevice* pDevice, |
| const CFX_Matrix& mtUser2Device) { |
| DCHECK(pPageView); |
| if (!pWidget->IsPushHighlighted()) { |
| pWidget->DrawAppearance(pDevice, mtUser2Device, |
| CPDF_Annot::AppearanceMode::kNormal); |
| return; |
| } |
| if (m_bMouseDown) { |
| if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode::kDown)) { |
| pWidget->DrawAppearance(pDevice, mtUser2Device, |
| CPDF_Annot::AppearanceMode::kDown); |
| } else { |
| pWidget->DrawAppearance(pDevice, mtUser2Device, |
| CPDF_Annot::AppearanceMode::kNormal); |
| } |
| return; |
| } |
| if (m_bMouseIn) { |
| if (pWidget->IsWidgetAppearanceValid( |
| CPDF_Annot::AppearanceMode::kRollover)) { |
| pWidget->DrawAppearance(pDevice, mtUser2Device, |
| CPDF_Annot::AppearanceMode::kRollover); |
| } else { |
| pWidget->DrawAppearance(pDevice, mtUser2Device, |
| CPDF_Annot::AppearanceMode::kNormal); |
| } |
| return; |
| } |
| |
| pWidget->DrawAppearance(pDevice, mtUser2Device, |
| CPDF_Annot::AppearanceMode::kNormal); |
| } |
| |
| void CFFL_Button::OnDrawDeactive(CPDFSDK_PageView* pPageView, |
| CPDFSDK_Widget* pWidget, |
| CFX_RenderDevice* pDevice, |
| const CFX_Matrix& mtUser2Device) { |
| OnDraw(pPageView, pWidget, pDevice, mtUser2Device); |
| } |