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