summaryrefslogtreecommitdiff
path: root/plugins/Clist_modern/src/modern_skinengine.h
blob: d59f64f680ba2c1fdc736812dd7b89a27605d543 (plain)
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
#pragma once

#ifndef ske_H_INC
#define ske_H_INC

/* Definitions */
#define GetAValue(argb)((BYTE)((argb)>>24))

#define DEFAULTSKINSECTION  "ModernSkin"



#define MAX_BUFF_SIZE       255*400
#define MAXSN_BUFF_SIZE     255*1000

/* External variables */

/* Structs */

struct SKINOBJECTSLIST
{
	DWORD dwObjLPReserved;
	DWORD dwObjLPAlocated;
	wchar_t *szSkinPlace;
	LISTMODERNMASK	*pMaskList;
	SKINOBJECTDESCRIPTOR  *pObjects;
	SortedList *pTextList;
};

struct GLYPHIMAGE
{
	wchar_t  *szFileName;
	DWORD   dwLoadedTimes;
	HBITMAP hGlyph;
	BYTE    isSemiTransp;
};

typedef GLYPHIMAGE *LPGLYPHIMAGE;

struct CURRWNDIMAGEDATA
{
	HDC hImageDC;
	HDC hBackDC;
	HDC hScreenDC;
	HBITMAP hImageDIB, hImageOld;
	HBITMAP hBackDIB, hBackOld;
	BYTE * hImageDIBByte;
	BYTE * hBackDIBByte;
	int Width, Height;
};

struct EFFECTSSTACKITEM
{
	HDC hdc;
	BYTE EffectID;
	DWORD FirstColor;
	DWORD SecondColor;
};

class IniParser
{
public:
	enum {
		FLAG_WITH_SETTINGS = 0,
		FLAG_ONLY_OBJECTS = 1,
	};

	enum { IT_UNKNOWN, IT_FILE, IT_RESOURCE };

	typedef HRESULT(*ParserCallback_t)(const char *szSection, const char *szKey, const char *szValue, IniParser *This);

	IniParser(wchar_t *szFileName, BYTE flags = FLAG_WITH_SETTINGS);
	IniParser(HINSTANCE hInst, const char *resourceName, const char *resourceType, BYTE flags = FLAG_ONLY_OBJECTS);
	~IniParser();

	bool CheckOK() { return _isValid; }
	HRESULT Parse(ParserCallback_t pLineCallBackProc, LPARAM lParam);

	static HRESULT WriteStrToDb(const char *szSection, const char *szKey, const char *szValue, IniParser *This);
	static int GetSkinFolder(IN const wchar_t *szFileName, OUT wchar_t *pszFolderName);

private:
	// common
	enum { MAX_LINE_LEN = 512 };
	int		 _eType;
	bool	_isValid;
	char *	_szSection;
	ParserCallback_t _pLineCallBackProc;
	BOOL   _SecCheck;
	int		_nLine;

	void _DoInit();
	BOOL _DoParseLine(char *szLine);

	// Processing File
	HRESULT _DoParseFile();
	FILE*	_hFile;

	// Processing resource
	void _LoadResourceIni(HINSTANCE hInst, const char *resourceName, const char *resourceType);
	HRESULT _DoParseResource();
	const char* _RemoveTailings(const char *szLine, size_t &len);

	HGLOBAL _hGlobalRes;
	DWORD   _dwSizeOfRes;
	char*	_pPosition;

	BYTE _Flags;
};


int ske_UnloadSkin(SKINOBJECTSLIST * Skin);
int ske_AddDescriptorToSkinObjectList(SKINOBJECTDESCRIPTOR *lpDescr, SKINOBJECTSLIST* Skin);
INT_PTR ske_Service_DrawGlyph(WPARAM wParam, LPARAM lParam);



#endif