OLD | NEW |
| (Empty) |
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/include/fwl/theme/checkboxtp.h" | |
8 | |
9 #include "xfa/include/fwl/basewidget/fwl_checkbox.h" | |
10 #include "xfa/include/fwl/core/fwl_widget.h" | |
11 #include "xfa/src/fde/tto/fde_textout.h" | |
12 | |
13 #define CHECKBOX_SIZE_SIGNMARGIN 3 | |
14 #define CHECKBOX_SIZE_SIGNBORDER 2 | |
15 #define CHECKBOX_SIZE_SIGNPATH 100 | |
16 #define CHECKBOX_COLOR_BOXLT1 (ArgbEncode(255, 172, 168, 153)) | |
17 #define CHECKBOX_COLOR_BOXLT2 (ArgbEncode(255, 113, 111, 100)) | |
18 #define CHECKBOX_COLOR_BOXRB1 (ArgbEncode(255, 241, 239, 226)) | |
19 #define CHECKBOX_COLOR_BOXRB2 (ArgbEncode(255, 255, 255, 255)) | |
20 #define CHECKBOX_FXGE_CoordinatesAdjust | |
21 | |
22 CFWL_CheckBoxTP::CFWL_CheckBoxTP() : m_pCheckPath(NULL) { | |
23 m_pThemeData = new CKBThemeData; | |
24 SetThemeData(0); | |
25 } | |
26 CFWL_CheckBoxTP::~CFWL_CheckBoxTP() { | |
27 if (m_pThemeData) { | |
28 delete m_pThemeData; | |
29 m_pThemeData = NULL; | |
30 } | |
31 if (m_pCheckPath) { | |
32 m_pCheckPath->Clear(); | |
33 delete m_pCheckPath; | |
34 m_pCheckPath = NULL; | |
35 } | |
36 } | |
37 FX_BOOL CFWL_CheckBoxTP::IsValidWidget(IFWL_Widget* pWidget) { | |
38 return pWidget && pWidget->GetClassID() == FWL_CLASSHASH_CheckBox; | |
39 } | |
40 FX_DWORD CFWL_CheckBoxTP::SetThemeID(IFWL_Widget* pWidget, | |
41 FX_DWORD dwThemeID, | |
42 FX_BOOL bChildren) { | |
43 if (m_pThemeData) { | |
44 SetThemeData(FWL_GetThemeColor(dwThemeID)); | |
45 } | |
46 return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren); | |
47 } | |
48 FX_BOOL CFWL_CheckBoxTP::DrawText(CFWL_ThemeText* pParams) { | |
49 if (!m_pTextOut) | |
50 return FALSE; | |
51 m_pTextOut->SetTextColor((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask1) == | |
52 FWL_PARTSTATE_CKB_Disabled | |
53 ? FWLTHEME_CAPACITY_TextDisColor | |
54 : FWLTHEME_CAPACITY_TextColor); | |
55 return CFWL_WidgetTP::DrawText(pParams); | |
56 } | |
57 FX_BOOL CFWL_CheckBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { | |
58 if (!pParams) | |
59 return FALSE; | |
60 switch (pParams->m_iPart) { | |
61 case FWL_PART_CKB_Border: { | |
62 DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); | |
63 break; | |
64 } | |
65 case FWL_PART_CKB_Edge: { | |
66 DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), | |
67 &pParams->m_rtPart, &pParams->m_matrix); | |
68 break; | |
69 } | |
70 case FWL_PART_CKB_Background: { | |
71 FillBackground(pParams->m_pGraphics, &pParams->m_rtPart, | |
72 &pParams->m_matrix); | |
73 if (pParams->m_dwStates & FWL_PARTSTATE_CKB_Focused) { | |
74 pParams->m_rtPart = *(CFX_RectF*)pParams->m_pData; | |
75 DrawFocus(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); | |
76 } | |
77 break; | |
78 } | |
79 case FWL_PART_CKB_CheckBox: { | |
80 DrawBoxBk(pParams->m_pWidget, pParams->m_pGraphics, &pParams->m_rtPart, | |
81 pParams->m_dwStates, &pParams->m_matrix); | |
82 if (((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) == | |
83 FWL_PARTSTATE_CKB_Checked) | | |
84 ((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) == | |
85 FWL_PARTSTATE_CKB_Neutral)) { | |
86 DrawSign(pParams->m_pWidget, pParams->m_pGraphics, &pParams->m_rtPart, | |
87 pParams->m_dwStates, &pParams->m_matrix); | |
88 } | |
89 FX_BOOL bDisable = (pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask1) == | |
90 FWL_PARTSTATE_CKB_Disabled; | |
91 DrawSignBorder(pParams->m_pWidget, pParams->m_pGraphics, | |
92 &pParams->m_rtPart, bDisable, &pParams->m_matrix); | |
93 break; | |
94 } | |
95 default: { return FALSE; } | |
96 } | |
97 return TRUE; | |
98 } | |
99 FWL_ERR CFWL_CheckBoxTP::Initialize() { | |
100 InitTTO(); | |
101 return CFWL_WidgetTP::Initialize(); | |
102 } | |
103 FWL_ERR CFWL_CheckBoxTP::Finalize() { | |
104 FinalizeTTO(); | |
105 return CFWL_WidgetTP::Finalize(); | |
106 } | |
107 void CFWL_CheckBoxTP::DrawBoxBk(IFWL_Widget* pWidget, | |
108 CFX_Graphics* pGraphics, | |
109 const CFX_RectF* pRect, | |
110 FX_DWORD dwStates, | |
111 CFX_Matrix* pMatrix) { | |
112 dwStates &= 0x03; | |
113 int32_t fillMode = FXFILL_WINDING; | |
114 FX_DWORD dwStyleEx = pWidget->GetStylesEx(); | |
115 dwStyleEx &= FWL_STYLEEXT_CKB_ShapeMask; | |
116 CFX_Path path; | |
117 path.Create(); | |
118 FX_FLOAT fRight = pRect->right(); | |
119 FX_FLOAT fBottom = pRect->bottom(); | |
120 FX_BOOL bClipSign = | |
121 (dwStates & FWL_PARTSTATE_CKB_Mask1) == FWL_PARTSTATE_CKB_Hovered; | |
122 if ((dwStyleEx == FWL_STYLEEXT_CKB_ShapeSolidSquare) || | |
123 (dwStyleEx == FWL_STYLEEXT_CKB_ShapeSunkenSquare)) { | |
124 path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); | |
125 if (bClipSign) { | |
126 fillMode = FXFILL_ALTERNATE; | |
127 path.AddRectangle(pRect->left + CHECKBOX_SIZE_SIGNMARGIN, | |
128 pRect->top + CHECKBOX_SIZE_SIGNMARGIN, | |
129 pRect->width - CHECKBOX_SIZE_SIGNMARGIN * 2, | |
130 pRect->height - CHECKBOX_SIZE_SIGNMARGIN * 2); | |
131 } | |
132 } else { | |
133 #ifdef CHECKBOX_FXGE_CoordinatesAdjust | |
134 CFX_RectF rect(*pRect); | |
135 rect.Deflate(0, 0, 1, 1); | |
136 path.AddEllipse(rect); | |
137 #else | |
138 path.AddEllipse(*pRect); | |
139 #endif | |
140 if (bClipSign) { | |
141 fillMode = FXFILL_ALTERNATE; | |
142 #ifdef CHECKBOX_FXGE_CoordinatesAdjust | |
143 CFX_RectF rtClip(rect); | |
144 #else | |
145 CFX_RectF rtClip(*pRect); | |
146 #endif | |
147 rtClip.Deflate(CHECKBOX_SIZE_SIGNMARGIN - 1, | |
148 CHECKBOX_SIZE_SIGNMARGIN - 1); | |
149 path.AddEllipse(rtClip); | |
150 } | |
151 } | |
152 int32_t iTheme = 1; | |
153 if ((dwStates & FWL_PARTSTATE_CKB_Mask1) == FWL_PARTSTATE_CKB_Hovered) { | |
154 iTheme = 2; | |
155 } else if ((dwStates & FWL_PARTSTATE_CKB_Mask1) == | |
156 FWL_PARTSTATE_CKB_Pressed) { | |
157 iTheme = 3; | |
158 } else if ((dwStates & FWL_PARTSTATE_CKB_Mask1) == | |
159 FWL_PARTSTATE_CKB_Disabled) { | |
160 iTheme = 4; | |
161 } | |
162 if ((dwStates & FWL_PARTSTATE_CKB_Mask2) == FWL_PARTSTATE_CKB_Checked) { | |
163 iTheme += 4; | |
164 } else if ((dwStates & FWL_PARTSTATE_CKB_Mask2) == | |
165 FWL_PARTSTATE_CKB_Neutral) { | |
166 iTheme += 8; | |
167 } | |
168 DrawAxialShading(pGraphics, pRect->left - 1, pRect->top - 1, fRight, fBottom, | |
169 m_pThemeData->clrBoxBk[iTheme][0], | |
170 m_pThemeData->clrBoxBk[iTheme][1], &path, fillMode, pMatrix); | |
171 } | |
172 void CFWL_CheckBoxTP::DrawSign(IFWL_Widget* pWidget, | |
173 CFX_Graphics* pGraphics, | |
174 const CFX_RectF* pRtBox, | |
175 FX_DWORD dwStates, | |
176 CFX_Matrix* pMatrix) { | |
177 CFX_RectF rtSign(*pRtBox); | |
178 rtSign.Deflate(CHECKBOX_SIZE_SIGNMARGIN, CHECKBOX_SIZE_SIGNMARGIN); | |
179 FX_DWORD dwColor = m_pThemeData->clrSignCheck; | |
180 FX_BOOL bCheck = TRUE; | |
181 if (((dwStates & FWL_PARTSTATE_CKB_Mask1) == FWL_PARTSTATE_CKB_Disabled) && | |
182 ((dwStates & FWL_PARTSTATE_CKB_Mask2) == FWL_PARTSTATE_CKB_Checked)) { | |
183 dwColor = m_pThemeData->clrSignBorderDisable; | |
184 } else if ((dwStates & FWL_PARTSTATE_CKB_Mask2) == | |
185 FWL_PARTSTATE_CKB_Neutral) { | |
186 switch (dwStates & FWL_PARTSTATE_CKB_Mask1) { | |
187 case FWL_PARTSTATE_CKB_Normal: { | |
188 bCheck = FALSE; | |
189 dwColor = m_pThemeData->clrSignNeutralNormal; | |
190 break; | |
191 } | |
192 case FWL_PARTSTATE_CKB_Hovered: { | |
193 bCheck = FALSE; | |
194 dwColor = m_pThemeData->clrSignNeutralHover; | |
195 break; | |
196 } | |
197 case FWL_PARTSTATE_CKB_Pressed: { | |
198 bCheck = FALSE, dwColor = m_pThemeData->clrSignNeutralPressed; | |
199 break; | |
200 } | |
201 case FWL_PARTSTATE_CKB_Disabled: { | |
202 bCheck = FALSE, dwColor = m_pThemeData->clrSignBorderDisable; | |
203 break; | |
204 } | |
205 } | |
206 } | |
207 if (bCheck) { | |
208 FX_DWORD dwStyle = pWidget->GetStylesEx(); | |
209 switch (dwStyle & FWL_STYLEEXT_CKB_SignShapeMask) { | |
210 case FWL_STYLEEXT_CKB_SignShapeCheck: { | |
211 DrawSignCheck(pGraphics, &rtSign, dwColor, pMatrix); | |
212 break; | |
213 } | |
214 case FWL_STYLEEXT_CKB_SignShapeCircle: { | |
215 rtSign.Deflate(1, 1); | |
216 DrawSignCircle(pGraphics, &rtSign, dwColor, pMatrix); | |
217 break; | |
218 } | |
219 case FWL_STYLEEXT_CKB_SignShapeCross: { | |
220 DrawSignCross(pGraphics, &rtSign, dwColor, pMatrix); | |
221 break; | |
222 } | |
223 case FWL_STYLEEXT_CKB_SignShapeDiamond: { | |
224 DrawSignDiamond(pGraphics, &rtSign, dwColor, pMatrix); | |
225 break; | |
226 } | |
227 case FWL_STYLEEXT_CKB_SignShapeSquare: { | |
228 DrawSignSquare(pGraphics, &rtSign, dwColor, pMatrix); | |
229 break; | |
230 } | |
231 case FWL_STYLEEXT_CKB_SignShapeStar: { | |
232 DrawSignStar(pGraphics, &rtSign, dwColor, pMatrix); | |
233 break; | |
234 } | |
235 } | |
236 } else { | |
237 FillSoildRect(pGraphics, ArgbEncode(255, 33, 161, 33), &rtSign, pMatrix); | |
238 } | |
239 } | |
240 void CFWL_CheckBoxTP::DrawSignNeutral(CFX_Graphics* pGraphics, | |
241 const CFX_RectF* pRtSign, | |
242 CFX_Matrix* pMatrix) { | |
243 ((CFX_RectF*)pRtSign)->Inflate(-3, -3); | |
244 FillSoildRect(pGraphics, m_pThemeData->clrSignNeutral, pRtSign, pMatrix); | |
245 } | |
246 void CFWL_CheckBoxTP::DrawSignCheck(CFX_Graphics* pGraphics, | |
247 const CFX_RectF* pRtSign, | |
248 FX_ARGB argbFill, | |
249 CFX_Matrix* pMatrix) { | |
250 if (!m_pCheckPath) { | |
251 initCheckPath(pRtSign->width); | |
252 } | |
253 CFX_Matrix mt; | |
254 mt.SetIdentity(); | |
255 mt.Translate(pRtSign->left, pRtSign->top); | |
256 mt.Concat(*pMatrix); | |
257 CFX_Color crFill(argbFill); | |
258 pGraphics->SaveGraphState(); | |
259 pGraphics->SetFillColor(&crFill); | |
260 pGraphics->FillPath(m_pCheckPath, FXFILL_WINDING, &mt); | |
261 pGraphics->RestoreGraphState(); | |
262 } | |
263 void CFWL_CheckBoxTP::DrawSignCircle(CFX_Graphics* pGraphics, | |
264 const CFX_RectF* pRtSign, | |
265 FX_ARGB argbFill, | |
266 CFX_Matrix* pMatrix) { | |
267 CFX_Path path; | |
268 path.Create(); | |
269 path.AddEllipse(*pRtSign); | |
270 CFX_Color crFill(argbFill); | |
271 pGraphics->SaveGraphState(); | |
272 pGraphics->SetFillColor(&crFill); | |
273 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); | |
274 pGraphics->RestoreGraphState(); | |
275 } | |
276 void CFWL_CheckBoxTP::DrawSignCross(CFX_Graphics* pGraphics, | |
277 const CFX_RectF* pRtSign, | |
278 FX_ARGB argbFill, | |
279 CFX_Matrix* pMatrix) { | |
280 CFX_Path path; | |
281 path.Create(); | |
282 FX_FLOAT fRight = pRtSign->right(); | |
283 FX_FLOAT fBottom = pRtSign->bottom(); | |
284 path.AddLine(pRtSign->left, pRtSign->top, fRight, fBottom); | |
285 path.AddLine(pRtSign->left, fBottom, fRight, pRtSign->top); | |
286 CFX_Color crFill(argbFill); | |
287 pGraphics->SaveGraphState(); | |
288 pGraphics->SetStrokeColor(&crFill); | |
289 pGraphics->SetLineWidth(1.0f); | |
290 pGraphics->StrokePath(&path, pMatrix); | |
291 pGraphics->RestoreGraphState(); | |
292 } | |
293 void CFWL_CheckBoxTP::DrawSignDiamond(CFX_Graphics* pGraphics, | |
294 const CFX_RectF* pRtSign, | |
295 FX_ARGB argbFill, | |
296 CFX_Matrix* pMatrix) { | |
297 CFX_Path path; | |
298 path.Create(); | |
299 FX_FLOAT fWidth = pRtSign->width; | |
300 FX_FLOAT fHeight = pRtSign->height; | |
301 FX_FLOAT fBottom = pRtSign->bottom(); | |
302 path.MoveTo(pRtSign->left + fWidth / 2, pRtSign->top); | |
303 path.LineTo(pRtSign->left, pRtSign->top + fHeight / 2); | |
304 path.LineTo(pRtSign->left + fWidth / 2, fBottom); | |
305 path.LineTo(pRtSign->right(), pRtSign->top + fHeight / 2); | |
306 path.LineTo(pRtSign->left + fWidth / 2, pRtSign->top); | |
307 CFX_Color crFill(argbFill); | |
308 pGraphics->SaveGraphState(); | |
309 pGraphics->SetFillColor(&crFill); | |
310 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); | |
311 pGraphics->RestoreGraphState(); | |
312 } | |
313 void CFWL_CheckBoxTP::DrawSignSquare(CFX_Graphics* pGraphics, | |
314 const CFX_RectF* pRtSign, | |
315 FX_ARGB argbFill, | |
316 CFX_Matrix* pMatrix) { | |
317 CFX_Path path; | |
318 path.Create(); | |
319 path.AddRectangle(pRtSign->left, pRtSign->top, pRtSign->width, | |
320 pRtSign->height); | |
321 CFX_Color crFill(argbFill); | |
322 pGraphics->SaveGraphState(); | |
323 pGraphics->SetFillColor(&crFill); | |
324 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); | |
325 pGraphics->RestoreGraphState(); | |
326 } | |
327 void CFWL_CheckBoxTP::DrawSignStar(CFX_Graphics* pGraphics, | |
328 const CFX_RectF* pRtSign, | |
329 FX_ARGB argbFill, | |
330 CFX_Matrix* pMatrix) { | |
331 CFX_Path path; | |
332 path.Create(); | |
333 FX_FLOAT fBottom = pRtSign->bottom(); | |
334 FX_FLOAT fRadius = | |
335 (pRtSign->top - fBottom) / (1 + (FX_FLOAT)cos(FX_PI / 5.0f)); | |
336 CFX_PointF ptCenter((pRtSign->left + pRtSign->right()) / 2.0f, | |
337 (pRtSign->top + fBottom) / 2.0f); | |
338 FX_FLOAT px[5], py[5]; | |
339 FX_FLOAT fAngel = FX_PI / 10.0f; | |
340 for (int32_t i = 0; i < 5; i++) { | |
341 px[i] = ptCenter.x + fRadius * (FX_FLOAT)cos(fAngel); | |
342 py[i] = ptCenter.y + fRadius * (FX_FLOAT)sin(fAngel); | |
343 fAngel += FX_PI * 2 / 5.0f; | |
344 } | |
345 path.MoveTo(px[0], py[0]); | |
346 int32_t nNext = 0; | |
347 for (int32_t j = 0; j < 5; j++) { | |
348 nNext += 2; | |
349 if (nNext >= 5) { | |
350 nNext -= 5; | |
351 } | |
352 path.LineTo(px[nNext], py[nNext]); | |
353 } | |
354 CFX_Color crFill(argbFill); | |
355 pGraphics->SaveGraphState(); | |
356 pGraphics->SetFillColor(&crFill); | |
357 pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); | |
358 pGraphics->RestoreGraphState(); | |
359 } | |
360 void CFWL_CheckBoxTP::DrawSignBorder(IFWL_Widget* pWidget, | |
361 CFX_Graphics* pGraphics, | |
362 const CFX_RectF* pRtBox, | |
363 FX_BOOL bDisable, | |
364 CFX_Matrix* pMatrix) { | |
365 switch (pWidget->GetStylesEx() & FWL_STYLEEXT_CKB_ShapeMask) { | |
366 case FWL_STYLEEXT_CKB_ShapeSolidSquare: { | |
367 DrawAnnulusRect(pGraphics, bDisable ? m_pThemeData->clrSignBorderDisable | |
368 : m_pThemeData->clrSignBorderNormal, | |
369 pRtBox, 1, pMatrix); | |
370 break; | |
371 } | |
372 case FWL_STYLEEXT_CKB_ShapeSunkenSquare: { | |
373 Draw3DRect(pGraphics, FWLTHEME_EDGE_Sunken, CHECKBOX_SIZE_SIGNBORDER, | |
374 pRtBox, CHECKBOX_COLOR_BOXLT1, CHECKBOX_COLOR_BOXLT2, | |
375 CHECKBOX_COLOR_BOXRB1, CHECKBOX_COLOR_BOXRB2, pMatrix); | |
376 break; | |
377 } | |
378 case FWL_STYLEEXT_CKB_ShapeSolidCircle: { | |
379 DrawAnnulusCircle(pGraphics, bDisable ? m_pThemeData->clrSignBorderDisable | |
380 : m_pThemeData->clrSignBorderNormal, | |
381 pRtBox, 1, pMatrix); | |
382 break; | |
383 } | |
384 case FWL_STYLEEXT_CKB_ShapeSunkenCircle: { | |
385 Draw3DCircle(pGraphics, FWLTHEME_EDGE_Sunken, CHECKBOX_SIZE_SIGNBORDER, | |
386 pRtBox, CHECKBOX_COLOR_BOXLT1, CHECKBOX_COLOR_BOXLT2, | |
387 CHECKBOX_COLOR_BOXRB1, CHECKBOX_COLOR_BOXRB2, pMatrix); | |
388 break; | |
389 } | |
390 } | |
391 } | |
392 void CFWL_CheckBoxTP::SetThemeData(FX_DWORD dwID) { | |
393 FX_DWORD* pData = (FX_DWORD*)&m_pThemeData->clrBoxBk; | |
394 if (dwID) { | |
395 *pData++ = 0, *pData++ = 0, *pData++ = ArgbEncode(255, 220, 220, 215), | |
396 *pData++ = ArgbEncode(255, 255, 255, 255), | |
397 *pData++ = ArgbEncode(255, 255, 240, 207), | |
398 *pData++ = ArgbEncode(255, 248, 179, 48), | |
399 *pData++ = ArgbEncode(255, 176, 176, 167), | |
400 *pData++ = ArgbEncode(255, 241, 239, 239), | |
401 *pData++ = ArgbEncode(255, 255, 255, 255), | |
402 *pData++ = ArgbEncode(255, 255, 255, 255), | |
403 *pData++ = ArgbEncode(255, 220, 220, 215), | |
404 *pData++ = ArgbEncode(255, 255, 255, 255), | |
405 *pData++ = ArgbEncode(255, 255, 240, 207), | |
406 *pData++ = ArgbEncode(255, 248, 179, 48), | |
407 *pData++ = ArgbEncode(255, 176, 176, 167), | |
408 *pData++ = ArgbEncode(255, 241, 239, 239), | |
409 *pData++ = ArgbEncode(255, 255, 255, 255), | |
410 *pData++ = ArgbEncode(255, 255, 255, 255), | |
411 *pData++ = ArgbEncode(255, 220, 220, 215), | |
412 *pData++ = ArgbEncode(255, 255, 255, 255), | |
413 *pData++ = ArgbEncode(255, 255, 240, 207), | |
414 *pData++ = ArgbEncode(255, 248, 179, 48), | |
415 *pData++ = ArgbEncode(255, 176, 176, 167), | |
416 *pData++ = ArgbEncode(255, 241, 239, 239), | |
417 *pData++ = ArgbEncode(255, 255, 255, 255), | |
418 *pData++ = ArgbEncode(255, 255, 255, 255); | |
419 m_pThemeData->clrSignBorderNormal = ArgbEncode(255, 154, 167, 114); | |
420 m_pThemeData->clrSignBorderDisable = ArgbEncode(255, 202, 200, 187); | |
421 m_pThemeData->clrSignCheck = ArgbEncode(255, 164, 180, 138); | |
422 m_pThemeData->clrSignNeutral = ArgbEncode(2255, 28, 134, 26); | |
423 m_pThemeData->clrSignNeutralNormal = ArgbEncode(255, 114, 192, 113); | |
424 m_pThemeData->clrSignNeutralHover = ArgbEncode(255, 33, 161, 33); | |
425 m_pThemeData->clrSignNeutralPressed = ArgbEncode(255, 28, 134, 26); | |
426 } else { | |
427 *pData++ = 0, *pData++ = 0, *pData++ = ArgbEncode(255, 220, 220, 215), | |
428 *pData++ = ArgbEncode(255, 255, 255, 255), | |
429 *pData++ = ArgbEncode(255, 255, 240, 207), | |
430 *pData++ = ArgbEncode(255, 248, 179, 48), | |
431 *pData++ = ArgbEncode(255, 176, 176, 167), | |
432 *pData++ = ArgbEncode(255, 241, 239, 239), | |
433 *pData++ = ArgbEncode(255, 255, 255, 255), | |
434 *pData++ = ArgbEncode(255, 255, 255, 255), | |
435 *pData++ = ArgbEncode(255, 220, 220, 215), | |
436 *pData++ = ArgbEncode(255, 255, 255, 255), | |
437 *pData++ = ArgbEncode(255, 255, 240, 207), | |
438 *pData++ = ArgbEncode(255, 248, 179, 48), | |
439 *pData++ = ArgbEncode(255, 176, 176, 167), | |
440 *pData++ = ArgbEncode(255, 241, 239, 239), | |
441 *pData++ = ArgbEncode(255, 255, 255, 255), | |
442 *pData++ = ArgbEncode(255, 255, 255, 255), | |
443 *pData++ = ArgbEncode(255, 220, 220, 215), | |
444 *pData++ = ArgbEncode(255, 255, 255, 255), | |
445 *pData++ = ArgbEncode(255, 255, 240, 207), | |
446 *pData++ = ArgbEncode(255, 248, 179, 48), | |
447 *pData++ = ArgbEncode(255, 176, 176, 167), | |
448 *pData++ = ArgbEncode(255, 241, 239, 239), | |
449 *pData++ = ArgbEncode(255, 255, 255, 255), | |
450 *pData++ = ArgbEncode(255, 255, 255, 255); | |
451 m_pThemeData->clrSignBorderNormal = ArgbEncode(255, 28, 81, 128); | |
452 m_pThemeData->clrSignBorderDisable = ArgbEncode(255, 202, 200, 187); | |
453 m_pThemeData->clrSignCheck = ArgbEncode(255, 28, 81, 128); | |
454 m_pThemeData->clrSignNeutral = ArgbEncode(255, 28, 134, 26); | |
455 m_pThemeData->clrSignNeutralNormal = ArgbEncode(255, 114, 192, 113); | |
456 m_pThemeData->clrSignNeutralHover = ArgbEncode(255, 33, 161, 33); | |
457 m_pThemeData->clrSignNeutralPressed = ArgbEncode(255, 28, 134, 26); | |
458 } | |
459 } | |
460 void CFWL_CheckBoxTP::initCheckPath(FX_FLOAT fCheckLen) { | |
461 if (!m_pCheckPath) { | |
462 m_pCheckPath = new CFX_Path; | |
463 m_pCheckPath->Create(); | |
464 FX_FLOAT fWidth = CHECKBOX_SIZE_SIGNPATH; | |
465 FX_FLOAT fHeight = -CHECKBOX_SIZE_SIGNPATH; | |
466 FX_FLOAT fBottom = CHECKBOX_SIZE_SIGNPATH; | |
467 CFX_PointF pt1(fWidth / 15.0f, fBottom + fHeight * 2 / 5.0f); | |
468 CFX_PointF pt2(fWidth / 4.5f, fBottom + fHeight / 16.0f); | |
469 CFX_PointF pt3(fWidth / 3.0f, fBottom); | |
470 CFX_PointF pt4(fWidth * 14 / 15.0f, fBottom + fHeight * 15 / 16.0f); | |
471 CFX_PointF pt5(fWidth / 3.6f, fBottom + fHeight / 3.5f); | |
472 CFX_PointF pt12(fWidth / 7.0f, fBottom + fHeight * 2 / 7.0f); | |
473 CFX_PointF pt21(fWidth / 5.0f, fBottom + fHeight / 5.0f); | |
474 CFX_PointF pt23(fWidth / 4.4f, fBottom + fHeight * 0 / 16.0f); | |
475 CFX_PointF pt32(fWidth / 4.0f, fBottom); | |
476 CFX_PointF pt34(fWidth * (1 / 7.0f + 7 / 15.0f), | |
477 fBottom + fHeight * 4 / 5.0f); | |
478 CFX_PointF pt43(fWidth * (1 / 7.0f + 7 / 15.0f), | |
479 fBottom + fHeight * 4 / 5.0f); | |
480 CFX_PointF pt45(fWidth * 7 / 15.0f, fBottom + fHeight * 8 / 7.0f); | |
481 CFX_PointF pt54(fWidth / 3.4f, fBottom + fHeight / 3.5f); | |
482 CFX_PointF pt51(fWidth / 3.6f, fBottom + fHeight / 4.0f); | |
483 CFX_PointF pt15(fWidth / 3.5f, fBottom + fHeight * 3.5f / 5.0f); | |
484 m_pCheckPath->MoveTo(pt1.x, pt1.y); | |
485 FX_FLOAT px1 = pt12.x - pt1.x; | |
486 FX_FLOAT py1 = pt12.y - pt1.y; | |
487 FX_FLOAT px2 = pt21.x - pt2.x; | |
488 FX_FLOAT py2 = pt21.y - pt2.y; | |
489 m_pCheckPath->BezierTo(pt1.x + px1 * FWLTHEME_BEZIER, | |
490 pt1.y + py1 * FWLTHEME_BEZIER, | |
491 pt2.x + px2 * FWLTHEME_BEZIER, | |
492 pt2.y + py2 * FWLTHEME_BEZIER, pt2.x, pt2.y); | |
493 px1 = pt23.x - pt2.x; | |
494 py1 = pt23.y - pt2.y; | |
495 px2 = pt32.x - pt3.x; | |
496 py2 = pt32.y - pt3.y; | |
497 m_pCheckPath->BezierTo(pt2.x + px1 * FWLTHEME_BEZIER, | |
498 pt2.y + py1 * FWLTHEME_BEZIER, | |
499 pt3.x + px2 * FWLTHEME_BEZIER, | |
500 pt3.y + py2 * FWLTHEME_BEZIER, pt3.x, pt3.y); | |
501 px1 = pt34.x - pt3.x; | |
502 py1 = pt34.y - pt3.y; | |
503 px2 = pt43.x - pt4.x; | |
504 py2 = pt43.y - pt4.y; | |
505 m_pCheckPath->BezierTo(pt3.x + px1 * FWLTHEME_BEZIER, | |
506 pt3.y + py1 * FWLTHEME_BEZIER, | |
507 pt4.x + px2 * FWLTHEME_BEZIER, | |
508 pt4.y + py2 * FWLTHEME_BEZIER, pt4.x, pt4.y); | |
509 px1 = pt45.x - pt4.x; | |
510 py1 = pt45.y - pt4.y; | |
511 px2 = pt54.x - pt5.x; | |
512 py2 = pt54.y - pt5.y; | |
513 m_pCheckPath->BezierTo(pt4.x + px1 * FWLTHEME_BEZIER, | |
514 pt4.y + py1 * FWLTHEME_BEZIER, | |
515 pt5.x + px2 * FWLTHEME_BEZIER, | |
516 pt5.y + py2 * FWLTHEME_BEZIER, pt5.x, pt5.y); | |
517 px1 = pt51.x - pt5.x; | |
518 py1 = pt51.y - pt5.y; | |
519 px2 = pt15.x - pt1.x; | |
520 py2 = pt15.y - pt1.y; | |
521 m_pCheckPath->BezierTo(pt5.x + px1 * FWLTHEME_BEZIER, | |
522 pt5.y + py1 * FWLTHEME_BEZIER, | |
523 pt1.x + px2 * FWLTHEME_BEZIER, | |
524 pt1.y + py2 * FWLTHEME_BEZIER, pt1.x, pt1.y); | |
525 FX_FLOAT fScale = fCheckLen / CHECKBOX_SIZE_SIGNPATH; | |
526 CFX_Matrix mt; | |
527 mt.Set(1, 0, 0, 1, 0, 0); | |
528 mt.Scale(fScale, fScale); | |
529 CFX_PathData* pData = m_pCheckPath->GetPathData(); | |
530 pData->Transform(&mt); | |
531 } | |
532 } | |
OLD | NEW |