ReactOS 0.4.16-dev-295-g4aee028
cards.c
Go to the documentation of this file.
1/*
2 * ReactOS Cards
3 *
4 * Copyright (C) 2003 Filip Navara <xnavara@volny.org>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#include <stdarg.h>
22#include <windef.h>
23#include <wingdi.h>
24#include <winuser.h>
25
26#include "cards.h"
27
30
31/*
32 * Redundant function from 16-bit Windows time
33 */
35{
37 return TRUE;
38}
39
40/*
41 * Initialize card library and return cards width and height
42 */
44{
45 DWORD dwIndex;
46
47 /* Report card width and height to user */
48 *Width = CARD_WIDTH;
49 *Height = CARD_HEIGHT;
50
51 /* Load images */
52 for (dwIndex = 0; dwIndex < MAX_CARD_BITMAPS; ++dwIndex)
53 g_CardBitmaps[dwIndex] =
55
56 return TRUE;
57}
58
59/*
60 * Terminate card library
61 */
63{
64 DWORD dwIndex;
65
66 /* Unload images */
67 for (dwIndex = 0; dwIndex < MAX_CARD_BITMAPS; dwIndex++)
69}
70
71/*
72 * Render card with no stretching
73 */
75{
76 return cdtDrawExt(hdc, x, y, CARD_WIDTH, CARD_HEIGHT, card, type, color);
77}
78
79/*
80 * internal
81 */
82static __inline VOID BltCard(HDC hdc, INT x, INT y, INT dx, INT dy, HDC hdcCard, DWORD dwRasterOp, BOOL bStretch)
83{
84 if (bStretch)
85 {
86 StretchBlt(hdc, x, y, dx, dy, hdcCard, 0, 0, CARD_WIDTH, CARD_HEIGHT, dwRasterOp);
87 }
88 else
89 {
90 BitBlt(hdc, x, y, dx, dy, hdcCard, 0, 0, dwRasterOp);
91/*
92 * This is need when using Microsoft images, because they use two-color red/white images for
93 * red cards and thus needs fix-up of the edge to black color.
94 */
95#if 0
96 if (ISREDCARD(card))
97 {
98 PatBlt(hdc, x, y + 2, 1, dy - 4, BLACKNESS);
99 PatBlt(hdc, x + dx - 1, y + 2, 1, dy - 4, BLACKNESS);
100 PatBlt(hdc, x + 2, y, dx - 4, 1, BLACKNESS);
101 PatBlt(hdc, x + 2, y + dy - 1, dx - 4, 1, BLACKNESS);
102 SetPixel(hdc, x + 1, y + 1, 0);
103 SetPixel(hdc, x + dx - 2, y + 1, 0);
104 SetPixel(hdc, x + 1, y + dy - 2, 0);
105 SetPixel(hdc, x + dx - 2, y + dy - 2, 0);
106 }
107#endif
108 }
109}
110
111/*
112 * Render card
113 *
114 * Parameters:
115 * hdc - Handle of destination device context
116 * x - Position left
117 * y - Position right
118 * dx - Destination width
119 * dy - Destination height
120 * card - Image id (meaning depend on type)
121 * type - One of edt* constants
122 * color - Background color (?)
123 */
125{
126 DWORD dwRasterOp = SRCCOPY;
127 BOOL bSaveEdges = TRUE;
128 BOOL bStretch = FALSE;
129
131 {
132 type &= ~ectSAVEEDGESMASK;
133 bSaveEdges = FALSE;
134 }
135
136 if (dx != CARD_WIDTH || dy != CARD_HEIGHT)
137 {
138 bStretch = TRUE;
139 bSaveEdges = FALSE;
140 }
141
142 switch (type)
143 {
144 case ectINVERTED:
145 dwRasterOp = NOTSRCCOPY;
146 case ectFACES:
147 card = (card % 4) * 13 + (card / 4);
148 break;
149 case ectBACKS:
150 --card;
151 break;
152 case ectEMPTYNOBG:
153 dwRasterOp = SRCAND;
154 case ectEMPTY:
155 card = 52;
156 break;
157 case ectERASE:
158 break;
159 case ectREDX:
160 card = 66;
161 break;
162 case ectGREENO:
163 card = 67;
164 break;
165 default:
166 return FALSE;
167 }
168
169 if (type == ectEMPTY || type == ectERASE)
170 {
171 POINT pPoint;
172 HBRUSH hBrush, hOldBrush;
173
174 hBrush = CreateSolidBrush(color);
175 GetDCOrgEx(hdc, &pPoint);
176 SetBrushOrgEx(hdc, pPoint.x, pPoint.y, 0);
177 hOldBrush = SelectObject(hdc, hBrush);
178 PatBlt(hdc, x, y, dx, dy, PATCOPY);
179 SelectObject(hdc, hOldBrush);
180 DeleteObject(hBrush);
181 }
182 if (type != ectERASE)
183 {
184 HDC hdcCard;
185 COLORREF OldBkColor;
186
187 hdcCard = CreateCompatibleDC(hdc);
188 SelectObject(hdcCard, g_CardBitmaps[card]);
189 OldBkColor = SetBkColor(hdc, (type == ectFACES) ? 0xFFFFFF : color);
190 if (bSaveEdges)
191 {
192 COLORREF SavedPixels[12];
193 SavedPixels[0] = GetPixel(hdc, x, y);
194 SavedPixels[1] = GetPixel(hdc, x + 1, y);
195 SavedPixels[2] = GetPixel(hdc, x, y + 1);
196 SavedPixels[3] = GetPixel(hdc, x + dx - 1, y);
197 SavedPixels[4] = GetPixel(hdc, x + dx - 2, y);
198 SavedPixels[5] = GetPixel(hdc, x + dx - 1, y + 1);
199 SavedPixels[6] = GetPixel(hdc, x, y + dy - 1);
200 SavedPixels[7] = GetPixel(hdc, x + 1, y + dy - 1);
201 SavedPixels[8] = GetPixel(hdc, x, y + dy - 2);
202 SavedPixels[9] = GetPixel(hdc, x + dx - 1, y + dy - 1);
203 SavedPixels[10] = GetPixel(hdc, x + dx - 2, y + dy - 1);
204 SavedPixels[11] = GetPixel(hdc, x + dx - 1, y + dy - 2);
205
206 BltCard(hdc, x, y, dx, dy, hdcCard, dwRasterOp, bStretch);
207
208 SetPixel(hdc, x, y, SavedPixels[0]);
209 SetPixel(hdc, x + 1, y, SavedPixels[1]);
210 SetPixel(hdc, x, y + 1, SavedPixels[2]);
211 SetPixel(hdc, x + dx - 1, y, SavedPixels[3]);
212 SetPixel(hdc, x + dx - 2, y, SavedPixels[4]);
213 SetPixel(hdc, x + dx - 1, y + 1, SavedPixels[5]);
214 SetPixel(hdc, x, y + dy - 1, SavedPixels[6]);
215 SetPixel(hdc, x + 1, y + dy - 1, SavedPixels[7]);
216 SetPixel(hdc, x, y + dy - 2, SavedPixels[8]);
217 SetPixel(hdc, x + dx - 1, y + dy - 1, SavedPixels[9]);
218 SetPixel(hdc, x + dx - 2, y + dy - 1, SavedPixels[10]);
219 SetPixel(hdc, x + dx - 1, y + dy - 2, SavedPixels[11]);
220 }
221 else
222 {
223 BltCard(hdc, x, y, dx, dy, hdcCard, dwRasterOp, bStretch);
224 }
225 SetBkColor(hdc, OldBkColor);
226 DeleteDC(hdcCard);
227 }
228
229 return TRUE;
230}
231
232
233/***********************************************************************
234 * cdtAnimate (CARDS.@)
235 *
236 * Animate card background, we don't use it
237 */
238BOOL WINAPI cdtAnimate(HDC hdc, int cardback, int x, int y, int frame)
239{
243 UNREFERENCED_PARAMETER(cardback);
245 return TRUE;
246}
247
249{
251
252 if (fdwReason == DLL_PROCESS_ATTACH)
253 g_hModule = hinstDLL;
254
255 return TRUE;
256}
FORCEINLINE VOID SetPixel(_In_ ULONG Left, _In_ ULONG Top, _In_ UCHAR Color)
Definition: arm.h:55
DWORD GetPixel(LPDIRECTDRAWSURFACE7 Surface, UINT x, UINT y)
Definition: blt.cpp:2
HINSTANCE g_hModule
Definition: cards.c:29
BOOL WINAPI cdtDraw(HDC hdc, INT x, INT y, INT card, INT type, COLORREF color)
Definition: cards.c:74
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
Definition: cards.c:248
BOOL WINAPI WEP(DWORD Unknown)
Definition: cards.c:34
static __inline VOID BltCard(HDC hdc, INT x, INT y, INT dx, INT dy, HDC hdcCard, DWORD dwRasterOp, BOOL bStretch)
Definition: cards.c:82
HBITMAP g_CardBitmaps[MAX_CARD_BITMAPS]
Definition: cards.c:28
BOOL WINAPI cdtInit(INT *Width, INT *Height)
Definition: cards.c:43
BOOL WINAPI cdtAnimate(HDC hdc, int cardback, int x, int y, int frame)
Definition: cards.c:238
BOOL WINAPI cdtDrawExt(HDC hdc, INT x, INT y, INT dx, INT dy, INT card, INT type, COLORREF color)
Definition: cards.c:124
#define ectERASE
Definition: cards.h:37
#define ISREDCARD(x)
Definition: cards.h:53
#define ectBACKS
Definition: cards.h:34
#define ectEMPTYNOBG
Definition: cards.h:38
#define ectGREENO
Definition: cards.h:40
void WINAPI cdtTerm(void)
Definition: cards.c:62
#define ectINVERTED
Definition: cards.h:35
#define MAX_CARD_BITMAPS
Definition: cards.h:31
#define ectFACES
Definition: cards.h:33
#define ectREDX
Definition: cards.h:39
#define ectSAVEEDGESMASK
Definition: cards.h:41
#define ectEMPTY
Definition: cards.h:36
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
static VOID 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:57
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
pKey DeleteObject()
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLuint color
Definition: glext.h:6243
@ Unknown
Definition: i8042prt.h:114
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
static IN DWORD IN LPVOID lpvReserved
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:325
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
int32_t INT
Definition: typedefs.h:58
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
DWORD COLORREF
Definition: windef.h:300
#define WINAPI
Definition: msvc.h:6
#define BLACKNESS
Definition: wingdi.h:323
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
Definition: dc.c:999
BOOL WINAPI SetBrushOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
#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)
#define NOTSRCCOPY
Definition: wingdi.h:325
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
BOOL WINAPI DeleteDC(_In_ HDC)
#define SRCAND
Definition: wingdi.h:330
BOOL WINAPI GetDCOrgEx(_In_ HDC, _Out_ LPPOINT)
Definition: coord.c:825
HBITMAP WINAPI LoadBitmapA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2200
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581