blob: 2e8bfb58d1bd093b6e251b2d0df4c3f26ec4a958 [file] [log] [blame]
// 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;
}