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