4 * Copyright (C) 2003 Filip Navara <xnavara@volny.org>
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.
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.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 HBITMAP g_CardBitmaps[MAX_CARD_BITMAPS];
30 HINSTANCE g_hModule = 0;
33 * Redundant function from 16-bit Windows time
35 BOOL WINAPI WEP(DWORD Unknown)
41 * Initialize card library and return cards width and height
43 BOOL WINAPI cdtInit(INT *Width, INT *Height)
47 /* Report card width and height to user */
49 *Height = CARD_HEIGHT;
52 for (dwIndex = 0; dwIndex < MAX_CARD_BITMAPS; ++dwIndex)
53 g_CardBitmaps[dwIndex] =
54 (HBITMAP)LoadBitmapA(g_hModule, MAKEINTRESOURCEA(dwIndex + 1));
60 * Terminate card library
62 VOID WINAPI cdtTerm(VOID)
67 for (dwIndex = 0; dwIndex < MAX_CARD_BITMAPS; dwIndex++)
68 DeleteObject(g_CardBitmaps[dwIndex]);
72 * Render card with no stretching
74 BOOL WINAPI cdtDraw(HDC hdc, INT x, INT y, INT card, INT type, COLORREF color)
76 return cdtDrawExt(hdc, x, y, CARD_WIDTH, CARD_HEIGHT, card, type, color);
83 * hdc - Handle of destination device context
86 * dx - Destination width
87 * dy - Destination height
88 * card - Image id (meaning depend on type)
89 * type - One of edt* constants
90 * color - Background color (?)
92 BOOL WINAPI cdtDrawExt(HDC hdc, INT x, INT y, INT dx, INT dy, INT card, INT type, COLORREF color)
95 COLORREF SavedPixels[12];
96 DWORD dwRasterOp = SRCCOPY, OldBkColor;
97 BOOL bSaveEdges = TRUE;
98 BOOL bStretch = FALSE;
100 if (type & ectSAVEEDGESMASK)
102 type &= ~ectSAVEEDGESMASK;
106 if (dx != CARD_WIDTH || dy != CARD_HEIGHT)
115 dwRasterOp = NOTSRCCOPY;
117 card = (card % 4) * 13 + (card / 4);
139 if (type == ectEMPTY || type == ectERASE)
144 hBrush = CreateSolidBrush(color);
145 GetDCOrgEx(hdc, &pPoint);
146 SetBrushOrgEx(hdc, pPoint.x, pPoint.y, 0);
147 SelectObject(hdc, hBrush);
148 PatBlt(hdc, x, y, dx, dy, PATCOPY);
150 if (type != ectERASE)
152 hdcCard = CreateCompatibleDC(hdc);
153 SelectObject(hdcCard, g_CardBitmaps[card]);
154 OldBkColor = SetBkColor(hdc, (type == ectFACES) ? 0xFFFFFF : color);
157 SavedPixels[0] = GetPixel(hdc, x, y);
158 SavedPixels[1] = GetPixel(hdc, x + 1, y);
159 SavedPixels[2] = GetPixel(hdc, x, y + 1);
160 SavedPixels[3] = GetPixel(hdc, x + dx - 1, y);
161 SavedPixels[4] = GetPixel(hdc, x + dx - 2, y);
162 SavedPixels[5] = GetPixel(hdc, x + dx - 1, y + 1);
163 SavedPixels[6] = GetPixel(hdc, x, y + dy - 1);
164 SavedPixels[7] = GetPixel(hdc, x + 1, y + dy - 1);
165 SavedPixels[8] = GetPixel(hdc, x, y + dy - 2);
166 SavedPixels[9] = GetPixel(hdc, x + dx - 1, y + dy - 1);
167 SavedPixels[10] = GetPixel(hdc, x + dx - 2, y + dy - 1);
168 SavedPixels[11] = GetPixel(hdc, x + dx - 1, y + dy - 2);
172 StretchBlt(hdc, x, y, dx, dy, hdcCard, 0, 0, CARD_WIDTH, CARD_HEIGHT, dwRasterOp);
175 BitBlt(hdc, x, y, dx, dy, hdcCard, 0, 0, dwRasterOp);
177 * This is need when using Microsoft images, because they use two-color red/white images for
178 * red cards and thus needs fix-up of the edge to black color.
183 PatBlt(hdc, x, y + 2, 1, dy - 4, BLACKNESS);
184 PatBlt(hdc, x + dx - 1, y + 2, 1, dy - 4, BLACKNESS);
185 PatBlt(hdc, x + 2, y, dx - 4, 1, BLACKNESS);
186 PatBlt(hdc, x + 2, y + dy - 1, dx - 4, 1, BLACKNESS);
187 SetPixel(hdc, x + 1, y + 1, 0);
188 SetPixel(hdc, x + dx - 2, y + 1, 0);
189 SetPixel(hdc, x + 1, y + dy - 2, 0);
190 SetPixel(hdc, x + dx - 2, y + dy - 2, 0);
196 SetPixel(hdc, x, y, SavedPixels[0]);
197 SetPixel(hdc, x + 1, y, SavedPixels[1]);
198 SetPixel(hdc, x, y + 1, SavedPixels[2]);
199 SetPixel(hdc, x + dx - 1, y, SavedPixels[3]);
200 SetPixel(hdc, x + dx - 2, y, SavedPixels[4]);
201 SetPixel(hdc, x + dx - 1, y + 1, SavedPixels[5]);
202 SetPixel(hdc, x, y + dy - 1, SavedPixels[6]);
203 SetPixel(hdc, x + 1, y + dy - 1, SavedPixels[7]);
204 SetPixel(hdc, x, y + dy - 2, SavedPixels[8]);
205 SetPixel(hdc, x + dx - 1, y + dy - 1, SavedPixels[9]);
206 SetPixel(hdc, x + dx - 2, y + dy - 1, SavedPixels[10]);
207 SetPixel(hdc, x + dx - 1, y + dy - 2, SavedPixels[11]);
209 SetBkColor(hdc, OldBkColor);
217 /***********************************************************************
218 * cdtAnimate (CARDS.@)
220 * Animate card background, we don't use it
222 BOOL WINAPI cdtAnimate(HDC hdc, int cardback, int x, int y, int frame)
227 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
229 if (fdwReason == DLL_PROCESS_ATTACH)
230 g_hModule = hinstDLL;