• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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