| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fxfa/app/xfa_ffpushbutton.h" | 7 #include "xfa/fxfa/app/xfa_ffpushbutton.h" |
| 8 | 8 |
| 9 #include "third_party/base/ptr_util.h" |
| 9 #include "xfa/fwl/core/cfwl_pushbutton.h" | 10 #include "xfa/fwl/core/cfwl_pushbutton.h" |
| 10 #include "xfa/fwl/core/cfwl_widgetmgr.h" | 11 #include "xfa/fwl/core/cfwl_widgetmgr.h" |
| 11 #include "xfa/fwl/core/fwl_noteimp.h" | 12 #include "xfa/fwl/core/fwl_noteimp.h" |
| 13 #include "xfa/fxfa/app/cxfa_ffpushbuttondelegate.h" |
| 12 #include "xfa/fxfa/app/xfa_fffield.h" | 14 #include "xfa/fxfa/app/xfa_fffield.h" |
| 13 #include "xfa/fxfa/app/xfa_ffwidgetacc.h" | 15 #include "xfa/fxfa/app/xfa_ffwidgetacc.h" |
| 14 #include "xfa/fxfa/app/xfa_textlayout.h" | 16 #include "xfa/fxfa/app/xfa_textlayout.h" |
| 15 #include "xfa/fxfa/xfa_ffapp.h" | 17 #include "xfa/fxfa/xfa_ffapp.h" |
| 16 #include "xfa/fxfa/xfa_ffpageview.h" | 18 #include "xfa/fxfa/xfa_ffpageview.h" |
| 17 #include "xfa/fxfa/xfa_ffwidget.h" | 19 #include "xfa/fxfa/xfa_ffwidget.h" |
| 18 #include "xfa/fxgraphics/cfx_color.h" | 20 #include "xfa/fxgraphics/cfx_color.h" |
| 19 #include "xfa/fxgraphics/cfx_path.h" | 21 #include "xfa/fxgraphics/cfx_path.h" |
| 20 | 22 |
| 21 CXFA_FFPushButton::CXFA_FFPushButton(CXFA_FFPageView* pPageView, | 23 CXFA_FFPushButton::CXFA_FFPushButton(CXFA_FFPageView* pPageView, |
| 22 CXFA_WidgetAcc* pDataAcc) | 24 CXFA_WidgetAcc* pDataAcc) |
| 23 : CXFA_FFField(pPageView, pDataAcc), | 25 : CXFA_FFField(pPageView, pDataAcc), |
| 24 m_pRolloverTextLayout(nullptr), | 26 m_pRolloverTextLayout(nullptr), |
| 25 m_pDownTextLayout(nullptr), | 27 m_pDownTextLayout(nullptr), |
| 26 m_pDownProvider(nullptr), | 28 m_pDownProvider(nullptr), |
| 27 m_pRollProvider(nullptr), | 29 m_pRollProvider(nullptr) {} |
| 28 m_pOldDelegate(nullptr) {} | 30 |
| 29 CXFA_FFPushButton::~CXFA_FFPushButton() { | 31 CXFA_FFPushButton::~CXFA_FFPushButton() { |
| 30 CXFA_FFPushButton::UnloadWidget(); | 32 CXFA_FFPushButton::UnloadWidget(); |
| 31 } | 33 } |
| 34 |
| 32 void CXFA_FFPushButton::RenderWidget(CFX_Graphics* pGS, | 35 void CXFA_FFPushButton::RenderWidget(CFX_Graphics* pGS, |
| 33 CFX_Matrix* pMatrix, | 36 CFX_Matrix* pMatrix, |
| 34 uint32_t dwStatus) { | 37 uint32_t dwStatus) { |
| 35 if (!IsMatchVisibleStatus(dwStatus)) { | 38 if (!IsMatchVisibleStatus(dwStatus)) { |
| 36 return; | 39 return; |
| 37 } | 40 } |
| 38 CFX_Matrix mtRotate; | 41 CFX_Matrix mtRotate; |
| 39 GetRotateMatrix(mtRotate); | 42 GetRotateMatrix(mtRotate); |
| 40 if (pMatrix) { | 43 if (pMatrix) { |
| 41 mtRotate.Concat(*pMatrix); | 44 mtRotate.Concat(*pMatrix); |
| 42 } | 45 } |
| 43 CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); | 46 CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); |
| 44 RenderHighlightCaption(pGS, &mtRotate); | 47 RenderHighlightCaption(pGS, &mtRotate); |
| 45 CFX_RectF rtWidget; | 48 CFX_RectF rtWidget; |
| 46 GetRectWithoutRotate(rtWidget); | 49 GetRectWithoutRotate(rtWidget); |
| 47 CFX_Matrix mt; | 50 CFX_Matrix mt; |
| 48 mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top); | 51 mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top); |
| 49 mt.Concat(mtRotate); | 52 mt.Concat(mtRotate); |
| 50 GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(), | 53 GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(), |
| 51 pGS, &mt); | 54 pGS, &mt); |
| 52 } | 55 } |
| 53 FX_BOOL CXFA_FFPushButton::LoadWidget() { | 56 FX_BOOL CXFA_FFPushButton::LoadWidget() { |
| 54 ASSERT(!m_pNormalWidget); | 57 ASSERT(!m_pNormalWidget); |
| 55 CFWL_PushButton* pPushButton = new CFWL_PushButton(GetFWLApp()); | 58 CFWL_PushButton* pPushButton = new CFWL_PushButton(GetFWLApp()); |
| 56 pPushButton->Initialize(); | 59 pPushButton->Initialize(); |
| 57 | 60 |
| 58 m_pOldDelegate = pPushButton->GetCurrentDelegate(); | 61 pPushButton->SetDelegate(pdfium::MakeUnique<CXFA_FFPushButtonDelegate>( |
| 59 pPushButton->SetCurrentDelegate(this); | 62 pPushButton->ReleaseDelegate(), this)); |
| 60 | 63 |
| 61 m_pNormalWidget = pPushButton; | 64 m_pNormalWidget = pPushButton; |
| 62 m_pNormalWidget->SetLayoutItem(this); | 65 m_pNormalWidget->SetLayoutItem(this); |
| 63 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); | 66 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); |
| 64 CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); | 67 CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); |
| 65 pNoteDriver->RegisterEventTarget(pWidget, pWidget); | 68 pNoteDriver->RegisterEventTarget(pWidget, pWidget); |
| 66 m_pNormalWidget->LockUpdate(); | 69 m_pNormalWidget->LockUpdate(); |
| 67 UpdateWidgetProperty(); | 70 UpdateWidgetProperty(); |
| 68 LoadHighlightCaption(); | 71 LoadHighlightCaption(); |
| 69 m_pNormalWidget->UnlockUpdate(); | 72 m_pNormalWidget->UnlockUpdate(); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 if (m_pRolloverTextLayout->DrawString(pRenderDevice, mt, rtClip)) { | 197 if (m_pRolloverTextLayout->DrawString(pRenderDevice, mt, rtClip)) { |
| 195 return; | 198 return; |
| 196 } | 199 } |
| 197 } | 200 } |
| 198 } | 201 } |
| 199 if (pCapTextLayout) { | 202 if (pCapTextLayout) { |
| 200 pCapTextLayout->DrawString(pRenderDevice, mt, rtClip); | 203 pCapTextLayout->DrawString(pRenderDevice, mt, rtClip); |
| 201 } | 204 } |
| 202 } | 205 } |
| 203 } | 206 } |
| 204 | |
| 205 void CXFA_FFPushButton::OnProcessMessage(CFWL_Message* pMessage) { | |
| 206 m_pOldDelegate->OnProcessMessage(pMessage); | |
| 207 } | |
| 208 | |
| 209 void CXFA_FFPushButton::OnProcessEvent(CFWL_Event* pEvent) { | |
| 210 m_pOldDelegate->OnProcessEvent(pEvent); | |
| 211 CXFA_FFField::OnProcessEvent(pEvent); | |
| 212 } | |
| 213 | |
| 214 void CXFA_FFPushButton::OnDrawWidget(CFX_Graphics* pGraphics, | |
| 215 const CFX_Matrix* pMatrix) { | |
| 216 if (m_pNormalWidget->GetStylesEx() & XFA_FWL_PSBSTYLEEXT_HiliteInverted) { | |
| 217 if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) && | |
| 218 (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) { | |
| 219 CFX_RectF rtFill; | |
| 220 m_pNormalWidget->GetWidgetRect(rtFill); | |
| 221 rtFill.left = rtFill.top = 0; | |
| 222 FX_FLOAT fLineWith = GetLineWidth(); | |
| 223 rtFill.Deflate(fLineWith, fLineWith); | |
| 224 CFX_Color cr(FXARGB_MAKE(128, 128, 255, 255)); | |
| 225 pGraphics->SetFillColor(&cr); | |
| 226 CFX_Path path; | |
| 227 path.Create(); | |
| 228 path.AddRectangle(rtFill.left, rtFill.top, rtFill.width, rtFill.height); | |
| 229 pGraphics->FillPath(&path, FXFILL_WINDING, (CFX_Matrix*)pMatrix); | |
| 230 } | |
| 231 } else if (m_pNormalWidget->GetStylesEx() & | |
| 232 XFA_FWL_PSBSTYLEEXT_HiliteOutLine) { | |
| 233 if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) && | |
| 234 (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) { | |
| 235 FX_FLOAT fLineWidth = GetLineWidth(); | |
| 236 CFX_Color cr(FXARGB_MAKE(255, 128, 255, 255)); | |
| 237 pGraphics->SetStrokeColor(&cr); | |
| 238 pGraphics->SetLineWidth(fLineWidth); | |
| 239 CFX_Path path; | |
| 240 path.Create(); | |
| 241 CFX_RectF rect; | |
| 242 m_pNormalWidget->GetWidgetRect(rect); | |
| 243 path.AddRectangle(0, 0, rect.width, rect.height); | |
| 244 pGraphics->StrokePath(&path, (CFX_Matrix*)pMatrix); | |
| 245 } | |
| 246 } | |
| 247 } | |
| OLD | NEW |