// Copyright 2014 PDFium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
#include "xfa/src/foxitlib.h" | |
FX_BOOL CFWL_Theme::IsValidWidget(IFWL_Widget* pWidget) { | |
return !!GetTheme(pWidget); | |
} | |
FX_DWORD CFWL_Theme::GetThemeID(IFWL_Widget* pWidget) { | |
return GetTheme(pWidget)->GetThemeID(pWidget); | |
} | |
FX_DWORD CFWL_Theme::SetThemeID(IFWL_Widget* pWidget, | |
FX_DWORD dwThemeID, | |
FX_BOOL bChildren) { | |
int32_t iCount = m_arrThemes.GetSize(); | |
FX_DWORD dwID; | |
for (int32_t i = 0; i < iCount; i++) { | |
CFWL_WidgetTP* pTheme = static_cast<CFWL_WidgetTP*>(m_arrThemes[i]); | |
dwID = pTheme->GetThemeID(pWidget); | |
pTheme->SetThemeID(pWidget, dwThemeID, FALSE); | |
} | |
return dwID; | |
} | |
FWL_ERR CFWL_Theme::GetThemeMatrix(IFWL_Widget* pWidget, CFX_Matrix& matrix) { | |
return FWL_ERR_Succeeded; | |
} | |
FWL_ERR CFWL_Theme::SetThemeMatrix(IFWL_Widget* pWidget, | |
const CFX_Matrix& matrix) { | |
return FWL_ERR_Succeeded; | |
} | |
FX_BOOL CFWL_Theme::DrawBackground(CFWL_ThemeBackground* pParams) { | |
CFWL_WidgetTP* pTheme = GetTheme(pParams->m_pWidget); | |
FXSYS_assert(pTheme); | |
return pTheme->DrawBackground(pParams); | |
} | |
FX_BOOL CFWL_Theme::DrawText(CFWL_ThemeText* pParams) { | |
CFWL_WidgetTP* pTheme = GetTheme(pParams->m_pWidget); | |
FXSYS_assert(pTheme); | |
return pTheme->DrawText(pParams); | |
} | |
void* CFWL_Theme::GetCapacity(CFWL_ThemePart* pThemePart, FX_DWORD dwCapacity) { | |
CFWL_WidgetTP* pTheme = GetTheme(pThemePart->m_pWidget); | |
FXSYS_assert(pTheme); | |
return pTheme->GetCapacity(pThemePart, dwCapacity); | |
} | |
FX_BOOL CFWL_Theme::IsCustomizedLayout(IFWL_Widget* pWidget) { | |
CFWL_WidgetTP* pTheme = GetTheme(pWidget); | |
FXSYS_assert(pTheme); | |
return pTheme->IsCustomizedLayout(pWidget); | |
} | |
FWL_ERR CFWL_Theme::GetPartRect(CFWL_ThemePart* pThemePart, CFX_RectF& rtPart) { | |
CFWL_WidgetTP* pTheme = GetTheme(pThemePart->m_pWidget); | |
FXSYS_assert(pTheme); | |
return pTheme->GetPartRect(pThemePart, rtPart); | |
} | |
FX_BOOL CFWL_Theme::IsInPart(CFWL_ThemePart* pThemePart, | |
FX_FLOAT fx, | |
FX_FLOAT fy) { | |
CFWL_WidgetTP* pTheme = GetTheme(pThemePart->m_pWidget); | |
FXSYS_assert(pTheme); | |
return pTheme->IsInPart(pThemePart, fx, fy); | |
} | |
FX_BOOL CFWL_Theme::CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect) { | |
CFWL_WidgetTP* pTheme = GetTheme(pParams->m_pWidget); | |
FXSYS_assert(pTheme); | |
return pTheme->CalcTextRect(pParams, rect); | |
} | |
FWL_ERR CFWL_Theme::Initialize() { | |
int32_t iCount = m_arrThemes.GetSize(); | |
for (int32_t i = 0; i < iCount; i++) { | |
CFWL_WidgetTP* pTheme = static_cast<CFWL_WidgetTP*>(m_arrThemes[i]); | |
pTheme->Initialize(); | |
} | |
FWLTHEME_Init(); | |
return FWL_ERR_Succeeded; | |
} | |
FWL_ERR CFWL_Theme::Finalize() { | |
int32_t iCount = m_arrThemes.GetSize(); | |
for (int32_t i = 0; i < iCount; i++) { | |
CFWL_WidgetTP* pTheme = static_cast<CFWL_WidgetTP*>(m_arrThemes[i]); | |
pTheme->Finalize(); | |
} | |
FWLTHEME_Release(); | |
return FWL_ERR_Succeeded; | |
} | |
CFWL_Theme::CFWL_Theme() { | |
CFWL_FormTP* pFormTP = new CFWL_FormTP; | |
CFWL_PushButtonTP* pPushButtonTP = new CFWL_PushButtonTP; | |
CFWL_CheckBoxTP* pCheckBoxTP = new CFWL_CheckBoxTP; | |
CFWL_ListBoxTP* pListBoxTP = new CFWL_ListBoxTP; | |
CFWL_PictureBoxTP* pPictureBoxTP = new CFWL_PictureBoxTP; | |
CFWL_ScrollBarTP* pSrollBarTP = new CFWL_ScrollBarTP; | |
CFWL_EditTP* pEditTP = new CFWL_EditTP; | |
CFWL_ComboBoxTP* pComboBoxTP = new CFWL_ComboBoxTP; | |
CFWL_BarcodeTP* pBarcodeTP = new CFWL_BarcodeTP; | |
CFWL_DateTimePickerTP* pDateTimePickerTP = new CFWL_DateTimePickerTP; | |
CFWL_MonthCalendarTP* pMonthCalendarTP = new CFWL_MonthCalendarTP; | |
CFWL_CaretTP* pCaretTP = new CFWL_CaretTP; | |
m_arrThemes.Add(pFormTP); | |
m_arrThemes.Add(pPushButtonTP); | |
m_arrThemes.Add(pCheckBoxTP); | |
m_arrThemes.Add(pListBoxTP); | |
m_arrThemes.Add(pPictureBoxTP); | |
m_arrThemes.Add(pSrollBarTP); | |
m_arrThemes.Add(pEditTP); | |
m_arrThemes.Add(pComboBoxTP); | |
m_arrThemes.Add(pBarcodeTP); | |
m_arrThemes.Add(pDateTimePickerTP); | |
m_arrThemes.Add(pMonthCalendarTP); | |
m_arrThemes.Add(pCaretTP); | |
} | |
CFWL_Theme::~CFWL_Theme() { | |
for (int32_t i = 0; i < m_arrThemes.GetSize(); i++) { | |
delete static_cast<CFWL_WidgetTP*>(m_arrThemes[i]); | |
} | |
m_arrThemes.RemoveAll(); | |
} | |
FWL_ERR CFWL_Theme::SetFont(IFWL_Widget* pWidget, | |
const FX_WCHAR* strFont, | |
FX_FLOAT fFontSize, | |
FX_ARGB rgbFont) { | |
int32_t iCount = m_arrThemes.GetSize(); | |
for (int32_t i = 0; i < iCount; i++) { | |
CFWL_WidgetTP* pTheme = static_cast<CFWL_WidgetTP*>(m_arrThemes[i]); | |
pTheme->SetFont(pWidget, strFont, fFontSize, rgbFont); | |
} | |
return FWL_ERR_Succeeded; | |
} | |
CFWL_WidgetTP* CFWL_Theme::GetTheme(IFWL_Widget* pWidget) { | |
int32_t iCount = m_arrThemes.GetSize(); | |
for (int32_t i = 0; i < iCount; i++) { | |
CFWL_WidgetTP* pTheme = static_cast<CFWL_WidgetTP*>(m_arrThemes[i]); | |
if (pTheme->IsValidWidget(pWidget)) { | |
return pTheme; | |
} | |
} | |
return NULL; | |
} |