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/src/foxitlib.h"
8 #define FWL_THEMECAPACITY_MC_HEADER_WIDTH 200
9 #define FWL_THEMECAPACITY_MC_HEADER_HEIGHT 30
10 #define FWL_THEMECAPACITY_MC_HEADER_BTN_WIDTH 18
11 #define FWL_THEMECAPACITY_MC_HEADER_BTN_HEIGHT 16
12 #define FWL_THEMECAPACITY_MC_HEADER_BTN_HMARGIN 5
13 #define FWL_THEMECAPACITY_MC_HEADER_BTN_VMARGIN \
14 (FWL_THEMECAPACITY_MC_HEADER_HEIGHT - \
15 FWL_THEMECAPACITY_MC_HEADER_BTN_HEIGHT) / \
16 2
17 #define FWL_THEMECAPACITY_MC_HEADER_TEXTWIDHT 100
18 #define FWL_THEMECAPACITY_MC_HEADER_TEXTHEIGHT 20
19 #define FWL_THEMECAPACITY_MC_HEADER_TEXT_HMARGIN \
20 (FWL_THEMECAPACITY_MC_HEADER_WIDTH - \
21 FWL_THEMECAPACITY_MC_HEADER_TEXTWIDHT) / \
22 2
23 #define FWL_THEMECAPACITY_MC_HEADER_TEXT_VMARGIN \
24 (FWL_THEMECAPACITY_MC_HEADER_HEIGHT - \
25 FWL_THEMECAPACITY_MC_HEADER_TEXTHEIGHT) / \
26 2
27 #define FWL_THEMECAPACITY_MC_HSEP_WIDTH (FWL_THEMECAPACITY_MC_WEEK_WIDTH - 10)
28 #define FWL_THEMECAPACITY_MC_HSEP_HEIGHT 1
29 #define FWL_THEMECAPACITY_MC_VSEP_WIDTH 1
30 #define FWL_THEMECAPACITY_MC_VSEP_HEIGHT FWL_THEMECAPACITY_MC_WEEKNUM_HEIGHT
31 #define FWL_THEMECAPACITY_MC_WEEKNUM_WIDTH 26
32 #define FWL_THEMECAPACITY_MC_SEP_DOFFSET -4
33 #define FWL_THEMECAPACITY_MC_SEP_X 3
34 #define FWL_THEMECAPACITY_MC_SEP_Y \
35 (FWL_THEMECAPACITY_MC_HEADER_HEIGHT + FWL_THEMECAPACITY_MC_WEEK_HEIGHT + \
36 FWL_THEMECAPACITY_MC_SEP_DOFFSET)
37 #define FWL_THEMECAPACITY_MC_WEEKNUM_HEIGHT \
38 (6 * FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT)
39 #define FWL_THEMECAPACITY_MC_WEEK_WIDTH \
40 (FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH * 7)
41 #define FWL_THEMECAPACITY_MC_WEEK_HEIGHT FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT
42 #define FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH \
43 (FWL_THEMECAPACITY_MC_HEADER_WIDTH / 7)
44 #define FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT 16
45 #define FWL_THEMECAPACITY_MC_TODAY_WIDHT FWL_THEMECAPACITY_MC_HEADER_WIDTH
46 #define FWL_THEMECAPACITY_MC_TODAY_HEIGHT FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT
47 #define FWL_THEMECAPACITY_MC_TODAY_FLAG_WIDHT \
48 FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH
49 #define FWL_MC_WIDTH 200
50 #define FWL_MC_HEIGHT 160
CFWL_MonthCalendarTP()51 CFWL_MonthCalendarTP::CFWL_MonthCalendarTP() {
52 m_pThemeData = new MCThemeData;
53 SetThemeData(0);
54 }
~CFWL_MonthCalendarTP()55 CFWL_MonthCalendarTP::~CFWL_MonthCalendarTP() {
56 delete m_pThemeData;
57 }
IsValidWidget(IFWL_Widget * pWidget)58 FX_BOOL CFWL_MonthCalendarTP::IsValidWidget(IFWL_Widget* pWidget) {
59 if (!pWidget)
60 return FALSE;
61 return pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar;
62 }
SetThemeID(IFWL_Widget * pWidget,FX_DWORD dwThemeID,FX_BOOL bChildren)63 FX_DWORD CFWL_MonthCalendarTP::SetThemeID(IFWL_Widget* pWidget,
64 FX_DWORD dwThemeID,
65 FX_BOOL bChildren) {
66 if (m_pThemeData) {
67 SetThemeData(FWL_GetThemeColor(dwThemeID));
68 }
69 return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren);
70 }
DrawBackground(CFWL_ThemeBackground * pParams)71 FX_BOOL CFWL_MonthCalendarTP::DrawBackground(CFWL_ThemeBackground* pParams) {
72 if (!pParams)
73 return FALSE;
74 switch (pParams->m_iPart) {
75 case FWL_PART_MCD_Border: {
76 DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix);
77 break;
78 }
79 case FWL_PART_MCD_Edge: {
80 DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(),
81 &pParams->m_rtPart, &pParams->m_matrix);
82 break;
83 }
84 case FWL_PART_MCD_Background: {
85 DrawTotalBK(pParams, &pParams->m_matrix);
86 break;
87 }
88 case FWL_PART_MCD_Header: {
89 DrawHeadBk(pParams, &pParams->m_matrix);
90 break;
91 }
92 case FWL_PART_MCD_LBtn: {
93 #ifdef THEME_XPSimilar
94 FWLTHEME_STATE eState = GetState(pParams->m_dwStates);
95 DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart,
96 FWLTHEME_DIRECTION_Left, eState, &pParams->m_matrix);
97 #else
98 DrawLButton(pParams, &pParams->m_matrix);
99 #endif
100 break;
101 }
102 case FWL_PART_MCD_RBtn: {
103 #ifdef THEME_XPSimilar
104 FWLTHEME_STATE eState = GetState(pParams->m_dwStates);
105 DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart,
106 FWLTHEME_DIRECTION_Right, eState, &pParams->m_matrix);
107 #else
108 DrawRButton(pParams, &pParams->m_matrix);
109 #endif
110 break;
111 }
112 case FWL_PART_MCD_HSeparator: {
113 DrawHSeperator(pParams, &pParams->m_matrix);
114 break;
115 }
116 case FWL_PART_MCD_DatesIn: {
117 DrawDatesInBK(pParams, &pParams->m_matrix);
118 break;
119 }
120 case FWL_PART_MCD_TodayCircle: {
121 DrawTodayCircle(pParams, &pParams->m_matrix);
122 break;
123 }
124 case FWL_PART_MCD_DateInCircle: {
125 DrawDatesInCircle(pParams, &pParams->m_matrix);
126 break;
127 }
128 case FWL_PART_MCD_WeekNumSep: {
129 DrawWeekNumSep(pParams, &pParams->m_matrix);
130 break;
131 }
132 default: {}
133 }
134 return TRUE;
135 }
DrawText(CFWL_ThemeText * pParams)136 FX_BOOL CFWL_MonthCalendarTP::DrawText(CFWL_ThemeText* pParams) {
137 if (!m_pTextOut)
138 return FALSE;
139 if ((pParams->m_iPart == FWL_PART_MCD_DatesIn) &&
140 !(pParams->m_dwStates & FWL_ITEMSTATE_MCD_Flag) &&
141 (pParams->m_dwStates &
142 (FWL_PARTSTATE_MCD_Hovered | FWL_PARTSTATE_MCD_Selected))) {
143 m_pTextOut->SetTextColor(0xFFFFFFFF);
144 } else if (pParams->m_iPart == FWL_PART_MCD_Caption) {
145 m_pTextOut->SetTextColor(m_pThemeData->clrCaption);
146 } else {
147 m_pTextOut->SetTextColor(0xFF000000);
148 }
149 return CFWL_WidgetTP::DrawText(pParams);
150 }
GetCapacity(CFWL_ThemePart * pThemePart,FX_DWORD dwCapacity)151 void* CFWL_MonthCalendarTP::GetCapacity(CFWL_ThemePart* pThemePart,
152 FX_DWORD dwCapacity) {
153 FX_BOOL bDefPro = FALSE;
154 FX_BOOL bDwordVal = FALSE;
155 switch (dwCapacity) {
156 case FWL_WGTCAPACITY_MC_HEADER_WIDTH: {
157 m_fValue = FWL_THEMECAPACITY_MC_HEADER_WIDTH;
158 break;
159 }
160 case FWL_WGTCAPACITY_MC_HEADER_Height: {
161 m_fValue = FWL_THEMECAPACITY_MC_HEADER_HEIGHT;
162 break;
163 }
164 case FWL_WGTCAPACITY_MC_HEADER_BTN_WIDTH: {
165 m_fValue = FWL_THEMECAPACITY_MC_HEADER_BTN_WIDTH;
166 break;
167 }
168 case FWL_WGTCAPACITY_MC_HEADER_BTN_HEIGHT: {
169 m_fValue = FWL_THEMECAPACITY_MC_HEADER_BTN_HEIGHT;
170 break;
171 }
172 case FWL_WGTCAPACITY_MC_HEADER_BTN_HMARGIN: {
173 bDwordVal = TRUE;
174 m_dwValue = FWL_THEMECAPACITY_MC_HEADER_BTN_HMARGIN;
175 break;
176 }
177 case FWL_WGTCAPACITY_MC_HEADER_BTN_VMARGIN: {
178 m_fValue = FWL_THEMECAPACITY_MC_HEADER_BTN_VMARGIN;
179 break;
180 }
181 case FWL_WGTCAPACITY_MC_HEADER_TEXTWIDHT: {
182 m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXTWIDHT;
183 break;
184 }
185 case FWL_WGTCAPACITY_MC_HEADER_TEXTHEIGHT: {
186 m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXTHEIGHT;
187 break;
188 }
189 case FWL_WGTCAPACITY_MC_HEADER_TEXT_HMARGIN: {
190 m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXT_HMARGIN;
191 break;
192 }
193 case FWL_WGTCAPACITY_MC_HEADER_TEXT_VMARGIN: {
194 m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXT_VMARGIN;
195 break;
196 }
197 case FWL_WGTCAPACITY_MC_HSEP_WIDTH: {
198 m_fValue = FWL_THEMECAPACITY_MC_HSEP_WIDTH;
199 break;
200 }
201 case FWL_WGTCAPACITY_MC_HSEP_HEIGHT: {
202 m_fValue = FWL_THEMECAPACITY_MC_HSEP_HEIGHT;
203 break;
204 }
205 case FWL_WGTCAPACITY_MC_VSEP_WIDTH: {
206 m_fValue = FWL_THEMECAPACITY_MC_VSEP_WIDTH;
207 break;
208 }
209 case FWL_WGTCAPACITY_MC_VSEP_HEIGHT: {
210 m_fValue = FWL_THEMECAPACITY_MC_VSEP_HEIGHT;
211 break;
212 }
213 case FWL_WGTCAPACITY_MC_WEEKNUM_WIDTH: {
214 m_fValue = FWL_THEMECAPACITY_MC_WEEKNUM_WIDTH;
215 break;
216 }
217 case FWL_WGTCAPACITY_MC_WEEKNUM_HEIGHT: {
218 m_fValue = FWL_THEMECAPACITY_MC_WEEKNUM_HEIGHT;
219 break;
220 }
221 case FWL_WGTCAPACITY_MC_WEEK_WIDTH: {
222 m_fValue = FWL_THEMECAPACITY_MC_WEEK_WIDTH;
223 break;
224 }
225 case FWL_WGTCAPACITY_MC_WEEK_HEIGHT: {
226 m_fValue = FWL_THEMECAPACITY_MC_WEEK_HEIGHT;
227 break;
228 }
229 case FWL_WGTCAPACITY_MC_SEP_DOFFSET: {
230 m_fValue = FWL_THEMECAPACITY_MC_SEP_DOFFSET;
231 break;
232 }
233 case FWL_WGTCAPACITY_MC_SEP_X: {
234 m_fValue = FWL_THEMECAPACITY_MC_SEP_X;
235 break;
236 }
237 case FWL_WGTCAPACITY_MC_SEP_Y: {
238 m_fValue = FWL_THEMECAPACITY_MC_SEP_Y;
239 break;
240 }
241 case FWL_WGTCAPACITY_MC_DATES_CELL_WIDTH: {
242 m_fValue = FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH;
243 break;
244 }
245 case FWL_WGTCAPACITY_MC_DATES_CELL_HEIGHT: {
246 m_fValue = FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT;
247 break;
248 }
249 case FWL_WGTCAPACITY_MC_TODAY_WIDHT: {
250 m_fValue = FWL_THEMECAPACITY_MC_TODAY_WIDHT;
251 break;
252 }
253 case FWL_WGTCAPACITY_MC_TODAY_HEIGHT: {
254 m_fValue = FWL_THEMECAPACITY_MC_TODAY_HEIGHT;
255 break;
256 }
257 case FWL_WGTCAPACITY_MC_TODAY_FLAG_WIDHT: {
258 m_fValue = FWL_THEMECAPACITY_MC_TODAY_FLAG_WIDHT;
259 break;
260 }
261 case FWL_WGTCAPACITY_MC_WIDTH: {
262 m_fValue = FWL_MC_WIDTH;
263 break;
264 }
265 case FWL_WGTCAPACITY_MC_HEIGHT: {
266 m_fValue = FWL_MC_HEIGHT;
267 break;
268 }
269 case FWL_MCCAPACITY_Sun: {
270 wsResource = L"Sun";
271 return &wsResource;
272 }
273 case FWL_MCCAPACITY_Mon: {
274 wsResource = L"Mon";
275 return &wsResource;
276 }
277 case FWL_MCCAPACITY_Tue: {
278 wsResource = L"Tue";
279 return &wsResource;
280 }
281 case FWL_MCCAPACITY_Wed: {
282 wsResource = L"Wed";
283 return &wsResource;
284 }
285 case FWL_MCCAPACITY_Thu: {
286 wsResource = L"Thu";
287 return &wsResource;
288 }
289 case FWL_MCCAPACITY_Fri: {
290 wsResource = L"Fri";
291 return &wsResource;
292 }
293 case FWL_MCCAPACITY_Sat: {
294 wsResource = L"Sat";
295 return &wsResource;
296 }
297 case FWL_MCCAPACITY_January: {
298 wsResource = L"January";
299 return &wsResource;
300 }
301 case FWL_MCCAPACITY_February: {
302 wsResource = L"February";
303 return &wsResource;
304 }
305 case FWL_MCCAPACITY_March: {
306 wsResource = L"March";
307 return &wsResource;
308 }
309 case FWL_MCCAPACITY_April: {
310 wsResource = L"April";
311 return &wsResource;
312 }
313 case FWL_MCCAPACITY_May: {
314 wsResource = L"May";
315 return &wsResource;
316 }
317 case FWL_MCCAPACITY_June: {
318 wsResource = L"June";
319 return &wsResource;
320 }
321 case FWL_MCCAPACITY_July: {
322 wsResource = L"July";
323 return &wsResource;
324 }
325 case FWL_MCCAPACITY_August: {
326 wsResource = L"August";
327 return &wsResource;
328 }
329 case FWL_MCCAPACITY_September: {
330 wsResource = L"September";
331 return &wsResource;
332 }
333 case FWL_MCCAPACITY_October: {
334 wsResource = L"October";
335 return &wsResource;
336 }
337 case FWL_MCCAPACITY_November: {
338 wsResource = L"November";
339 return &wsResource;
340 }
341 case FWL_MCCAPACITY_December: {
342 wsResource = L"December";
343 return &wsResource;
344 }
345 case FWL_MCCAPACITY_Today: {
346 wsResource = L"Today";
347 return &wsResource;
348 }
349 default: { bDefPro = TRUE; }
350 }
351 if (!bDefPro) {
352 if (bDwordVal) {
353 return &m_dwValue;
354 }
355 return &m_fValue;
356 }
357 return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity);
358 }
Initialize()359 FWL_ERR CFWL_MonthCalendarTP::Initialize() {
360 InitTTO();
361 return CFWL_WidgetTP::Initialize();
362 }
Finalize()363 FWL_ERR CFWL_MonthCalendarTP::Finalize() {
364 FinalizeTTO();
365 return CFWL_WidgetTP::Finalize();
366 }
DrawTotalBK(CFWL_ThemeBackground * pParams,CFX_Matrix * pMatrix)367 FX_BOOL CFWL_MonthCalendarTP::DrawTotalBK(CFWL_ThemeBackground* pParams,
368 CFX_Matrix* pMatrix) {
369 CFX_Path path;
370 path.Create();
371 CFX_RectF rtTotal(pParams->m_rtPart);
372 path.AddRectangle(rtTotal.left, rtTotal.top, rtTotal.width, rtTotal.height);
373 pParams->m_pGraphics->SaveGraphState();
374 CFX_Color clrBK(m_pThemeData->clrBK);
375 pParams->m_pGraphics->SetFillColor(&clrBK);
376 pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
377 pParams->m_pGraphics->RestoreGraphState();
378 return TRUE;
379 }
DrawHeadBk(CFWL_ThemeBackground * pParams,CFX_Matrix * pMatrix)380 FX_BOOL CFWL_MonthCalendarTP::DrawHeadBk(CFWL_ThemeBackground* pParams,
381 CFX_Matrix* pMatrix) {
382 CFX_Path path;
383 path.Create();
384 CFX_RectF rtHead = pParams->m_rtPart;
385 path.AddRectangle(rtHead.left, rtHead.top, rtHead.width, rtHead.height);
386 pParams->m_pGraphics->SaveGraphState();
387 CFX_Color clrHeadBK(m_pThemeData->clrBK);
388 pParams->m_pGraphics->SetFillColor(&clrHeadBK);
389 pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
390 pParams->m_pGraphics->RestoreGraphState();
391 return TRUE;
392 }
DrawLButton(CFWL_ThemeBackground * pParams,CFX_Matrix * pMatrix)393 FX_BOOL CFWL_MonthCalendarTP::DrawLButton(CFWL_ThemeBackground* pParams,
394 CFX_Matrix* pMatrix) {
395 CFX_Path path;
396 path.Create();
397 CFX_RectF rtLBtn;
398 rtLBtn = pParams->m_rtPart;
399 path.AddRectangle(rtLBtn.left, rtLBtn.top, rtLBtn.width, rtLBtn.height);
400 pParams->m_pGraphics->SaveGraphState();
401 CFX_Color clrLBtnEdge(ArgbEncode(0xff, 205, 219, 243));
402 pParams->m_pGraphics->SetStrokeColor(&clrLBtnEdge);
403 pParams->m_pGraphics->StrokePath(&path, pMatrix);
404 if ((pParams->m_dwStates & FWL_PARTSTATE_MCD_Pressed) ==
405 FWL_PARTSTATE_MCD_Pressed) {
406 CFX_Color clrLBtnFill(ArgbEncode(0xff, 174, 198, 242));
407 pParams->m_pGraphics->SetFillColor(&clrLBtnFill);
408 pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
409 } else {
410 CFX_Color clrLBtnFill(ArgbEncode(0xff, 227, 235, 249));
411 pParams->m_pGraphics->SetFillColor(&clrLBtnFill);
412 pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
413 }
414 path.Clear();
415 path.MoveTo(rtLBtn.left + rtLBtn.Width() / 3 * 2,
416 rtLBtn.top + rtLBtn.height / 4);
417 path.LineTo(rtLBtn.left + rtLBtn.Width() / 3, rtLBtn.top + rtLBtn.height / 2);
418 path.LineTo(rtLBtn.left + rtLBtn.Width() / 3 * 2,
419 rtLBtn.bottom() - rtLBtn.height / 4);
420 CFX_Color clrFlag(ArgbEncode(0xff, 50, 104, 205));
421 pParams->m_pGraphics->SetStrokeColor(&clrFlag);
422 pParams->m_pGraphics->StrokePath(&path, pMatrix);
423 pParams->m_pGraphics->RestoreGraphState();
424 return TRUE;
425 }
DrawRButton(CFWL_ThemeBackground * pParams,CFX_Matrix * pMatrix)426 FX_BOOL CFWL_MonthCalendarTP::DrawRButton(CFWL_ThemeBackground* pParams,
427 CFX_Matrix* pMatrix) {
428 CFX_Path path;
429 path.Create();
430 CFX_RectF rtRBtn;
431 rtRBtn = pParams->m_rtPart;
432 path.AddRectangle(rtRBtn.left, rtRBtn.top, rtRBtn.width, rtRBtn.height);
433 pParams->m_pGraphics->SaveGraphState();
434 CFX_Color clrRBtnEdge(ArgbEncode(0xff, 205, 219, 243));
435 pParams->m_pGraphics->SetStrokeColor(&clrRBtnEdge);
436 pParams->m_pGraphics->StrokePath(&path, pMatrix);
437 if ((pParams->m_dwStates & FWL_PARTSTATE_MCD_Pressed) ==
438 FWL_PARTSTATE_MCD_Pressed) {
439 CFX_Color clrRBtnFill(ArgbEncode(0xff, 174, 198, 242));
440 pParams->m_pGraphics->SetFillColor(&clrRBtnFill);
441 pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
442 } else {
443 CFX_Color clrRBtnFill(ArgbEncode(0xff, 227, 235, 249));
444 pParams->m_pGraphics->SetFillColor(&clrRBtnFill);
445 pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
446 }
447 path.Clear();
448 path.MoveTo(rtRBtn.left + rtRBtn.Width() / 3, rtRBtn.top + rtRBtn.height / 4);
449 path.LineTo(rtRBtn.left + rtRBtn.Width() / 3 * 2,
450 rtRBtn.top + rtRBtn.height / 2);
451 path.LineTo(rtRBtn.left + rtRBtn.Width() / 3,
452 rtRBtn.bottom() - rtRBtn.height / 4);
453 CFX_Color clrFlag(ArgbEncode(0xff, 50, 104, 205));
454 pParams->m_pGraphics->SetStrokeColor(&clrFlag);
455 pParams->m_pGraphics->StrokePath(&path, pMatrix);
456 pParams->m_pGraphics->RestoreGraphState();
457 return TRUE;
458 }
DrawHSeperator(CFWL_ThemeBackground * pParams,CFX_Matrix * pMatrix)459 FX_BOOL CFWL_MonthCalendarTP::DrawHSeperator(CFWL_ThemeBackground* pParams,
460 CFX_Matrix* pMatrix) {
461 CFX_Path path;
462 path.Create();
463 CFX_RectF rtHSep;
464 rtHSep = pParams->m_rtPart;
465 path.MoveTo(rtHSep.left, rtHSep.top + rtHSep.height / 2);
466 path.LineTo(rtHSep.right(), rtHSep.top + rtHSep.height / 2);
467 pParams->m_pGraphics->SaveGraphState();
468 CFX_Color clrHSep(m_pThemeData->clrSeperator);
469 pParams->m_pGraphics->SetStrokeColor(&clrHSep);
470 pParams->m_pGraphics->StrokePath(&path, pMatrix);
471 pParams->m_pGraphics->RestoreGraphState();
472 return TRUE;
473 }
DrawWeekNumSep(CFWL_ThemeBackground * pParams,CFX_Matrix * pMatrix)474 FX_BOOL CFWL_MonthCalendarTP::DrawWeekNumSep(CFWL_ThemeBackground* pParams,
475 CFX_Matrix* pMatrix) {
476 CFX_Path path;
477 path.Create();
478 CFX_RectF rtWeekSep;
479 rtWeekSep = pParams->m_rtPart;
480 path.MoveTo(rtWeekSep.left, rtWeekSep.top);
481 path.LineTo(rtWeekSep.left, rtWeekSep.bottom());
482 pParams->m_pGraphics->SaveGraphState();
483 CFX_Color clrHSep(m_pThemeData->clrSeperator);
484 pParams->m_pGraphics->SetStrokeColor(&clrHSep);
485 pParams->m_pGraphics->StrokePath(&path, pMatrix);
486 pParams->m_pGraphics->RestoreGraphState();
487 return TRUE;
488 }
DrawDatesInBK(CFWL_ThemeBackground * pParams,CFX_Matrix * pMatrix)489 FX_BOOL CFWL_MonthCalendarTP::DrawDatesInBK(CFWL_ThemeBackground* pParams,
490 CFX_Matrix* pMatrix) {
491 pParams->m_pGraphics->SaveGraphState();
492 if (pParams->m_dwStates & FWL_PARTSTATE_MCD_Selected) {
493 CFX_Path path;
494 path.Create();
495 CFX_RectF rtSelDay;
496 rtSelDay = pParams->m_rtPart;
497 path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width,
498 rtSelDay.height);
499 CFX_Color clrSelDayBK;
500 clrSelDayBK = m_pThemeData->clrDatesSelectedBK;
501 pParams->m_pGraphics->SetFillColor(&clrSelDayBK);
502 pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
503 } else if (pParams->m_dwStates & FWL_PARTSTATE_MCD_Hovered) {
504 CFX_Path path;
505 path.Create();
506 CFX_RectF rtSelDay;
507 rtSelDay = pParams->m_rtPart;
508 path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width,
509 rtSelDay.height);
510 CFX_Color clrSelDayBK;
511 clrSelDayBK = m_pThemeData->clrDatesHoverBK;
512 pParams->m_pGraphics->SetFillColor(&clrSelDayBK);
513 pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix);
514 }
515 pParams->m_pGraphics->RestoreGraphState();
516 return FALSE;
517 }
DrawDatesInCircle(CFWL_ThemeBackground * pParams,CFX_Matrix * pMatrix)518 FX_BOOL CFWL_MonthCalendarTP::DrawDatesInCircle(CFWL_ThemeBackground* pParams,
519 CFX_Matrix* pMatrix) {
520 CFX_Path path;
521 path.Create();
522 CFX_RectF rtSelDay;
523 rtSelDay = pParams->m_rtPart;
524 path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width,
525 rtSelDay.height);
526 pParams->m_pGraphics->SaveGraphState();
527 CFX_Color clrSelDayBK;
528 clrSelDayBK = m_pThemeData->clrDatesCircle;
529 pParams->m_pGraphics->SetStrokeColor(&clrSelDayBK);
530 pParams->m_pGraphics->StrokePath(&path, pMatrix);
531 pParams->m_pGraphics->RestoreGraphState();
532 return TRUE;
533 }
DrawTodayCircle(CFWL_ThemeBackground * pParams,CFX_Matrix * pMatrix)534 FX_BOOL CFWL_MonthCalendarTP::DrawTodayCircle(CFWL_ThemeBackground* pParams,
535 CFX_Matrix* pMatrix) {
536 CFX_Path path;
537 path.Create();
538 CFX_RectF rtTodayCircle;
539 rtTodayCircle = pParams->m_rtPart;
540 path.AddRectangle(rtTodayCircle.left, rtTodayCircle.top, rtTodayCircle.width,
541 rtTodayCircle.height);
542 pParams->m_pGraphics->SaveGraphState();
543 CFX_Color clrTodayCircle;
544 clrTodayCircle = m_pThemeData->clrDatesCircle;
545 pParams->m_pGraphics->SetStrokeColor(&clrTodayCircle);
546 pParams->m_pGraphics->StrokePath(&path, pMatrix);
547 pParams->m_pGraphics->RestoreGraphState();
548 return TRUE;
549 }
GetState(FX_DWORD dwFWLStates)550 FWLTHEME_STATE CFWL_MonthCalendarTP::GetState(FX_DWORD dwFWLStates) {
551 if (dwFWLStates & FWL_PARTSTATE_MCD_Hovered) {
552 return FWLTHEME_STATE_Hover;
553 } else if (dwFWLStates & FWL_PARTSTATE_MCD_Pressed) {
554 return FWLTHEME_STATE_Pressed;
555 }
556 return FWLTHEME_STATE_Normal;
557 }
SetThemeData(FX_DWORD dwThemeID)558 void CFWL_MonthCalendarTP::SetThemeData(FX_DWORD dwThemeID) {
559 if (dwThemeID == 0) {
560 m_pThemeData->clrCaption = ArgbEncode(0xff, 0, 153, 255);
561 m_pThemeData->clrSeperator = ArgbEncode(0xff, 141, 161, 239);
562 m_pThemeData->clrDatesHoverBK = ArgbEncode(0xff, 193, 211, 251);
563 m_pThemeData->clrDatesSelectedBK = ArgbEncode(0xff, 173, 188, 239);
564 m_pThemeData->clrDatesCircle = ArgbEncode(0xff, 103, 144, 209);
565 m_pThemeData->clrToday = ArgbEncode(0xff, 0, 0, 0);
566 m_pThemeData->clrBK = ArgbEncode(0xff, 255, 255, 255);
567 } else {
568 m_pThemeData->clrCaption = ArgbEncode(0xff, 128, 128, 0);
569 m_pThemeData->clrSeperator = ArgbEncode(0xff, 128, 128, 64);
570 m_pThemeData->clrDatesHoverBK = ArgbEncode(0xff, 217, 220, 191);
571 m_pThemeData->clrDatesSelectedBK = ArgbEncode(0xff, 204, 208, 183);
572 m_pThemeData->clrDatesCircle = ArgbEncode(0xff, 128, 128, 0);
573 m_pThemeData->clrToday = ArgbEncode(0xff, 0, 0, 0);
574 m_pThemeData->clrBK = ArgbEncode(0xff, 255, 255, 255);
575 }
576 }
577