xref: /reactos/base/applications/calc/theme.c (revision 0b107f2e)
1 /*
2  * ReactOS Calc (Theming support)
3  *
4  * Copyright 2007-2017, Carlo Bramini
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  */
20 
21 #include "calc.h"
22 
23 #define GET_CB(name) \
24     calc_##name = (type_##name)GetProcAddress(hUxTheme, #name); \
25     if (calc_##name == NULL) calc_##name = dummy_##name;
26 
27 static HTHEME WINAPI
28 dummy_OpenThemeData(HWND hwnd, const WCHAR *pszClassList);
29 
30 static HRESULT WINAPI
31 dummy_CloseThemeData(HTHEME hTheme);
32 
33 static HRESULT WINAPI
34 dummy_DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId,
35     const RECT *prc, const RECT *prcClip);
36 
37 static BOOL WINAPI
38 dummy_IsAppThemed(void);
39 
40 static BOOL WINAPI
41 dummy_IsThemeActive(void);
42 
43 static BOOL WINAPI
44 dummy_IsThemeBackgroundPartiallyTransparent(HTHEME hTheme, int iPartId, int iStateId);
45 
46 static HRESULT WINAPI
47 dummy_DrawThemeParentBackground(HWND hWnd, HDC hdc, RECT *prc);
48 
49 
50 type_OpenThemeData       calc_OpenThemeData       = dummy_OpenThemeData;
51 type_CloseThemeData      calc_CloseThemeData      = dummy_CloseThemeData;
52 type_DrawThemeBackground calc_DrawThemeBackground = dummy_DrawThemeBackground;
53 type_IsAppThemed         calc_IsAppThemed         = dummy_IsAppThemed;
54 type_IsThemeActive       calc_IsThemeActive       = dummy_IsThemeActive;
55 type_IsThemeBackgroundPartiallyTransparent calc_IsThemeBackgroundPartiallyTransparent = \
56     dummy_IsThemeBackgroundPartiallyTransparent;
57 type_DrawThemeParentBackground calc_DrawThemeParentBackground = \
58     dummy_DrawThemeParentBackground;
59 
60 static HMODULE hUxTheme;
61 
62 static HTHEME WINAPI
dummy_OpenThemeData(HWND hwnd,const WCHAR * pszClassList)63 dummy_OpenThemeData(HWND hwnd, const WCHAR* pszClassList)
64 {
65     return NULL;
66 }
67 
68 static HRESULT WINAPI
dummy_CloseThemeData(HTHEME hTheme)69 dummy_CloseThemeData(HTHEME hTheme)
70 {
71     return E_NOTIMPL;
72 }
73 
74 static HRESULT WINAPI
dummy_DrawThemeBackground(HTHEME hTheme,HDC hdc,int iPartId,int iStateId,const RECT * prc,const RECT * prcClip)75 dummy_DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId,
76             const RECT* prc, const RECT* prcClip)
77 {
78     return E_NOTIMPL;
79 }
80 
81 static BOOL WINAPI
dummy_IsAppThemed(void)82 dummy_IsAppThemed(void)
83 {
84     return FALSE;
85 }
86 
87 static BOOL WINAPI
dummy_IsThemeActive(void)88 dummy_IsThemeActive(void)
89 {
90     return FALSE;
91 }
92 
93 static BOOL WINAPI
dummy_IsThemeBackgroundPartiallyTransparent(HTHEME hTheme,int iPartId,int iStateId)94 dummy_IsThemeBackgroundPartiallyTransparent(HTHEME hTheme, int iPartId, int iStateId)
95 {
96     return FALSE;
97 }
98 
99 static HRESULT WINAPI
dummy_DrawThemeParentBackground(HWND hWnd,HDC hdc,RECT * prc)100 dummy_DrawThemeParentBackground(HWND hWnd, HDC hdc, RECT *prc)
101 {
102     return E_NOTIMPL;
103 }
104 
Theme_Start(HINSTANCE hInstance)105 void Theme_Start(HINSTANCE hInstance)
106 {
107     hUxTheme = LoadLibrary(_T("UXTHEME"));
108     if (hUxTheme == NULL)
109         return;
110 
111     GET_CB(OpenThemeData)
112     GET_CB(CloseThemeData)
113     GET_CB(DrawThemeBackground)
114     GET_CB(IsAppThemed)
115     GET_CB(IsThemeActive)
116     GET_CB(IsThemeBackgroundPartiallyTransparent)
117     GET_CB(DrawThemeParentBackground)
118 }
119 
Theme_Stop(void)120 void Theme_Stop(void)
121 {
122     if(hUxTheme == NULL)
123         return;
124 
125     FreeLibrary(hUxTheme);
126     hUxTheme = NULL;
127 }
128