• 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/cxfa_gecolor.h"
14 #include "xfa/fxgraphics/cxfa_gepath.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       CXFA_GEPath 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       pParams->m_pGraphics->SetFillColor(CXFA_GEColor(argb_color));
46       pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix);
47       pParams->m_pGraphics->RestoreGraphState();
48       break;
49     }
50     case CFWL_Part::DropDownButton: {
51       DrawDropDownButton(pParams, pParams->m_dwStates, &pParams->m_matrix);
52       break;
53     }
54     case CFWL_Part::StretchHandler: {
55       DrawStrethHandler(pParams, 0, &pParams->m_matrix);
56       break;
57     }
58     default:
59       break;
60   }
61 }
62 
DrawStrethHandler(CFWL_ThemeBackground * pParams,uint32_t dwStates,CFX_Matrix * pMatrix)63 void CFWL_ComboBoxTP::DrawStrethHandler(CFWL_ThemeBackground* pParams,
64                                         uint32_t dwStates,
65                                         CFX_Matrix* pMatrix) {
66   CXFA_GEPath path;
67   path.AddRectangle(pParams->m_rtPart.left, pParams->m_rtPart.top,
68                     pParams->m_rtPart.width - 1, pParams->m_rtPart.height);
69   pParams->m_pGraphics->SetFillColor(
70       CXFA_GEColor(ArgbEncode(0xff, 0xff, 0, 0)));
71   pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix);
72 }
73 
DrawDropDownButton(CFWL_ThemeBackground * pParams,uint32_t dwStates,CFX_Matrix * pMatrix)74 void CFWL_ComboBoxTP::DrawDropDownButton(CFWL_ThemeBackground* pParams,
75                                          uint32_t dwStates,
76                                          CFX_Matrix* pMatrix) {
77   FWLTHEME_STATE eState = FWLTHEME_STATE_Normal;
78   switch (dwStates) {
79     case CFWL_PartState_Normal: {
80       eState = FWLTHEME_STATE_Normal;
81       break;
82     }
83     case CFWL_PartState_Hovered: {
84       eState = FWLTHEME_STATE_Hover;
85       break;
86     }
87     case CFWL_PartState_Pressed: {
88       eState = FWLTHEME_STATE_Pressed;
89       break;
90     }
91     case CFWL_PartState_Disabled: {
92       eState = FWLTHEME_STATE_Disable;
93       break;
94     }
95     default:
96       break;
97   }
98   DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart,
99                FWLTHEME_DIRECTION_Down, eState, &pParams->m_matrix);
100 }
101