// 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 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 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 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); }