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