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/fwl/core/ifwl_pushbutton.h" | 7 #include "xfa/fwl/core/ifwl_pushbutton.h" |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 29 matching lines...) Expand all Loading... |
40 void IFWL_PushButton::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { | 40 void IFWL_PushButton::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { |
41 if (!bAutoSize) { | 41 if (!bAutoSize) { |
42 rect = m_pProperties->m_rtWidget; | 42 rect = m_pProperties->m_rtWidget; |
43 return; | 43 return; |
44 } | 44 } |
45 | 45 |
46 rect.Set(0, 0, 0, 0); | 46 rect.Set(0, 0, 0, 0); |
47 if (!m_pProperties->m_pThemeProvider) | 47 if (!m_pProperties->m_pThemeProvider) |
48 m_pProperties->m_pThemeProvider = GetAvailableTheme(); | 48 m_pProperties->m_pThemeProvider = GetAvailableTheme(); |
49 | 49 |
50 CFX_WideString wsCaption; | |
51 if (m_pProperties->m_pDataProvider) | |
52 m_pProperties->m_pDataProvider->GetCaption(this, wsCaption); | |
53 | |
54 int32_t iLen = wsCaption.GetLength(); | |
55 if (iLen > 0) { | |
56 CFX_SizeF sz = CalcTextSize(wsCaption, m_pProperties->m_pThemeProvider); | |
57 rect.Set(0, 0, sz.x, sz.y); | |
58 } | |
59 | |
60 FX_FLOAT* fcaption = | 50 FX_FLOAT* fcaption = |
61 static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::Margin)); | 51 static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::Margin)); |
62 rect.Inflate(*fcaption, *fcaption); | 52 rect.Inflate(*fcaption, *fcaption); |
63 IFWL_Widget::GetWidgetRect(rect, true); | 53 IFWL_Widget::GetWidgetRect(rect, true); |
64 } | 54 } |
65 | 55 |
66 void IFWL_PushButton::SetStates(uint32_t dwStates, bool bSet) { | 56 void IFWL_PushButton::SetStates(uint32_t dwStates, bool bSet) { |
67 if ((dwStates & FWL_WGTSTATE_Disabled) && bSet) { | 57 if ((dwStates & FWL_WGTSTATE_Disabled) && bSet) { |
68 m_pProperties->m_dwStates = FWL_WGTSTATE_Disabled; | 58 m_pProperties->m_dwStates = FWL_WGTSTATE_Disabled; |
69 return; | 59 return; |
(...skipping 15 matching lines...) Expand all Loading... |
85 m_rtCaption.Inflate(-*fcaption, -*fcaption); | 75 m_rtCaption.Inflate(-*fcaption, -*fcaption); |
86 } | 76 } |
87 | 77 |
88 void IFWL_PushButton::DrawWidget(CFX_Graphics* pGraphics, | 78 void IFWL_PushButton::DrawWidget(CFX_Graphics* pGraphics, |
89 const CFX_Matrix* pMatrix) { | 79 const CFX_Matrix* pMatrix) { |
90 if (!pGraphics) | 80 if (!pGraphics) |
91 return; | 81 return; |
92 if (!m_pProperties->m_pThemeProvider) | 82 if (!m_pProperties->m_pThemeProvider) |
93 return; | 83 return; |
94 | 84 |
95 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; | |
96 if (HasBorder()) { | 85 if (HasBorder()) { |
97 DrawBorder(pGraphics, CFWL_Part::Border, m_pProperties->m_pThemeProvider, | 86 DrawBorder(pGraphics, CFWL_Part::Border, m_pProperties->m_pThemeProvider, |
98 pMatrix); | 87 pMatrix); |
99 } | 88 } |
100 if (HasEdge()) { | 89 if (HasEdge()) { |
101 DrawEdge(pGraphics, CFWL_Part::Edge, m_pProperties->m_pThemeProvider, | 90 DrawEdge(pGraphics, CFWL_Part::Edge, m_pProperties->m_pThemeProvider, |
102 pMatrix); | 91 pMatrix); |
103 } | 92 } |
104 DrawBkground(pGraphics, m_pProperties->m_pThemeProvider, pMatrix); | 93 DrawBkground(pGraphics, m_pProperties->m_pThemeProvider, pMatrix); |
105 CFX_Matrix matrix; | |
106 matrix.Concat(*pMatrix); | |
107 | |
108 CFX_WideString wsCaption; | |
109 if (m_pProperties->m_pDataProvider) | |
110 m_pProperties->m_pDataProvider->GetCaption(this, wsCaption); | |
111 | |
112 CFX_RectF rtText; | |
113 rtText.Set(0, 0, 0, 0); | |
114 if (!wsCaption.IsEmpty()) | |
115 CalcTextRect(wsCaption, pTheme, 0, m_iTTOAlign, rtText); | |
116 | |
117 switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_PSB_ModeMask) { | |
118 case FWL_STYLEEXT_PSB_TextOnly: | |
119 DrawText(pGraphics, m_pProperties->m_pThemeProvider, &matrix); | |
120 break; | |
121 case FWL_STYLEEXT_PSB_IconOnly: | |
122 case FWL_STYLEEXT_PSB_TextIcon: | |
123 break; | |
124 } | |
125 } | 94 } |
126 | 95 |
127 void IFWL_PushButton::DrawBkground(CFX_Graphics* pGraphics, | 96 void IFWL_PushButton::DrawBkground(CFX_Graphics* pGraphics, |
128 IFWL_ThemeProvider* pTheme, | 97 IFWL_ThemeProvider* pTheme, |
129 const CFX_Matrix* pMatrix) { | 98 const CFX_Matrix* pMatrix) { |
130 CFWL_ThemeBackground param; | 99 CFWL_ThemeBackground param; |
131 param.m_pWidget = this; | 100 param.m_pWidget = this; |
132 param.m_iPart = CFWL_Part::Background; | 101 param.m_iPart = CFWL_Part::Background; |
133 param.m_dwStates = GetPartStates(); | 102 param.m_dwStates = GetPartStates(); |
134 param.m_pGraphics = pGraphics; | 103 param.m_pGraphics = pGraphics; |
135 if (pMatrix) | 104 if (pMatrix) |
136 param.m_matrix.Concat(*pMatrix); | 105 param.m_matrix.Concat(*pMatrix); |
137 param.m_rtPart = m_rtClient; | 106 param.m_rtPart = m_rtClient; |
138 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) | 107 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) |
139 param.m_pData = &m_rtCaption; | 108 param.m_pData = &m_rtCaption; |
140 pTheme->DrawBackground(¶m); | 109 pTheme->DrawBackground(¶m); |
141 } | 110 } |
142 | 111 |
143 void IFWL_PushButton::DrawText(CFX_Graphics* pGraphics, | |
144 IFWL_ThemeProvider* pTheme, | |
145 const CFX_Matrix* pMatrix) { | |
146 if (!m_pProperties->m_pDataProvider) | |
147 return; | |
148 | |
149 CFX_WideString wsCaption; | |
150 m_pProperties->m_pDataProvider->GetCaption(this, wsCaption); | |
151 if (wsCaption.IsEmpty()) | |
152 return; | |
153 | |
154 CFWL_ThemeText param; | |
155 param.m_pWidget = this; | |
156 param.m_iPart = CFWL_Part::Caption; | |
157 param.m_dwStates = GetPartStates(); | |
158 param.m_pGraphics = pGraphics; | |
159 if (pMatrix) | |
160 param.m_matrix.Concat(*pMatrix); | |
161 param.m_rtPart = m_rtCaption; | |
162 param.m_wsText = wsCaption; | |
163 param.m_dwTTOStyles = m_dwTTOStyles; | |
164 param.m_iTTOAlign = m_iTTOAlign; | |
165 pTheme->DrawText(¶m); | |
166 } | |
167 | |
168 uint32_t IFWL_PushButton::GetPartStates() { | 112 uint32_t IFWL_PushButton::GetPartStates() { |
169 uint32_t dwStates = CFWL_PartState_Normal; | 113 uint32_t dwStates = CFWL_PartState_Normal; |
170 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) | 114 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) |
171 dwStates |= CFWL_PartState_Focused; | 115 dwStates |= CFWL_PartState_Focused; |
172 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) | 116 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) |
173 dwStates = CFWL_PartState_Disabled; | 117 dwStates = CFWL_PartState_Disabled; |
174 else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) | 118 else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) |
175 dwStates |= CFWL_PartState_Pressed; | 119 dwStates |= CFWL_PartState_Pressed; |
176 else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) | 120 else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) |
177 dwStates |= CFWL_PartState_Hovered; | 121 dwStates |= CFWL_PartState_Hovered; |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 CFWL_EvtClick wmClick; | 307 CFWL_EvtClick wmClick; |
364 wmClick.m_pSrcTarget = this; | 308 wmClick.m_pSrcTarget = this; |
365 DispatchEvent(&wmClick); | 309 DispatchEvent(&wmClick); |
366 return; | 310 return; |
367 } | 311 } |
368 if (pMsg->m_dwKeyCode != FWL_VKEY_Tab) | 312 if (pMsg->m_dwKeyCode != FWL_VKEY_Tab) |
369 return; | 313 return; |
370 | 314 |
371 DispatchKeyEvent(pMsg); | 315 DispatchKeyEvent(pMsg); |
372 } | 316 } |
OLD | NEW |