ReactOS 0.4.15-dev-7788-g1ad9096
cardbitmaps.cpp
Go to the documentation of this file.
1//
2// CardLib - Card bitmap support
3//
4// Freeware
5// Copyright J Brown 2001
6//
7
8#include "cardlib.h"
9
10#ifndef __REACTOS__
11#pragma comment( lib, "..\\CardLib\\cards16.lib" )
12
14extern "C" void WINAPI FreeLibrary16( HINSTANCE );
15#endif
16
17#define NUMCARDBITMAPS (52+16)
18
19void PaintRect(HDC hdc, RECT *rect, COLORREF col);
20
21void LoadCardBitmapsFromLibrary(HINSTANCE hCardDll, int *pwidth, int *pheight)
22{
24 HDC hdcCard = NULL;
25 HANDLE hOld;
26 int i, xpos;
27 int width, height;
28 BITMAP bmp;
29
30 for(i = 0; i < NUMCARDBITMAPS; i++)
31 {
32 //convert into the range used by the cdt_xxx functions
33 int val;
34
35 if(i < 52) val = (i % 4) * 13 + (i/4);
36 else val = i;
37
38 hBitmap = LoadBitmap(hCardDll, MAKEINTRESOURCE(val + 1));
39 GetObject(hBitmap, sizeof(bmp), &bmp);
40
41 width = bmp.bmWidth;
42 height = bmp.bmHeight;
43
44 if(i == 0) //if first time through, create BIG bitmap..
45 {
46 HDC hdc = GetDC(0);
50
51 hdcCard = CreateCompatibleDC(0);
52
53 ReleaseDC(0, hdc);
54 }
55
56 hOld = SelectObject(hdcCard, hBitmap);
57 BitBlt(__hdcCardBitmaps, i*width, 0, width, height, hdcCard, 0, 0, SRCCOPY);
58 SelectObject(hdcCard, hOld);
59
60 //Now draw a black border around each card...
61 xpos = i*width;
62 MoveToEx(__hdcCardBitmaps, xpos+2, 0, 0);
63 LineTo(__hdcCardBitmaps, xpos+width - 3, 0);
64 LineTo(__hdcCardBitmaps, xpos+width - 1, 2);
65 LineTo(__hdcCardBitmaps, xpos+width - 1, height - 3); //vertical
66 LineTo(__hdcCardBitmaps, xpos+width - 3, height - 1);
67 LineTo(__hdcCardBitmaps, xpos+2, height - 1);
68 LineTo(__hdcCardBitmaps, xpos+0, height - 3);
69 LineTo(__hdcCardBitmaps, xpos+0, 2);
70 LineTo(__hdcCardBitmaps, xpos+2, 0);
71
73 }
74
75 DeleteDC(hdcCard);
76
77 *pwidth = width;
78 *pheight = height;
79
80}
81
83{
84 HINSTANCE hCardDll;
85
86
87 //If Windows NT/2000/XP
88 if(GetVersion() < 0x80000000)
89 {
90 hCardDll = LoadLibrary(TEXT("cards.dll"));
91
92 if(hCardDll == 0)
93 {
94 MessageBox(0, TEXT("Error loading cards.dll (32bit)"), TEXT("Shed"), MB_OK | MB_ICONEXCLAMATION);
96 return;
97 }
98
100
101 FreeLibrary(hCardDll);
102 }
103#ifndef __REACTOS__
104 //Else, Win9X
105 else
106 {
107 hCardDll = LoadLibrary16("cards.dll");
108
109 if(hCardDll == 0)
110 {
111 MessageBox(0, "Error loading cards.dll (16bit)", "Shed", MB_OK | MB_ICONEXCLAMATION);
113 return;
114 }
115
117
118 FreeLibrary16(hCardDll);
119 }
120#endif
121}
122
124{
127}
128//
129// Paint a checkered rectangle, with each alternate
130// pixel being assigned a different colour
131//
133{
134 static WORD wCheckPat[8] =
135 {
136 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555
137 };
138
140 HBRUSH hbr, hbrold;
141 COLORREF fgold, bgold;
142
143 hbmp = CreateBitmap(8, 8, 1, 1, wCheckPat);
145
146 //UnrealizeObject(hbr);
147
148 SetBrushOrgEx(hdc, rect->left, rect->top, 0);
149
150 hbrold = (HBRUSH)SelectObject(hdc, hbr);
151
152 fgold = SetTextColor(hdc, fg);
153 bgold = SetBkColor(hdc, bg);
154
155 PatBlt(hdc, rect->left, rect->top,
156 rect->right - rect->left,
157 rect->bottom - rect->top,
158 PATCOPY);
159
160 SetBkColor(hdc, bgold);
161 SetTextColor(hdc, fgold);
162
163 SelectObject(hdc, hbrold);
164 DeleteObject(hbr);
166}
167
168void GetSinkCols(COLORREF crBase, COLORREF *fg, COLORREF *bg, COLORREF *sh1, COLORREF *sh2)
169{
170 if(bg) *bg = crBase;
171 if(fg) *fg = ColorScaleRGB(crBase, RGB(255,255,255), 0.2);//RGB(49, 99, 140);
172 if(sh1) *sh1 = ColorScaleRGB(crBase, RGB(0,0,0), 0.4);
173 if(sh2) *sh2 = ColorScaleRGB(crBase, RGB(0,0,0), 0.2);
174}
175
177{
178 HANDLE hold, hpold;
180
181 HPEN hpfg, hpbg, hpsh, hpsh2;
182
183 RECT rect;
184 COLORREF fg, bg, shadow, shadow2;
185
186 GetSinkCols(col, &fg, &bg, &shadow, &shadow2);
187
188 hold = SelectObject(hdc, hbm);
189
190 //fill with a solid base colour
191 SetRect(&rect, 0,0,width,height);
193
194 //draw the outline
195 hpfg = CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(fg));
196 hpbg = CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(bg));
197 hpsh = CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(shadow));
198 hpsh2= CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(shadow2));
199
200 hpold = SelectObject(hdc, hpsh);
201 MoveToEx(hdc, 2, 0, NULL);
202 LineTo (hdc, width-3,0);
203 LineTo (hdc, width-1, 2);
204
205 SelectObject(hdc, hpold);
206 hpold = SelectObject(hdc, hpsh2);
207 LineTo (hdc, width-1, height-3); //vertical
208 LineTo (hdc, width-3, height-1);
209 LineTo (hdc, 2, height-1);
210 LineTo (hdc, 0, height-3);
211 SelectObject(hdc, hpold);
212 hpold = SelectObject(hdc, hpsh);
213
214 //MoveToEx( hdc, 0, height-3,0);
215 LineTo (hdc, 0, 2);
216 LineTo (hdc, 2, 0);
217
218 SelectObject(hdc, hpold);
219
220 //draw the highlight (vertical)
221 hpold = SelectObject(hdc, hpfg);
222 MoveToEx(hdc, width - 2, 3, NULL);
223 LineTo (hdc, width - 2, height - 2);
224
225 //(horz)
226 MoveToEx(hdc, width - 3, height-2, NULL);
227 LineTo (hdc, 3, height-2);
228 SelectObject(hdc, hpold);
229
230 //draw the background
231 InflateRect(&rect, -2, -2);
233
234 //overwrite the top-left background pixel
235 SetPixel(hdc, 2, 2, MAKE_PALETTERGB(bg));
236
237 DeleteObject(hpsh);
238 DeleteObject(hpsh2);
239 DeleteObject(hpfg);
240 DeleteObject(hpbg);
241
242
243 return hbm;
244}
245
246
247
249{
250 pe->peBlue = GetBValue(col);
251 pe->peGreen = GetGValue(col);
252 pe->peRed = GetRValue(col);
253 pe->peFlags = 0;
254}
255
256HPALETTE MakePaletteFromCols(COLORREF cols[], int nNumColours)
257{
258 LOGPALETTE *lp;
259 HPALETTE hPalette;
260
261 // Allocate memory for the logical palette
262 lp = (LOGPALETTE *)HeapAlloc(
263 GetProcessHeap(), 0, sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * nNumColours);
264
265 lp->palNumEntries = (WORD)nNumColours;
266 lp->palVersion = 0x300;
267
268 //copy the colours into the logical palette format
269 for(int i = 0; i < nNumColours; i++)
270 {
271 CopyColor(&lp->palPalEntry[i], cols[i]);
272 }
273
274 // create palette!
275 hPalette = CreatePalette(lp);
276
277 HeapFree(GetProcessHeap(), 0, lp);
278
279 return hPalette;
280}
FORCEINLINE VOID SetPixel(_In_ ULONG Left, _In_ ULONG Top, _In_ UCHAR Color)
Definition: arm.h:50
HBITMAP hbmp
#define NUMCARDBITMAPS
Definition: cardbitmaps.cpp:17
HPALETTE MakePaletteFromCols(COLORREF cols[], int nNumColours)
void WINAPI FreeLibrary16(HINSTANCE)
void PaintRect(HDC hdc, RECT *rect, COLORREF col)
Definition: cardlib.cpp:116
static void DrawCheckedRect(HDC hdc, RECT *rect, COLORREF fg, COLORREF bg)
void GetSinkCols(COLORREF crBase, COLORREF *fg, COLORREF *bg, COLORREF *sh1, COLORREF *sh2)
void FreeCardBitmaps()
void LoadCardBitmaps(void)
Definition: cardbitmaps.cpp:82
HBITMAP CreateSinkBmp(HDC hdcCompat, HDC hdc, COLORREF col, int width, int height)
void CopyColor(PALETTEENTRY *pe, COLORREF col)
void LoadCardBitmapsFromLibrary(HINSTANCE hCardDll, int *pwidth, int *pheight)
Definition: cardbitmaps.cpp:21
HINSTANCE WINAPI LoadLibrary16(PSTR)
COLORREF ColorScaleRGB(const COLORREF Col1, const COLORREF Col2, const double Ratio)
Definition: cardcolor.cpp:154
#define MAKE_PALETTERGB(colref)
Definition: cardcolor.h:17
int __cardwidth
Definition: cardlib.cpp:25
HBITMAP __hbmCardBitmaps
Definition: cardlib.cpp:19
int __cardheight
Definition: cardlib.cpp:26
HDC __hdcCardBitmaps
Definition: cardlib.cpp:18
#define NULL
Definition: types.h:112
static HBITMAP hBitmap
Definition: timezone.c:26
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define FreeLibrary(x)
Definition: compat.h:748
#define HeapFree(x, y, z)
Definition: compat.h:735
static VOID NTAPI BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:49
#define RGB(r, g, b)
Definition: precomp.h:62
#define GetBValue(quad)
Definition: precomp.h:66
#define GetGValue(quad)
Definition: precomp.h:65
#define GetRValue(quad)
Definition: precomp.h:64
unsigned short WORD
Definition: ntddk_ex.h:93
pKey DeleteObject()
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
GLuint GLfloat * val
Definition: glext.h:7180
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define TEXT(s)
Definition: k32.h:26
BITMAP bmp
Definition: alphablend.c:62
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
_In_ HBITMAP hbm
Definition: ntgdi.h:2776
DWORD WINAPI GetVersion()
Definition: redirtest.c:5
& rect
Definition: startmenu.cpp:1413
Definition: bl.h:1331
WORD palNumEntries
Definition: wingdi.h:1834
WORD palVersion
Definition: wingdi.h:1833
char * PSTR
Definition: typedefs.h:51
#define LoadLibrary
Definition: winbase.h:3797
DWORD COLORREF
Definition: windef.h:300
#define WINAPI
Definition: msvc.h:6
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
Definition: dc.c:999
BOOL WINAPI SetBrushOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
HPALETTE WINAPI CreatePalette(_In_reads_(_Inexpressible_(2 *sizeof(WORD)+plpal->palNumEntries *sizeof(PALETTEENTRY))) const LOGPALETTE *)
struct tagLOGPALETTE LOGPALETTE
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI MoveToEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define SRCCOPY
Definition: wingdi.h:333
#define PATCOPY
Definition: wingdi.h:335
BOOL WINAPI PatBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:918
#define GetObject
Definition: wingdi.h:4468
BOOL WINAPI DeleteDC(_In_ HDC)
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int)
#define PS_SOLID
Definition: wingdi.h:586
HBRUSH WINAPI CreatePatternBrush(_In_ HBITMAP)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define LoadBitmap
Definition: winuser.h:5811
HDC WINAPI GetDC(_In_opt_ HWND)
#define MB_ICONEXCLAMATION
Definition: winuser.h:785
#define MB_OK
Definition: winuser.h:790
#define MessageBox
Definition: winuser.h:5822
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)
#define MAKEINTRESOURCE
Definition: winuser.h:591
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)