• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_comboboxtp.h"
8 
9 #include "xfa/fwl/cfwl_combobox.h"
10 #include "xfa/fwl/cfwl_themebackground.h"
11 #include "xfa/fwl/cfwl_widget.h"
12 #include "xfa/fwl/ifwl_themeprovider.h"
13 #include "xfa/fxgraphics/cfx_color.h"
14 #include "xfa/fxgraphics/cfx_path.h"
15 
CFWL_ComboBoxTP()16 CFWL_ComboBoxTP::CFWL_ComboBoxTP() {}
17 
~CFWL_ComboBoxTP()18 CFWL_ComboBoxTP::~CFWL_ComboBoxTP() {}
19 
DrawBackground(CFWL_ThemeBackground * pParams)20 void CFWL_ComboBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) {
21   if (!pParams)
22     return;
23 
24   switch (pParams->m_iPart) {
25     case CFWL_Part::Border: {
26       DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix);
27       break;
28     }
29     case CFWL_Part::Background: {
30       CFX_Path path;
31       CFX_RectF& rect = pParams->m_rtPart;
32       path.AddRectangle(rect.left, rect.top, rect.width, rect.height);
33       FX_ARGB argb_color;
34       switch (pParams->m_dwStates) {
35         case CFWL_PartState_Selected:
36           argb_color = FWLTHEME_COLOR_BKSelected;
37           break;
38         case CFWL_PartState_Disabled:
39           argb_color = FWLTHEME_COLOR_EDGERB1;
40           break;
41         default:
42           argb_color = 0xFFFFFFFF;
43       }
44       pParams->m_pGraphics->SaveGraphState();
45       CFX_Color cr(argb_color);
46       pParams->m_pGraphics->SetFillColor(&cr);
47       pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix);
48       pParams->m_pGraphics->RestoreGraphState();
49       break;
50     }
51     case CFWL_Part::DropDownButton: {
52       DrawDropDownButton(pParams, pParams->m_dwStates, &pParams->m_matrix);
53       break;
54     }
55     case CFWL_Part::StretchHandler: {
56       DrawStrethHandler(pParams, 0, &pParams->m_matrix);
57       break;
58     }
59     default:
60       break;
61   }
62 }
63 
DrawStrethHandler(CFWL_ThemeBackground * pParams,uint32_t dwStates,CFX_Matrix * pMatrix)64 void CFWL_ComboBoxTP::DrawStrethHandler(CFWL_ThemeBackground* pParams,
65                                         uint32_t dwStates,
66                                         CFX_Matrix* pMatrix) {
67   CFX_Path path;
68   path.AddRectangle(pParams->m_rtPart.left, pParams->m_rtPart.top,
69                     pParams->m_rtPart.width - 1, pParams->m_rtPart.height);
70   CFX_Color cr(ArgbEncode(0xff, 0xff, 0, 0));
71   pParams->m_pGraphics->SetFillColor(&cr);
72   pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix);
73 }
74 
DrawDropDownButton(CFWL_ThemeBackground * pParams,uint32_t dwStates,CFX_Matrix * pMatrix)75 void CFWL_ComboBoxTP::DrawDropDownButton(CFWL_ThemeBackground* pParams,
76                                          uint32_t dwStates,
77                                          CFX_Matrix* pMatrix) {
78   FWLTHEME_STATE eState = FWLTHEME_STATE_Normal;
79   switch (dwStates) {
80     case CFWL_PartState_Normal: {
81       eState = FWLTHEME_STATE_Normal;
82       break;
83     }
84     case CFWL_PartState_Hovered: {
85       eState = FWLTHEME_STATE_Hover;
86       break;
87     }
88     case CFWL_PartState_Pressed: {
89       eState = FWLTHEME_STATE_Pressed;
90       break;
91     }
92     case CFWL_PartState_Disabled: {
93       eState = FWLTHEME_STATE_Disable;
94       break;
95     }
96     default:
97       break;
98   }
99   DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart,
100                FWLTHEME_DIRECTION_Down, eState, &pParams->m_matrix);
101 }
102