14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffpushbutton.h"
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <utility>
10d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "third_party/base/ptr_util.h"
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_notedriver.h"
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_pushbutton.h"
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_widgetmgr.h"
15d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffapp.h"
16d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_fffield.h"
17d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffpageview.h"
18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffwidget.h"
19d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_textlayout.h"
20d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_textprovider.h"
21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_border.h"
22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_caption.h"
23d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_edge.h"
24d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxgraphics/cxfa_gecolor.h"
25d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxgraphics/cxfa_gepath.h"
26d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
27d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCXFA_FFPushButton::CXFA_FFPushButton(CXFA_Node* pNode)
28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    : CXFA_FFField(pNode), m_pOldDelegate(nullptr) {}
2933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_FFPushButton::~CXFA_FFPushButton() {
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFPushButton::UnloadWidget();
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
34d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFPushButton::RenderWidget(CXFA_Graphics* pGS,
35d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                     const CFX_Matrix& matrix,
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     uint32_t dwStatus) {
3733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  if (!IsMatchVisibleStatus(dwStatus))
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
3933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
4033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  CFX_Matrix mtRotate = GetRotateMatrix();
41d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  mtRotate.Concat(matrix);
4233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
43d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_FFWidget::RenderWidget(pGS, mtRotate, dwStatus);
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  RenderHighlightCaption(pGS, &mtRotate);
4533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
4633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  CFX_RectF rtWidget = GetRectWithoutRotate();
4733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  CFX_Matrix mt(1, 0, 0, 1, rtWidget.left, rtWidget.top);
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  mt.Concat(mtRotate);
49d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  GetApp()->GetFWLWidgetMgr()->OnDrawWidget(m_pNormalWidget.get(), pGS, mt);
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFPushButton::LoadWidget() {
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(!m_pNormalWidget);
54d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  auto pNew = pdfium::MakeUnique<CFWL_PushButton>(GetFWLApp());
55d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CFWL_PushButton* pPushButton = pNew.get();
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pOldDelegate = pPushButton->GetDelegate();
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pPushButton->SetDelegate(this);
58d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  m_pNormalWidget = std::move(pNew);
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pNormalWidget->SetLayoutItem(this);
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFWL_NoteDriver* pNoteDriver =
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pNormalWidget->GetOwnerApp()->GetNoteDriver();
63d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pNoteDriver->RegisterEventTarget(m_pNormalWidget.get(),
64d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                   m_pNormalWidget.get());
654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pNormalWidget->LockUpdate();
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  UpdateWidgetProperty();
674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  LoadHighlightCaption();
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pNormalWidget->UnlockUpdate();
694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CXFA_FFField::LoadWidget();
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
71d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFPushButton::UpdateWidgetProperty() {
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwStyleEx = 0;
74d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  switch (m_pNode->GetWidgetAcc()->GetButtonHighlight()) {
75d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    case XFA_AttributeEnum::Inverted:
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteInverted;
774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
78d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    case XFA_AttributeEnum::Outline:
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteOutLine;
804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
81d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    case XFA_AttributeEnum::Push:
824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      dwStyleEx = XFA_FWL_PSBSTYLEEXT_HilitePush;
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pNormalWidget->ModifyStylesEx(dwStyleEx, 0xFFFFFFFF);
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFPushButton::UnloadWidget() {
91d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  m_pRolloverTextLayout.reset();
92d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  m_pDownTextLayout.reset();
93d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  m_pRollProvider.reset();
94d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  m_pDownProvider.reset();
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFField::UnloadWidget();
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFPushButton::PerformLayout() {
994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFWidget::PerformLayout();
10033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  CFX_RectF rtWidget = GetRectWithoutRotate();
10133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_rtUI = rtWidget;
103d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Margin* margin = m_pNode->GetMarginIfExists();
104d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (margin)
105d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    XFA_RectWithoutMargin(rtWidget, margin);
10633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
10733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  m_rtCaption = rtWidget;
108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
109d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Caption* caption = m_pNode->GetCaptionIfExists();
110d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Margin* captionMargin = caption ? caption->GetMarginIfExists() : nullptr;
111d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (captionMargin)
112d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    XFA_RectWithoutMargin(m_rtCaption, captionMargin);
11333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  LayoutHighlightCaption();
1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  SetFWLRect();
11633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  if (m_pNormalWidget)
1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pNormalWidget->Update();
11833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
121d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
122d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannfloat CXFA_FFPushButton::GetLineWidth() {
123d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Border* border = m_pNode->GetBorderIfExists();
124d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (border && border->GetPresence() == XFA_AttributeEnum::Visible) {
125d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    CXFA_Edge* edge = border->GetEdgeIfExists(0);
126d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return edge ? edge->GetThickness() : 0;
1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return 0;
1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
130d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannFX_ARGB CXFA_FFPushButton::GetLineColor() {
1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return 0xFF000000;
1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
134d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannFX_ARGB CXFA_FFPushButton::GetFillColor() {
1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return 0xFFFFFFFF;
1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
138d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFPushButton::LoadHighlightCaption() {
140d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Caption* caption = m_pNode->GetCaptionIfExists();
141d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!caption || caption->IsHidden())
142d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return;
143d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
144d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (m_pNode->GetWidgetAcc()->HasButtonRollover()) {
145d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    if (!m_pRollProvider) {
146d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      m_pRollProvider = pdfium::MakeUnique<CXFA_TextProvider>(
147d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann          m_pNode->GetWidgetAcc(), XFA_TEXTPROVIDERTYPE_Rollover);
1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
149d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    m_pRolloverTextLayout =
150d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann        pdfium::MakeUnique<CXFA_TextLayout>(GetDoc(), m_pRollProvider.get());
151d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  }
152d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
153d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (m_pNode->GetWidgetAcc()->HasButtonDown()) {
154d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    if (!m_pDownProvider) {
155d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      m_pDownProvider = pdfium::MakeUnique<CXFA_TextProvider>(
156d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann          m_pNode->GetWidgetAcc(), XFA_TEXTPROVIDERTYPE_Down);
157d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    }
158d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    m_pDownTextLayout =
159d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann        pdfium::MakeUnique<CXFA_TextLayout>(GetDoc(), m_pDownProvider.get());
1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
162d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFPushButton::LayoutHighlightCaption() {
1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_SizeF sz(m_rtCaption.width, m_rtCaption.height);
1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  LayoutCaption();
166d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (m_pRolloverTextLayout)
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pRolloverTextLayout->Layout(sz);
168d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (m_pDownTextLayout)
1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pDownTextLayout->Layout(sz);
1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
171d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
172d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFPushButton::RenderHighlightCaption(CXFA_Graphics* pGS,
1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               CFX_Matrix* pMatrix) {
174d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_TextLayout* pCapTextLayout =
175d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      m_pNode->GetWidgetAcc()->GetCaptionTextLayout();
176d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Caption* caption = m_pNode->GetCaptionIfExists();
177d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!caption || !caption->IsVisible())
17833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    return;
17933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
18033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
18133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  CFX_RectF rtClip = m_rtCaption;
18233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  rtClip.Intersect(GetRectWithoutRotate());
18333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  CFX_Matrix mt(1, 0, 0, 1, m_rtCaption.left, m_rtCaption.top);
18433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  if (pMatrix) {
185d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    rtClip = pMatrix->TransformRect(rtClip);
18633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    mt.Concat(*pMatrix);
18733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  }
18833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
18933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  uint32_t dwState = m_pNormalWidget->GetStates();
19033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  if (m_pDownTextLayout && (dwState & FWL_STATE_PSB_Pressed) &&
19133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      (dwState & FWL_STATE_PSB_Hovered)) {
192d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    if (m_pDownTextLayout->DrawString(pRenderDevice, mt, rtClip, 0))
19333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      return;
19433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  } else if (m_pRolloverTextLayout && (dwState & FWL_STATE_PSB_Hovered)) {
195d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    if (m_pRolloverTextLayout->DrawString(pRenderDevice, mt, rtClip, 0))
19633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      return;
1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
19833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
19933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  if (pCapTextLayout)
200d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    pCapTextLayout->DrawString(pRenderDevice, mt, rtClip, 0);
2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFPushButton::OnProcessMessage(CFWL_Message* pMessage) {
2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pOldDelegate->OnProcessMessage(pMessage);
2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFPushButton::OnProcessEvent(CFWL_Event* pEvent) {
2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pOldDelegate->OnProcessEvent(pEvent);
2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFField::OnProcessEvent(pEvent);
2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
212d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFPushButton::OnDrawWidget(CXFA_Graphics* pGraphics,
213d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                     const CFX_Matrix& matrix) {
2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_pNormalWidget->GetStylesEx() & XFA_FWL_PSBSTYLEEXT_HiliteInverted) {
2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) &&
2164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) {
21733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      CFX_RectF rtFill(0, 0, m_pNormalWidget->GetWidgetRect().Size());
218d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      float fLineWith = GetLineWidth();
2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      rtFill.Deflate(fLineWith, fLineWith);
220d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      CXFA_GEPath path;
2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      path.AddRectangle(rtFill.left, rtFill.top, rtFill.width, rtFill.height);
222d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      pGraphics->SetFillColor(CXFA_GEColor(FXARGB_MAKE(128, 128, 255, 255)));
223d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      pGraphics->FillPath(&path, FXFILL_WINDING, &matrix);
2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
225d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return;
226d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  }
227d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
228d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (m_pNormalWidget->GetStylesEx() & XFA_FWL_PSBSTYLEEXT_HiliteOutLine) {
2294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) &&
2304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) {
231d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      float fLineWidth = GetLineWidth();
232d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      pGraphics->SetStrokeColor(CXFA_GEColor(FXARGB_MAKE(255, 128, 255, 255)));
2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pGraphics->SetLineWidth(fLineWidth);
2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
235d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      CXFA_GEPath path;
2364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_RectF rect = m_pNormalWidget->GetWidgetRect();
2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      path.AddRectangle(0, 0, rect.width, rect.height);
238d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      pGraphics->StrokePath(&path, &matrix);
2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
242d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
243d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannFormFieldType CXFA_FFPushButton::GetFormFieldType() {
244d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  return FormFieldType::kXFA_PushButton;
245d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann}
246