aboutsummaryrefslogtreecommitdiff
path: root/Src/omBrowser/skinHelper.h
blob: 1b7dddfd7b98c6c4daeb96ca152c18a704329d4d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#ifndef NULLSOFT_WINAMP_SKIN_HELPER_HEADER
#define NULLSOFT_WINAMP_SKIN_HELPER_HEADER

#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif

#include <wtypes.h>
#include "../Plugins/General/gen_ml/ml_ipc_0313.h"
#include "../Plugins/General/gen_ml/colors.h"
#include "../winamp/wa_ipc.h"
#include "../winamp/wa_dlg.h"

#include "./ifc_skinhelper.h"
#include "./ifc_skinnedmenu.h"
#include "./ifc_skinnedrating.h"
#include "./ifc_skinnedbrowser.h"

#include <bfc/multipatch.h>

#define MPIID_SKINHELPER		10
#define MPIID_SKINNEDMENU	20
#define MPIID_SKINNEDRATING	30
#define MPIID_SKINNEDBROWSER	40

class SkinHelper : public MultiPatch<MPIID_SKINHELPER, ifc_skinhelper>,
					public MultiPatch<MPIID_SKINNEDMENU, ifc_skinnedmenu>,
					public MultiPatch<MPIID_SKINNEDRATING, ifc_skinnedrating>,
					public MultiPatch<MPIID_SKINNEDBROWSER, ifc_skinnedbrowser>
{

protected:
	SkinHelper(HWND hwndWa);
	~SkinHelper();

public:
	static HRESULT CreateInstance(HWND hwndWinamp, SkinHelper **instance);

public:
	/* Dispatchable */
	size_t AddRef();
	size_t Release();
	int QueryInterface(GUID interface_guid, void **object);

	/* ifc_skinhelper */
	HRESULT GetColor(UINT colorIndex, COLORREF *pColor);
    HRESULT GetColorEx(UINT uObject, UINT uPart, UINT uState, COLORREF *pColor);
	HRESULT GetBrush(UINT colorIndex, HBRUSH *pBrush);
	HFONT GetFont(void);
	HRESULT SkinWindow(HWND hwnd, const GUID *windowGuid, UINT flagsEx, FFCALLBACK callbackFF);
	HRESULT SkinControl(HWND hwnd, UINT type, UINT style);
	HRESULT UnskinWindow(HWND hwnd);
	
	/* ifc_skinnedmenu */
	BOOL TrackPopup(HMENU hMenu, UINT fuFlags, INT x, INT y, HWND hwnd, LPTPMPARAMS lptpm, ifc_menucustomizer *customizer);
	HRESULT IsPopupEnabled(void);
	HANDLE InitPopupHook(HWND hwnd, ifc_menucustomizer *customizer);
	HRESULT RemovePopupHook(HANDLE popupHook);

    /* ifc_skinnedrating */
	HRESULT RatingDraw(HDC hdc, INT maxValue, INT value, INT trackingVal, RECT *prc, UINT fStyle);
	HRESULT RatingHitTest(POINT pt, INT maxValue, RECT *prc, UINT fStyle, LONG *result);
	HRESULT RatingCalcMinRect(INT maxValue, RECT *prc);
	HRESULT RatingCreateMenuCustomizer(HMENU hMenu, ifc_menucustomizer **customizer);

	 /* ifc_skinnedbrowser */
	HRESULT Browser_GetHostCss(wchar_t **ppchHostCss);
	COLORREF Browser_GetBackColor(void);
	COLORREF Browser_GetTextColor(void);
	COLORREF Browser_GetLinkColor(void);
	COLORREF Browser_GetActiveLinkColor(void);
	COLORREF Browser_GetVisitedLinkColor(void);
	COLORREF Browser_GetHoveredLinkColor(void);

public:
	HFONT CreateSkinFont(void);
	void ResetColorCache(void);
	void ResetFontCache(void);

protected:
	HRESULT LoadMediaLibraryModule(void);
	HRESULT InitializeColorData(void);
	HRESULT MlTrackSkinnedPopupMenuEx(HMENU hmenu, UINT fuFlags, INT x, INT y, HWND hwnd, LPTPMPARAMS lptpm, HMLIMGLST hmlil, INT width, UINT skinStyle, MENUCUSTOMIZEPROC customProc, ULONG_PTR customParam, INT *resultOut);
	HRESULT MlInitSkinnedPopupHook(HWND hwnd, HMLIMGLST hmlil, INT width, UINT skinStyle, MENUCUSTOMIZEPROC customProc, ULONG_PTR customParam, HANDLE *hookOut);

protected:
	RECVS_MULTIPATCH;

protected:
	typedef BOOL (__cdecl *MLSKINWINDOWEX)(HWND /*hwnd*/, INT /*type*/, UINT /*style*/);
	typedef BOOL (__cdecl *MLUNSKINWINDOW)(HWND /*hwnd*/);
	typedef BOOL (__cdecl *MLGETSKINCOLOR)(UINT /*uObject*/, UINT /*uPart*/, UINT /*uState*/, COLORREF* /*pColor*/);
	typedef void (__cdecl *MLRESETSKINCOLOR)(void);
	typedef BOOL (__cdecl *MLTRACKSKINNEDPOPUPMENUEX)(HMENU /*hmenu*/, UINT /*fuFlags*/, INT /*x*/, INT /*y*/, HWND /*hwnd*/,
												LPTPMPARAMS /*lptpm*/, HMLIMGLST /*hmlil*/, INT /*width*/, UINT /*skinStyle*/,
												MENUCUSTOMIZEPROC /*customProc*/, ULONG_PTR /*customParam*/);
	typedef BOOL (__cdecl *MLISSKINNEDPOPUPENABLED)(void);
	typedef HANDLE (__cdecl *MLINITSKINNEDPOPUPHOOK)(HWND /*hwnd*/, HMLIMGLST /*hmlil*/, INT /*width*/, UINT /*skinStyle*/,
												MENUCUSTOMIZEPROC /*customProc*/, ULONG_PTR /*customParam*/);
	typedef void (__cdecl *MLREMOVESKINNEDPOPUPHOOK)(HANDLE /*hPopupHook*/);

	typedef BOOL (__cdecl *MLRATINGDRAW)(HDC /*hdc*/, INT /*maxValue*/, INT /*value*/, INT /*trackingVal*/, HMLIMGLST /*hmlil*/, INT /*index*/, RECT* /*prc*/, UINT /*fStyle*/);
	typedef LONG (__cdecl *MLRATINGHITTEST)(POINT /*pt*/, INT /*maxValue*/, HMLIMGLST /*hmlil*/, RECT* /*prc*/, UINT /*fStyle*/);
	typedef BOOL (__cdecl *MLRATINGCALCMINRECT)(INT /*maxValue*/, HMLIMGLST /*hmlil*/, RECT* /*prc*/);
	

protected:
	ULONG	ref;
	HWND	hwndWinamp;
	HMODULE mlModule;
	HRESULT mlLoadResult;
	HFONT	playlistFont;
	HBRUSH	szBrushes[WADLG_NUM_COLORS];
	BOOL	initializeColors;
	size_t	cchHostCss;

	MLSKINWINDOWEX mlSkinWindowEx;
	MLUNSKINWINDOW mlUnskinWindow;
	MLTRACKSKINNEDPOPUPMENUEX mlTrackSkinnedPopupMenuEx;
	MLISSKINNEDPOPUPENABLED mlIsSkinnedPopupEnabled;
	MLINITSKINNEDPOPUPHOOK mlInitSkinnedPopupHook;
	MLREMOVESKINNEDPOPUPHOOK mlRemoveSkinnedPopupHook;
	MLGETSKINCOLOR mlGetSkinColor;
	MLRESETSKINCOLOR mlResetSkinColor;
	MLRATINGDRAW	 mlRatingDraw;
	MLRATINGHITTEST mlRatingHitTest;
	MLRATINGCALCMINRECT mlRatingCalcMinRect;

	WCHAR	szHostCss[396];
};


#endif // NULLSOFT_WINAMP_SKIN_HELPER_HEADER