-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathPPDrawManager.h
More file actions
210 lines (184 loc) · 8.86 KB
/
Copy pathPPDrawManager.h
File metadata and controls
210 lines (184 loc) · 8.86 KB
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
//
// Class: CPPDrawManager
//
// Compiler: Visual C++
// Tested on: Visual C++ 6.0
// Visual C++ .NET 2003
//
// Version: See GetVersionC() or GetVersionI()
//
// Created: xx/xxxx/2004
// Updated: 21/November/2004
//
// Author: Eugene Pustovoyt pustovoyt@mail.ru
//
// Disclaimer
// ----------
// THIS SOFTWARE AND THE ACCOMPANYING FILES ARE DISTRIBUTED "AS IS" AND WITHOUT
// ANY WARRANTIES WHETHER EXPRESSED OR IMPLIED. NO REPONSIBILITIES FOR POSSIBLE
// DAMAGES OR EVEN FUNCTIONALITY CAN BE TAKEN. THE USER MUST ASSUME THE ENTIRE
// RISK OF USING THIS SOFTWARE.
//
// Terms of use
// ------------
// THIS SOFTWARE IS FREE FOR PERSONAL USE OR FREEWARE APPLICATIONS.
// IF YOU WISH TO THANK MY WORK, YOU MAY DONATE ANY SUM OF MONEY TO ME
// FOR SUPPORT OF DEVELOPMENT OF THIS CLASS.
// IF YOU USE THIS SOFTWARE IN COMMERCIAL OR SHAREWARE APPLICATIONS YOU
// ARE GENTLY ASKED TO DONATE ANY SUM OF MONEY TO THE AUTHOR:
//
//--- History ------------------------------
// 2004/03/01 *** Releases version 1.0 ***
//------------------------------------------
// 2004/04/04 [FIX] Removes all MFC classes (CRect, CPoint, CSize).
// 2004/04/13 [ADD] Added a DrawImageList method
//------------------------------------------
// 2004/05/09 *** Releases version 1.1 ***
//------------------------------------------
// 2004/05/12 [ADD] Added support alpha-channel in the icons
//------------------------------------------
// 2004/05/12 *** Releases version 1.2 ***
//------------------------------------------
// 2004/06/06 [FIX] Fixed a resource's leak (don't deleted an object of the pen
// in DrawRectangle method)
//------------------------------------------
// 2004/07/01 *** Releases version 1.3 ***
//------------------------------------------
////////////////////////////////////////////////////////////////////
//
// "SmoothMaskImage" and "GetPartialSums" functions by Denis Sarazhinsky (c)2003
// Modified by Eugene Pustovoyt to use with image's mask instead of full color image.
//
/////////////////////////////////////////////////////////////////////
#ifndef _PPDRAWMANAGER_H_
#define _PPDRAWMANAGER_H_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define USE_SHADE
#ifdef USE_SHADE
#include "CeXDib.h"
#endif
#define PPDRAWMANAGER_SHADOW_XOFFSET 4 //
#define PPDRAWMANAGER_SHADOW_YOFFSET 4 //
#define PPDRAWMANAGER_SHADOW_XDEPTH 7 //
#define PPDRAWMANAGER_SHADOW_YDEPTH 7 //
#define PPDRAWMANAGER_SHADOW_COLOR RGB(128, 128, 128)
//Image Effects
#define IMAGE_EFFECT_NONE 0x0000 //No effect
#define IMAGE_EFFECT_GRAYEN 0x0001 //An image will grayen
#define IMAGE_EFFECT_DARKEN 0x0002 //An image will darken
#define IMAGE_EFFECT_LIGHTEN 0x0004 //An image will lighten
#define IMAGE_EFFECT_MONOCHROME 0x0008 //An Image will monochrome
#define IMAGE_EFFECT_MONO_SHADOW 0x0100
#define IMAGE_EFFECT_GRADIENT_SHADOW 0x0200
#define IMAGE_EFFECT_INVERT 0x8000
#define IMAGE_EFFECT_MASK (IMAGE_EFFECT_MONOCHROME | IMAGE_EFFECT_INVERT)
#define IMAGE_EFFECT_SHADOW (IMAGE_EFFECT_MONO_SHADOW | IMAGE_EFFECT_GRADIENT_SHADOW)
class CPPDrawManager
{
public:
CPPDrawManager();
virtual ~CPPDrawManager();
enum { EFFECT_SOLID = 0,
EFFECT_HGRADIENT,
EFFECT_VGRADIENT,
EFFECT_HCGRADIENT,
EFFECT_VCGRADIENT,
EFFECT_3HGRADIENT,
EFFECT_3VGRADIENT,
#ifdef USE_SHADE
EFFECT_NOISE,
EFFECT_DIAGSHADE,
EFFECT_HSHADE,
EFFECT_VSHADE,
EFFECT_HBUMP,
EFFECT_VBUMP,
EFFECT_SOFTBUMP,
EFFECT_HARDBUMP,
EFFECT_METAL,
#endif
MAX_EFFECTS
};
enum {
PEN_NULL = 0,
PEN_SOLID,
PEN_DASH,
PEN_DOT,
PEN_DASHDOT,
PEN_DASHDOTDOT,
PEN_DOUBLE,
MAX_PEN_STYLES
};
public:
void DrawLine(HDC hDC, int xStart, int yStart, int xEnd, int yEnd, COLORREF color, int nStyle = PEN_SOLID, int nSize = 1) const;
void DrawRectangle(HDC hDC, LPRECT lpRect, COLORREF crLight, COLORREF crDark, int nStyle = PEN_SOLID, int nSize = 1);
void DrawRectangle(HDC hDC, int left, int top, int right, int bottom, COLORREF crLight, COLORREF crDark, int nStyle = PEN_SOLID, int nSize = 1);
void GetSizeOfIcon(HICON hIcon, LPSIZE pSize) const;
void GetSizeOfBitmap(HBITMAP hBitmap, LPSIZE pSize) const;
void AlphaBitBlt(HDC hDestDC, int nDestX, int nDestY, DWORD dwWidth, DWORD dwHeight, HDC hSrcDC, int nSrcX, int nSrcY, int percent = 100);
void AlphaChannelBitBlt(HDC hDestDC, int nDestX, int nDestY, DWORD dwWidth, DWORD dwHeight, HDC hSrcDC, int nSrcX, int nSrcY);
void DrawShadow(HDC hDestDC, int nDestX, int nDestY, DWORD dwWidth, DWORD dwHeight, HBITMAP hMask, BOOL bGradient = FALSE, DWORD dwDepthX = PPDRAWMANAGER_SHADOW_XOFFSET, DWORD dwDepthY = PPDRAWMANAGER_SHADOW_YOFFSET);
void MaskToDepth(HDC hDC, DWORD dwWidth, DWORD dwHeight, HBITMAP hMask, double * pDepth, BOOL bGradient = FALSE, DWORD dwDepthX = PPDRAWMANAGER_SHADOW_XOFFSET, DWORD dwDepthY = PPDRAWMANAGER_SHADOW_YOFFSET);
void DarkenByDepth(HDC hDC, int x, int y, DWORD dwWidth, DWORD dwHeight, double * pDepth);
void SmoothMaskImage(const int ImageWidth,
const int ImageHeight,
const COLORREF* const pInitImg,
const int KerWidth,
const int KerHeight,
double* const pResImg_R = NULL);
void GetPartialSums(const double* const pM,
unsigned int nMRows,
unsigned int nMCols,
unsigned int nPartRows,
unsigned int nPartCols,
double* const pBuff,
double* const pRes);
void DrawBitmap(HDC hDC, int x, int y, DWORD dwWidth, DWORD dwHeight, HBITMAP hSrcBitmap,
BOOL bUseMask, COLORREF crMask,
DWORD dwEffect = IMAGE_EFFECT_NONE,
BOOL bShadow = FALSE,
DWORD dwCxShadow = PPDRAWMANAGER_SHADOW_XOFFSET,
DWORD dwCyShadow = PPDRAWMANAGER_SHADOW_YOFFSET,
DWORD dwCxDepth = PPDRAWMANAGER_SHADOW_XDEPTH,
DWORD dwCyDepth = PPDRAWMANAGER_SHADOW_YDEPTH,
COLORREF clrShadow = PPDRAWMANAGER_SHADOW_COLOR);
void DrawIcon( HDC hDC, int x, int y, DWORD dwWidth, DWORD dwHeight, HICON hSrcIcon,
DWORD dwEffect = IMAGE_EFFECT_NONE,
BOOL bShadow = FALSE,
DWORD dwCxShadow = PPDRAWMANAGER_SHADOW_XOFFSET,
DWORD dwCyShadow = PPDRAWMANAGER_SHADOW_YOFFSET,
DWORD dwCxDepth = PPDRAWMANAGER_SHADOW_XDEPTH,
DWORD dwCyDepth = PPDRAWMANAGER_SHADOW_YDEPTH,
COLORREF clrShadow = PPDRAWMANAGER_SHADOW_COLOR);
void DrawImageList(HDC hDC, int x, int y, DWORD dwWidth, DWORD dwHeight, HBITMAP hSrcBitmap,
int nIndex, int cx, int cy,
BOOL bUseMask, COLORREF crMask,
DWORD dwEffect = IMAGE_EFFECT_NONE,
BOOL bShadow = FALSE,
DWORD dwCxShadow = PPDRAWMANAGER_SHADOW_XOFFSET,
DWORD dwCyShadow = PPDRAWMANAGER_SHADOW_YOFFSET,
DWORD dwCxDepth = PPDRAWMANAGER_SHADOW_XDEPTH,
DWORD dwCyDepth = PPDRAWMANAGER_SHADOW_YDEPTH,
COLORREF clrShadow = PPDRAWMANAGER_SHADOW_COLOR);
HBITMAP CreateImageEffect(HBITMAP hBitmap, DWORD dwWidth, DWORD dwHeight, DWORD dwEffect, BOOL bUseMask = TRUE, COLORREF clrMask = RGB(255, 0, 255), COLORREF clrMono = RGB(255, 255, 255));
COLORREF GrayMirrorColor(COLORREF clrColor);
COLORREF GrayColor(COLORREF clrColor);
COLORREF DarkenColor(COLORREF clrColor, double darken);
COLORREF LightenColor(COLORREF clrColor, double lighten);
COLORREF InvertColor(COLORREF clrColor);
COLORREF PixelAlpha (COLORREF clrSrc, double src_darken, COLORREF clrDest, double dest_darken);
HICON StretchIcon(HICON hIcon, DWORD dwWidth, DWORD dwHeight);
void FillEffect(HDC hDC, DWORD dwEffect, LPCRECT lpRect, COLORREF clrBegin, COLORREF clrMid = 0, COLORREF clrEnd = 0, BYTE granularity = 0, BYTE coloring = 0);
void FillGradient(HDC hDC, LPCRECT lpRect, COLORREF colorStart, COLORREF colorFinish, BOOL bHorz = TRUE);
void MultipleCopy(HDC hDestDC, int nDestX, int nDestY, DWORD dwDestWidth, DWORD dwDestHeight, HDC hSrcDC, int nSrcX, int nSrcY, DWORD dwSrcWidth, DWORD dwSrcHeight);
#ifdef USE_SHADE
void SetShade(LPCRECT lpRect, UINT shadeID = 0, BYTE granularity = 8, BYTE coloring = 0, COLORREF hicr = 0, COLORREF midcr = 0, COLORREF locr = 0);
CCeXDib m_dNormal/*,m_dh,m_dv*/;
#endif
static short GetVersionI() {return 0x13;}
// static LPCTSTR GetVersionC() {return (LPCTSTR)_T("1.3");}
protected:
BOOL m_bIsAlpha;
};
#endif //_PPDRAWMANAGER_H_