void* CXFA_FWLTheme::GetCapacity(CFWL_ThemePart* pThemePart, CFWL_WidgetCapacity dwCapacity) { switch (dwCapacity) { case CFWL_WidgetCapacity::Font: { if (CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { return pWidget->GetDataAcc()->GetFDEFont(); } break; } case CFWL_WidgetCapacity::FontSize: { if (CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { m_fCapacity = pWidget->GetDataAcc()->GetFontSize(); return &m_fCapacity; } break; } case CFWL_WidgetCapacity::TextColor: { if (CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { m_dwCapacity = pWidget->GetDataAcc()->GetTextColor(); return &m_dwCapacity; } break; } case CFWL_WidgetCapacity::LineHeight: { if (CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { m_fCapacity = pWidget->GetDataAcc()->GetLineHeight(); return &m_fCapacity; } break; } case CFWL_WidgetCapacity::ScrollBarWidth: { m_fCapacity = 9; return &m_fCapacity; } case CFWL_WidgetCapacity::UIMargin: { CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget); if (pWidget) { CXFA_LayoutItem* pItem = pWidget; CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc(); pWidgetAcc->GetUIMargin(m_Rect); if (CXFA_Para para = pWidgetAcc->GetPara()) { m_Rect.left += para.GetMarginLeft(); if (pWidgetAcc->IsMultiLine()) { m_Rect.width += para.GetMarginRight(); } } if (!pItem->GetPrev()) { if (pItem->GetNext()) { m_Rect.height = 0; } } else if (!pItem->GetNext()) { m_Rect.top = 0; } else { m_Rect.top = 0; m_Rect.height = 0; } } return &m_Rect; } case CFWL_WidgetCapacity::SpaceAboveBelow: { CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget); if (pWidget) { CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc(); if (CXFA_Para para = pWidgetAcc->GetPara()) { m_SizeAboveBelow.x = para.GetSpaceAbove(); m_SizeAboveBelow.y = para.GetSpaceBelow(); } } return &m_SizeAboveBelow; } default: break; } int dwCapValue = static_cast<int>(dwCapacity); if (pThemePart->m_pWidget->GetClassID() == FWL_Type::MonthCalendar && dwCapValue >= static_cast<int>(CFWL_WidgetCapacity::Today) && dwCapValue <= static_cast<int>(CFWL_WidgetCapacity::December)) { if (CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { IXFA_AppProvider* pAppProvider = pWidget->GetAppProvider(); m_wsResource.clear(); switch (dwCapacity) { case CFWL_WidgetCapacity::Sun: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Sun, m_wsResource); break; case CFWL_WidgetCapacity::Mon: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Mon, m_wsResource); break; case CFWL_WidgetCapacity::Tue: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Tue, m_wsResource); break; case CFWL_WidgetCapacity::Wed: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Wed, m_wsResource); break; case CFWL_WidgetCapacity::Thu: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Thu, m_wsResource); break; case CFWL_WidgetCapacity::Fri: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Fri, m_wsResource); break; case CFWL_WidgetCapacity::Sat: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Sat, m_wsResource); break; case CFWL_WidgetCapacity::January: pAppProvider->LoadString(XFA_IDS_StringMonth_Jan, m_wsResource); break; case CFWL_WidgetCapacity::February: pAppProvider->LoadString(XFA_IDS_StringMonth_Feb, m_wsResource); break; case CFWL_WidgetCapacity::March: pAppProvider->LoadString(XFA_IDS_StringMonth_March, m_wsResource); break; case CFWL_WidgetCapacity::April: pAppProvider->LoadString(XFA_IDS_StringMonth_April, m_wsResource); break; case CFWL_WidgetCapacity::May: pAppProvider->LoadString(XFA_IDS_StringMonth_May, m_wsResource); break; case CFWL_WidgetCapacity::June: pAppProvider->LoadString(XFA_IDS_StringMonth_June, m_wsResource); break; case CFWL_WidgetCapacity::July: pAppProvider->LoadString(XFA_IDS_StringMonth_July, m_wsResource); break; case CFWL_WidgetCapacity::August: pAppProvider->LoadString(XFA_IDS_StringMonth_Aug, m_wsResource); break; case CFWL_WidgetCapacity::September: pAppProvider->LoadString(XFA_IDS_StringMonth_Sept, m_wsResource); break; case CFWL_WidgetCapacity::October: pAppProvider->LoadString(XFA_IDS_StringMonth_Oct, m_wsResource); break; case CFWL_WidgetCapacity::November: pAppProvider->LoadString(XFA_IDS_StringMonth_Nov, m_wsResource); break; case CFWL_WidgetCapacity::December: pAppProvider->LoadString(XFA_IDS_StringMonth_Dec, m_wsResource); break; case CFWL_WidgetCapacity::Today: pAppProvider->LoadString(XFA_IDS_String_Today, m_wsResource); break; default: break; } if (!m_wsResource.IsEmpty()) return &m_wsResource; } } return GetTheme(pThemePart->m_pWidget)->GetCapacity(pThemePart, dwCapacity); }