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" 8CFWL_DateTimePickerTP::CFWL_DateTimePickerTP() { 9 m_pThemeData = new DTPThemeData; 10 initThemeData(); 11} 12CFWL_DateTimePickerTP::~CFWL_DateTimePickerTP() { 13 delete m_pThemeData; 14} 15FX_BOOL CFWL_DateTimePickerTP::IsValidWidget(IFWL_Widget* pWidget) { 16 if (!pWidget) 17 return FALSE; 18 return pWidget->GetClassID() == FWL_CLASSHASH_DateTimePicker; 19} 20FX_BOOL CFWL_DateTimePickerTP::DrawBackground(CFWL_ThemeBackground* pParams) { 21 if (!pParams) 22 return FALSE; 23 switch (pParams->m_iPart) { 24 case FWL_PART_DTP_Border: { 25 DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); 26 break; 27 } 28 case FWL_PART_DTP_Edge: { 29 DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), 30 &pParams->m_rtPart, &pParams->m_matrix); 31 break; 32 } 33 case FWL_PART_DTP_DropDownButton: { 34 DrawDropDownButton(pParams, &pParams->m_matrix); 35 break; 36 } 37 default: {} 38 } 39 return TRUE; 40} 41#ifdef THEME_XPSimilar 42void CFWL_DateTimePickerTP::DrawDropDownButton(CFWL_ThemeBackground* pParams, 43 CFX_Matrix* pMatrix) { 44 FX_DWORD dwStates = pParams->m_dwStates; 45 dwStates &= 0x03; 46 FWLTHEME_STATE eState = FWLTHEME_STATE_Normal; 47 switch (eState & dwStates) { 48 case FWL_PARTSTATE_DTP_Normal: { 49 eState = FWLTHEME_STATE_Normal; 50 break; 51 } 52 case FWL_PARTSTATE_DTP_Hovered: { 53 eState = FWLTHEME_STATE_Hover; 54 break; 55 } 56 case FWL_PARTSTATE_DTP_Pressed: { 57 eState = FWLTHEME_STATE_Pressed; 58 break; 59 } 60 case FWL_PARTSTATE_DTP_Disabled: { 61 eState = FWLTHEME_STATE_Disabale; 62 break; 63 } 64 default: {} 65 } 66 DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart, 67 FWLTHEME_DIRECTION_Down, eState, pMatrix); 68} 69#else 70void CFWL_DateTimePickerTP::DrawDropDownButton(CFWL_ThemeBackground* pParams, 71 CFX_Matrix* pMatrix) { 72 FX_BOOL bPressed = ((pParams->m_dwStates & FWL_PARTSTATE_DTP_Pressed) == 73 FWL_PARTSTATE_DTP_Pressed); 74 FX_FLOAT fWidth = bPressed ? 1.0f : 2.0f; 75 FWLTHEME_EDGE eType = bPressed ? FWLTHEME_EDGE_Flat : FWLTHEME_EDGE_Raised; 76 Draw3DRect(pParams->m_pGraphics, eType, fWidth, &pParams->m_rtPart, 77 FWLTHEME_COLOR_EDGELT1, FWLTHEME_COLOR_EDGELT2, 78 FWLTHEME_COLOR_EDGERB1, FWLTHEME_COLOR_EDGERB2, pMatrix); 79 CFX_Path path; 80 path.Create(); 81 path.AddRectangle(pParams->m_rtPart.left + fWidth, 82 pParams->m_rtPart.top + fWidth, 83 pParams->m_rtPart.width - 2 * fWidth, 84 pParams->m_rtPart.height - 2 * fWidth); 85 pParams->m_pGraphics->SaveGraphState(); 86 CFX_Color crFill(FWLTHEME_COLOR_Background); 87 pParams->m_pGraphics->SetFillColor(&crFill); 88 pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); 89 pParams->m_pGraphics->RestoreGraphState(); 90 FX_ARGB argbFill = ArgbEncode(255, 77, 97, 133); 91 switch (pParams->m_dwStates & 0x03) { 92 case FWL_PARTSTATE_DTP_Normal: { 93 } 94 case FWL_PARTSTATE_DTP_Hovered: { 95 } 96 case FWL_PARTSTATE_DTP_Pressed: { 97 argbFill = 0xFF000000; 98 break; 99 } 100 case FWL_PARTSTATE_DTP_Disabled: { 101 argbFill = 0xFFF0F0F0; 102 break; 103 } 104 } 105 DrawArrow(pParams->m_pGraphics, &pParams->m_rtPart, FWLTHEME_DIRECTION_Down, 106 argbFill, bPressed, pMatrix); 107} 108#endif 109void CFWL_DateTimePickerTP::initThemeData() { 110 FX_DWORD* pData = (FX_DWORD*)&m_pThemeData->BoxBkColor; 111 *pData++ = 0, *pData++ = 0, *pData++ = ArgbEncode(255, 220, 220, 215), 112 *pData++ = ArgbEncode(255, 255, 255, 255), 113 *pData++ = ArgbEncode(255, 255, 240, 207), 114 *pData++ = ArgbEncode(255, 248, 179, 48), 115 *pData++ = ArgbEncode(255, 176, 176, 167), 116 *pData++ = ArgbEncode(255, 241, 239, 239), 117 *pData++ = ArgbEncode(255, 255, 255, 255), 118 *pData++ = ArgbEncode(255, 255, 255, 255), 119 *pData++ = ArgbEncode(255, 220, 220, 215), 120 *pData++ = ArgbEncode(255, 255, 255, 255), 121 *pData++ = ArgbEncode(255, 255, 240, 207), 122 *pData++ = ArgbEncode(255, 248, 179, 48), 123 *pData++ = ArgbEncode(255, 176, 176, 167), 124 *pData++ = ArgbEncode(255, 241, 239, 239), 125 *pData++ = ArgbEncode(255, 255, 255, 255), 126 *pData++ = ArgbEncode(255, 255, 255, 255), 127 *pData++ = ArgbEncode(255, 220, 220, 215), 128 *pData++ = ArgbEncode(255, 255, 255, 255), 129 *pData++ = ArgbEncode(255, 255, 240, 207), 130 *pData++ = ArgbEncode(255, 248, 179, 48), 131 *pData++ = ArgbEncode(255, 176, 176, 167), 132 *pData++ = ArgbEncode(255, 241, 239, 239), 133 *pData++ = ArgbEncode(255, 255, 255, 255), 134 *pData++ = ArgbEncode(255, 255, 255, 255); 135} 136