Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: xfa/fwl/theme/checkboxtp.cpp

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

Powered by Google App Engine
This is Rietveld 408576698