summaryrefslogtreecommitdiff
path: root/plugins/HistoryStats/src/canvas.h
blob: 6b3c40e70e7049dc50947ca776879d844e060000 (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
#if !defined(HISTORYSTATS_GUARD_CANVAS_H)
#define HISTORYSTATS_GUARD_CANVAS_H

#include "_globals.h"

class Canvas
	: private pattern::NotCopyable<Canvas>
{
public:
	class Digest
	{
	public:
		unsigned char m_Digest[20];

		Digest() { memset(m_Digest, 0, 20); }
		Digest(const Digest& other) { memcpy(m_Digest, other.m_Digest, 20); }
		const Digest& operator =(const Digest& other) { memcpy(m_Digest, other.m_Digest, 20); return *this; }

		bool operator ==(const Digest& other) const { return (memcmp(m_Digest, other.m_Digest, 20) == 0); }
		bool operator <(const Digest& other) const { return (memcmp(m_Digest, other.m_Digest, 20) < 0); }
	};

public:
	static bool hasPNG() { return mu::png::_available(); }

private:
	int m_nChannels;
	int m_nWidth;
	int m_nHeight;
	int m_nLineLength;

	bool m_bTransColor;
	COLORREF m_TransColor;

	BITMAPINFOHEADER* m_pBMIH;
	HDC m_hDC;
	HBITMAP m_hBmp;
	HGDIOBJ m_hOldBmp;

private:
	void updateTrans(BYTE* pData);

public:
	explicit Canvas(int nWidth, int nHeight);
	~Canvas();

	void setTrans(COLORREF transColor, bool bFill = false);
	void fillBackground(COLORREF bkColor);

	HDC beginDraw();
	void endDraw();

	bool getDigest(Digest& digest);
	bool writePNG(const mu_text* szFileName);
};

#endif // HISTORYSTATS_GUARD_CANVAS_H