Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fwl / src / lightwidget / theme.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #include "../../../foxitlib.h"\r
8 FX_BOOL CFWL_Theme::IsValidWidget(IFWL_Widget *pWidget)\r
9 {\r
10     CFWL_WidgetTP *pTheme = GetTheme(pWidget);\r
11     return pTheme != NULL;\r
12 }\r
13 FX_DWORD CFWL_Theme::GetThemeID(IFWL_Widget *pWidget)\r
14 {\r
15     CFWL_WidgetTP *pTheme = GetTheme(pWidget);\r
16     FXSYS_assert(pTheme);\r
17     return pTheme->GetThemeID(pWidget);\r
18 }\r
19 FX_DWORD CFWL_Theme::SetThemeID(IFWL_Widget *pWidget, FX_DWORD dwThemeID, FX_BOOL bChildren )\r
20 {\r
21     int32_t iCount = m_arrThemes.GetSize();\r
22     FX_DWORD dwID;\r
23     for (int32_t i = 0; i < iCount; i ++) {\r
24         CFWL_WidgetTP *pTheme = (CFWL_WidgetTP*)m_arrThemes[i];\r
25         dwID = pTheme->GetThemeID(pWidget);\r
26         pTheme->SetThemeID(pWidget, dwThemeID, FALSE);\r
27     }\r
28     return dwID;\r
29 }\r
30 FWL_ERR CFWL_Theme::GetThemeMatrix(IFWL_Widget *pWidget, CFX_Matrix &matrix)\r
31 {\r
32     return FWL_ERR_Succeeded;\r
33 }\r
34 FWL_ERR CFWL_Theme::SetThemeMatrix(IFWL_Widget *pWidget, const CFX_Matrix &matrix)\r
35 {\r
36     return FWL_ERR_Succeeded;\r
37 }\r
38 FX_BOOL CFWL_Theme::DrawBackground(CFWL_ThemeBackground *pParams)\r
39 {\r
40     CFWL_WidgetTP *pTheme = GetTheme(pParams->m_pWidget);\r
41     FXSYS_assert(pTheme);\r
42     return pTheme->DrawBackground(pParams);\r
43 }\r
44 FX_BOOL CFWL_Theme::DrawText(CFWL_ThemeText *pParams)\r
45 {\r
46     CFWL_WidgetTP *pTheme = GetTheme(pParams->m_pWidget);\r
47     FXSYS_assert(pTheme);\r
48     return pTheme->DrawText(pParams);\r
49 }\r
50 FX_LPVOID CFWL_Theme::GetCapacity(CFWL_ThemePart *pThemePart, FX_DWORD dwCapacity)\r
51 {\r
52     CFWL_WidgetTP *pTheme = GetTheme(pThemePart->m_pWidget);\r
53     FXSYS_assert(pTheme);\r
54     return pTheme->GetCapacity(pThemePart, dwCapacity);\r
55 }\r
56 FX_BOOL CFWL_Theme::IsCustomizedLayout(IFWL_Widget *pWidget)\r
57 {\r
58     CFWL_WidgetTP *pTheme = GetTheme(pWidget);\r
59     FXSYS_assert(pTheme);\r
60     return pTheme->IsCustomizedLayout(pWidget);\r
61 }\r
62 FWL_ERR CFWL_Theme::GetPartRect(CFWL_ThemePart* pThemePart, CFX_RectF &rtPart)\r
63 {\r
64     CFWL_WidgetTP *pTheme = GetTheme(pThemePart->m_pWidget);\r
65     FXSYS_assert(pTheme);\r
66     return pTheme->GetPartRect(pThemePart, rtPart);\r
67 }\r
68 FX_BOOL CFWL_Theme::IsInPart(CFWL_ThemePart* pThemePart, FX_FLOAT fx, FX_FLOAT fy)\r
69 {\r
70     CFWL_WidgetTP *pTheme = GetTheme(pThemePart->m_pWidget);\r
71     FXSYS_assert(pTheme);\r
72     return pTheme->IsInPart(pThemePart, fx, fy);\r
73 }\r
74 FX_BOOL CFWL_Theme::CalcTextRect(CFWL_ThemeText *pParams, CFX_RectF &rect)\r
75 {\r
76     CFWL_WidgetTP *pTheme = GetTheme(pParams->m_pWidget);\r
77     FXSYS_assert(pTheme);\r
78     return pTheme->CalcTextRect(pParams, rect);\r
79 }\r
80 FWL_ERR CFWL_Theme::Initialize()\r
81 {\r
82     int32_t iCount = m_arrThemes.GetSize();\r
83     for (int32_t i = 0; i < iCount; i ++) {\r
84         CFWL_WidgetTP *pTheme = (CFWL_WidgetTP*)m_arrThemes[i];\r
85         pTheme->Initialize();\r
86     }\r
87     FWLTHEME_Init();\r
88     return FWL_ERR_Succeeded;\r
89 }\r
90 FWL_ERR CFWL_Theme::Finalize()\r
91 {\r
92     int32_t iCount = m_arrThemes.GetSize();\r
93     for (int32_t i = 0; i < iCount; i ++) {\r
94         CFWL_WidgetTP *pTheme = (CFWL_WidgetTP*)m_arrThemes[i];\r
95         pTheme->Finalize();\r
96     }\r
97     FWLTHEME_Release();\r
98     return FWL_ERR_Succeeded;\r
99 }\r
100 CFWL_Theme::CFWL_Theme()\r
101 {\r
102     CFWL_FormTP *pFormTP = FX_NEW CFWL_FormTP;\r
103     CFWL_PushButtonTP           *pPushButtonTP = FX_NEW CFWL_PushButtonTP;\r
104     CFWL_CheckBoxTP                     *pCheckBoxTP = FX_NEW CFWL_CheckBoxTP;\r
105     CFWL_ListBoxTP                      *pListBoxTP = FX_NEW CFWL_ListBoxTP;\r
106     CFWL_PictureBoxTP           *pPictureBoxTP = FX_NEW CFWL_PictureBoxTP;\r
107     CFWL_ScrollBarTP            *pSrollBarTP = FX_NEW CFWL_ScrollBarTP;\r
108     CFWL_EditTP                         *pEditTP = FX_NEW CFWL_EditTP;\r
109     CFWL_ComboBoxTP                     *pComboBoxTP = FX_NEW CFWL_ComboBoxTP;\r
110     CFWL_BarcodeTP                      *pBarcodeTP = FX_NEW CFWL_BarcodeTP;\r
111     CFWL_DateTimePickerTP       *pDateTimePickerTP = FX_NEW CFWL_DateTimePickerTP;\r
112     CFWL_MonthCalendarTP        *pMonthCalendarTP = FX_NEW CFWL_MonthCalendarTP;\r
113     CFWL_CaretTP                        *pCaretTP = FX_NEW CFWL_CaretTP;\r
114     m_arrThemes.Add(pFormTP);\r
115     m_arrThemes.Add(pPushButtonTP);\r
116     m_arrThemes.Add(pCheckBoxTP);\r
117     m_arrThemes.Add(pListBoxTP);\r
118     m_arrThemes.Add(pPictureBoxTP);\r
119     m_arrThemes.Add(pSrollBarTP);\r
120     m_arrThemes.Add(pEditTP);\r
121     m_arrThemes.Add(pComboBoxTP);\r
122     m_arrThemes.Add(pBarcodeTP);\r
123     m_arrThemes.Add(pDateTimePickerTP);\r
124     m_arrThemes.Add(pMonthCalendarTP);\r
125     m_arrThemes.Add(pCaretTP);\r
126 }\r
127 CFWL_Theme::~CFWL_Theme()\r
128 {\r
129     int32_t iCount = m_arrThemes.GetSize();\r
130     for (int32_t i = 0; i < iCount; i ++) {\r
131         CFWL_WidgetTP *pTheme = (CFWL_WidgetTP*)m_arrThemes[i];\r
132         delete pTheme;\r
133     }\r
134     m_arrThemes.RemoveAll();\r
135 }\r
136 FWL_ERR CFWL_Theme::SetFont(IFWL_Widget *pWidget, FX_LPCWSTR strFont, FX_FLOAT fFontSize, FX_ARGB rgbFont)\r
137 {\r
138     int32_t iCount = m_arrThemes.GetSize();\r
139     for (int32_t i = 0; i < iCount; i ++) {\r
140         CFWL_WidgetTP *pTheme = (CFWL_WidgetTP*)m_arrThemes[i];\r
141         pTheme->SetFont(pWidget, strFont, fFontSize, rgbFont);\r
142     }\r
143     return FWL_ERR_Succeeded;\r
144 }\r
145 CFWL_WidgetTP* CFWL_Theme::GetTheme(IFWL_Widget* pWidget)\r
146 {\r
147     int32_t iCount = m_arrThemes.GetSize();\r
148     for (int32_t i = 0; i < iCount; i ++) {\r
149         CFWL_WidgetTP *pTheme = (CFWL_WidgetTP*)m_arrThemes[i];\r
150         if (pTheme->IsValidWidget(pWidget)) {\r
151             return pTheme;\r
152         }\r
153     }\r
154     return NULL;\r
155 }\r