1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #include "xfa/fwl/theme/cfwl_listboxtp.h" 8 9 #include "xfa/fwl/cfwl_listbox.h" 10 #include "xfa/fwl/cfwl_themebackground.h" 11 #include "xfa/fwl/cfwl_widget.h" 12 #include "xfa/fxgraphics/cfx_color.h" 13 #include "xfa/fxgraphics/cfx_path.h" 14 15 CFWL_ListBoxTP::CFWL_ListBoxTP() {} 16 17 CFWL_ListBoxTP::~CFWL_ListBoxTP() {} 18 19 void CFWL_ListBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { 20 if (!pParams) 21 return; 22 23 switch (pParams->m_iPart) { 24 case CFWL_Part::Border: { 25 DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); 26 break; 27 } 28 case CFWL_Part::Background: { 29 FillSoildRect(pParams->m_pGraphics, ArgbEncode(255, 255, 255, 255), 30 &pParams->m_rtPart, &pParams->m_matrix); 31 if (pParams->m_pData) { 32 FillSoildRect(pParams->m_pGraphics, FWLTHEME_COLOR_Background, 33 (CFX_RectF*)pParams->m_pData, &pParams->m_matrix); 34 } 35 break; 36 } 37 case CFWL_Part::ListItem: { 38 DrawListBoxItem(pParams->m_pGraphics, pParams->m_dwStates, 39 &pParams->m_rtPart, pParams->m_pData, &pParams->m_matrix); 40 break; 41 } 42 case CFWL_Part::Icon: { 43 pParams->m_pGraphics->StretchImage(pParams->m_pImage, pParams->m_rtPart, 44 &pParams->m_matrix); 45 break; 46 } 47 case CFWL_Part::Check: { 48 uint32_t color = 0xFF000000; 49 if (pParams->m_dwStates == CFWL_PartState_Checked) { 50 color = 0xFFFF0000; 51 } else if (pParams->m_dwStates == CFWL_PartState_Normal) { 52 color = 0xFF0000FF; 53 } 54 FillSoildRect(pParams->m_pGraphics, color, &pParams->m_rtPart, 55 &pParams->m_matrix); 56 } 57 default: 58 break; 59 } 60 } 61 62 void CFWL_ListBoxTP::DrawListBoxItem(CFX_Graphics* pGraphics, 63 uint32_t dwStates, 64 const CFX_RectF* prtItem, 65 void* pData, 66 CFX_Matrix* pMatrix) { 67 if (dwStates & CFWL_PartState_Selected) { 68 pGraphics->SaveGraphState(); 69 CFX_Color crFill(FWLTHEME_COLOR_BKSelected); 70 pGraphics->SetFillColor(&crFill); 71 CFX_RectF rt(*prtItem); 72 CFX_Path path; 73 #if (_FX_OS_ == _FX_MACOSX_) 74 path.AddRectangle(rt.left, rt.top, rt.width - 1, rt.height - 1); 75 #else 76 path.AddRectangle(rt.left, rt.top, rt.width, rt.height); 77 #endif 78 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); 79 pGraphics->RestoreGraphState(); 80 } 81 if (dwStates & CFWL_PartState_Focused && pData) 82 DrawFocus(pGraphics, (CFX_RectF*)pData, pMatrix); 83 } 84