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
|