//\r
-// CardLib - Card bitmap support\r
+// CardLib - Card bitmap support\r
//\r
-// Freeware\r
-// Copyright J Brown 2001\r
+// Freeware\r
+// Copyright J Brown 2001\r
//\r
#include <windows.h>\r
#include "globals.h"\r
#pragma comment( lib, "..\\CardLib\\cards16.lib" )\r
\r
extern "C" HINSTANCE WINAPI LoadLibrary16( PSTR );\r
-extern "C" void WINAPI FreeLibrary16( HINSTANCE );\r
+extern "C" void WINAPI FreeLibrary16( HINSTANCE );\r
#endif\r
\r
#define NUMCARDBITMAPS (52+16)\r
\r
void LoadCardBitmapsFromLibrary(HINSTANCE hCardDll, int *pwidth, int *pheight)\r
{\r
- HBITMAP hBitmap;\r
- HDC hdcCard;\r
- HANDLE hOld;\r
- int i, xpos;\r
- int width, height;\r
- BITMAP bmp;\r
-\r
- for(i = 0; i < NUMCARDBITMAPS; i++)\r
- {\r
- //convert into the range used by the cdt_xxx functions\r
- int val;\r
- \r
- if(i < 52) val = (i % 4) * 13 + (i/4);\r
- else val = i;\r
- \r
- hBitmap = LoadBitmap(hCardDll, MAKEINTRESOURCE(val + 1));\r
- GetObject(hBitmap, sizeof(bmp), &bmp);\r
- \r
- width = bmp.bmWidth;\r
- height = bmp.bmHeight;\r
- \r
- if(i == 0) //if first time through, create BIG bitmap..\r
- {\r
- HDC hdc = GetDC(0);\r
- __hdcCardBitmaps = CreateCompatibleDC(hdc);\r
- __hbmCardBitmaps = CreateCompatibleBitmap(hdc, width * NUMCARDBITMAPS, height);\r
- SelectObject(__hdcCardBitmaps, __hbmCardBitmaps);\r
- \r
- hdcCard = CreateCompatibleDC(0);\r
- \r
- ReleaseDC(0, hdc);\r
- }\r
- \r
- hOld = SelectObject(hdcCard, hBitmap);\r
- BitBlt(__hdcCardBitmaps, i*width, 0, width, height, hdcCard, 0, 0, SRCCOPY);\r
- SelectObject(hdcCard, hOld);\r
- \r
- //Now draw a black border around each card...\r
- xpos = i*width;\r
- MoveToEx(__hdcCardBitmaps, xpos+2, 0, 0);\r
- LineTo(__hdcCardBitmaps, xpos+width - 3, 0);\r
- LineTo(__hdcCardBitmaps, xpos+width - 1, 2);\r
- LineTo(__hdcCardBitmaps, xpos+width - 1, height - 3); //vertical\r
- LineTo(__hdcCardBitmaps, xpos+width - 3, height - 1);\r
- LineTo(__hdcCardBitmaps, xpos+2, height - 1);\r
- LineTo(__hdcCardBitmaps, xpos+0, height - 3);\r
- LineTo(__hdcCardBitmaps, xpos+0, 2);\r
- LineTo(__hdcCardBitmaps, xpos+2, 0);\r
- \r
- DeleteObject(hBitmap);\r
- }\r
- \r
- DeleteDC(hdcCard);\r
-\r
- *pwidth = width;\r
- *pheight = height;\r
- \r
+ HBITMAP hBitmap;\r
+ HDC hdcCard;\r
+ HANDLE hOld;\r
+ int i, xpos;\r
+ int width, height;\r
+ BITMAP bmp;\r
+\r
+ for(i = 0; i < NUMCARDBITMAPS; i++)\r
+ {\r
+ //convert into the range used by the cdt_xxx functions\r
+ int val;\r
+ \r
+ if(i < 52) val = (i % 4) * 13 + (i/4);\r
+ else val = i;\r
+ \r
+ hBitmap = LoadBitmap(hCardDll, MAKEINTRESOURCE(val + 1));\r
+ GetObject(hBitmap, sizeof(bmp), &bmp);\r
+ \r
+ width = bmp.bmWidth;\r
+ height = bmp.bmHeight;\r
+ \r
+ if(i == 0) //if first time through, create BIG bitmap..\r
+ {\r
+ HDC hdc = GetDC(0);\r
+ __hdcCardBitmaps = CreateCompatibleDC(hdc);\r
+ __hbmCardBitmaps = CreateCompatibleBitmap(hdc, width * NUMCARDBITMAPS, height);\r
+ SelectObject(__hdcCardBitmaps, __hbmCardBitmaps);\r
+ \r
+ hdcCard = CreateCompatibleDC(0);\r
+ \r
+ ReleaseDC(0, hdc);\r
+ }\r
+ \r
+ hOld = SelectObject(hdcCard, hBitmap);\r
+ BitBlt(__hdcCardBitmaps, i*width, 0, width, height, hdcCard, 0, 0, SRCCOPY);\r
+ SelectObject(hdcCard, hOld);\r
+ \r
+ //Now draw a black border around each card...\r
+ xpos = i*width;\r
+ MoveToEx(__hdcCardBitmaps, xpos+2, 0, 0);\r
+ LineTo(__hdcCardBitmaps, xpos+width - 3, 0);\r
+ LineTo(__hdcCardBitmaps, xpos+width - 1, 2);\r
+ LineTo(__hdcCardBitmaps, xpos+width - 1, height - 3); //vertical\r
+ LineTo(__hdcCardBitmaps, xpos+width - 3, height - 1);\r
+ LineTo(__hdcCardBitmaps, xpos+2, height - 1);\r
+ LineTo(__hdcCardBitmaps, xpos+0, height - 3);\r
+ LineTo(__hdcCardBitmaps, xpos+0, 2);\r
+ LineTo(__hdcCardBitmaps, xpos+2, 0);\r
+ \r
+ DeleteObject(hBitmap);\r
+ }\r
+ \r
+ DeleteDC(hdcCard);\r
+\r
+ *pwidth = width;\r
+ *pheight = height;\r
+ \r
}\r
\r
void LoadCardBitmaps(void)\r
{\r
- HINSTANCE hCardDll;\r
- \r
-\r
- //If Windows NT/2000/XP\r
- if(GetVersion() < 0x80000000)\r
- {\r
- hCardDll = LoadLibrary("cards.dll");\r
-\r
- if(hCardDll == 0)\r
- {\r
- MessageBox(0, "Error loading cards.dll (32bit)", "Shed", MB_OK | MB_ICONEXCLAMATION);\r
- PostQuitMessage(0);\r
- return;\r
- }\r
- \r
- LoadCardBitmapsFromLibrary(hCardDll, &__cardwidth, &__cardheight);\r
- \r
- FreeLibrary(hCardDll);\r
- }\r
+ HINSTANCE hCardDll;\r
+ \r
+\r
+ //If Windows NT/2000/XP\r
+ if(GetVersion() < 0x80000000)\r
+ {\r
+ hCardDll = LoadLibrary("cards.dll");\r
+\r
+ if(hCardDll == 0)\r
+ {\r
+ MessageBox(0, "Error loading cards.dll (32bit)", "Shed", MB_OK | MB_ICONEXCLAMATION);\r
+ PostQuitMessage(0);\r
+ return;\r
+ }\r
+ \r
+ LoadCardBitmapsFromLibrary(hCardDll, &__cardwidth, &__cardheight);\r
+ \r
+ FreeLibrary(hCardDll);\r
+ }\r
#ifndef __REACTOS__\r
- //Else, Win9X\r
- else\r
- {\r
- hCardDll = LoadLibrary16("cards.dll");\r
-\r
- if(hCardDll == 0)\r
- {\r
- MessageBox(0, "Error loading cards.dll (16bit)", "Shed", MB_OK | MB_ICONEXCLAMATION);\r
- PostQuitMessage(0);\r
- return;\r
- }\r
-\r
- LoadCardBitmapsFromLibrary(hCardDll, &__cardwidth, &__cardheight);\r
-\r
- FreeLibrary16(hCardDll);\r
- }\r
+ //Else, Win9X\r
+ else\r
+ {\r
+ hCardDll = LoadLibrary16("cards.dll");\r
+\r
+ if(hCardDll == 0)\r
+ {\r
+ MessageBox(0, "Error loading cards.dll (16bit)", "Shed", MB_OK | MB_ICONEXCLAMATION);\r
+ PostQuitMessage(0);\r
+ return;\r
+ }\r
+\r
+ LoadCardBitmapsFromLibrary(hCardDll, &__cardwidth, &__cardheight);\r
+\r
+ FreeLibrary16(hCardDll);\r
+ }\r
#endif\r
}\r
\r
void FreeCardBitmaps()\r
{\r
- DeleteObject (__hbmCardBitmaps);\r
- DeleteDC (__hdcCardBitmaps);\r
+ DeleteObject (__hbmCardBitmaps);\r
+ DeleteDC (__hdcCardBitmaps);\r
}\r
//\r
-// Paint a checkered rectangle, with each alternate\r
-// pixel being assigned a different colour\r
+// Paint a checkered rectangle, with each alternate\r
+// pixel being assigned a different colour\r
//\r
static void DrawCheckedRect(HDC hdc, RECT *rect, COLORREF fg, COLORREF bg)\r
{\r
- static WORD wCheckPat[8] = \r
- { \r
- 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555 \r
- };\r
-\r
- HBITMAP hbmp;\r
- HBRUSH hbr, hbrold;\r
- COLORREF fgold, bgold;\r
-\r
- hbmp = CreateBitmap(8, 8, 1, 1, wCheckPat);\r
- hbr = CreatePatternBrush(hbmp);\r
-\r
- //UnrealizeObject(hbr);\r
-\r
- SetBrushOrgEx(hdc, rect->left, rect->top, 0);\r
-\r
- hbrold = (HBRUSH)SelectObject(hdc, hbr);\r
-\r
- fgold = SetTextColor(hdc, fg);\r
- bgold = SetBkColor(hdc, bg);\r
- \r
- PatBlt(hdc, rect->left, rect->top, \r
- rect->right - rect->left, \r
- rect->bottom - rect->top, \r
- PATCOPY);\r
- \r
- SetBkColor(hdc, bgold);\r
- SetTextColor(hdc, fgold);\r
- \r
- SelectObject(hdc, hbrold);\r
- DeleteObject(hbr);\r
- DeleteObject(hbmp);\r
+ static WORD wCheckPat[8] = \r
+ { \r
+ 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555 \r
+ };\r
+\r
+ HBITMAP hbmp;\r
+ HBRUSH hbr, hbrold;\r
+ COLORREF fgold, bgold;\r
+\r
+ hbmp = CreateBitmap(8, 8, 1, 1, wCheckPat);\r
+ hbr = CreatePatternBrush(hbmp);\r
+\r
+ //UnrealizeObject(hbr);\r
+\r
+ SetBrushOrgEx(hdc, rect->left, rect->top, 0);\r
+\r
+ hbrold = (HBRUSH)SelectObject(hdc, hbr);\r
+\r
+ fgold = SetTextColor(hdc, fg);\r
+ bgold = SetBkColor(hdc, bg);\r
+ \r
+ PatBlt(hdc, rect->left, rect->top, \r
+ rect->right - rect->left, \r
+ rect->bottom - rect->top, \r
+ PATCOPY);\r
+ \r
+ SetBkColor(hdc, bgold);\r
+ SetTextColor(hdc, fgold);\r
+ \r
+ SelectObject(hdc, hbrold);\r
+ DeleteObject(hbr);\r
+ DeleteObject(hbmp);\r
}\r
\r
void GetSinkCols(COLORREF crBase, COLORREF *fg, COLORREF *bg, COLORREF *sh1, COLORREF *sh2)\r
{\r
- if(bg) *bg = crBase;\r
- if(fg) *fg = ColorScaleRGB(crBase, RGB(255,255,255), 0.2);//RGB(49, 99, 140);\r
- if(sh1) *sh1 = ColorScaleRGB(crBase, RGB(0,0,0), 0.4);\r
- if(sh2) *sh2 = ColorScaleRGB(crBase, RGB(0,0,0), 0.2);\r
+ if(bg) *bg = crBase;\r
+ if(fg) *fg = ColorScaleRGB(crBase, RGB(255,255,255), 0.2);//RGB(49, 99, 140);\r
+ if(sh1) *sh1 = ColorScaleRGB(crBase, RGB(0,0,0), 0.4);\r
+ if(sh2) *sh2 = ColorScaleRGB(crBase, RGB(0,0,0), 0.2);\r
}\r
\r
HBITMAP CreateSinkBmp(HDC hdcCompat, HDC hdc, COLORREF col, int width, int height)\r
{\r
- HANDLE hold, hpold;\r
- HBITMAP hbm = CreateCompatibleBitmap(hdcCompat, width, height);\r
-\r
- HPEN hpfg, hpbg, hpsh, hpsh2;\r
-\r
- RECT rect;\r
- COLORREF fg, bg, shadow, shadow2;\r
-\r
- GetSinkCols(col, &fg, &bg, &shadow, &shadow2);\r
-\r
- hold = SelectObject(hdc, hbm);\r
-\r
- //fill with a solid base colour\r
- SetRect(&rect, 0,0,width,height);\r
- PaintRect(hdc, &rect, MAKE_PALETTERGB(bg));\r
-\r
- //draw the outline\r
- hpfg = CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(fg));\r
- hpbg = CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(bg));\r
- hpsh = CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(shadow));\r
- hpsh2= CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(shadow2)); \r
-\r
- hpold = SelectObject(hdc, hpsh);\r
- MoveToEx(hdc, 2, 0, NULL);\r
- LineTo (hdc, width-3,0);\r
- LineTo (hdc, width-1, 2);\r
- \r
- SelectObject(hdc, hpold);\r
- hpold = SelectObject(hdc, hpsh2);\r
- LineTo (hdc, width-1, height-3); //vertical\r
- LineTo (hdc, width-3, height-1);\r
- LineTo (hdc, 2, height-1);\r
- LineTo (hdc, 0, height-3);\r
- SelectObject(hdc, hpold);\r
- hpold = SelectObject(hdc, hpsh);\r
-\r
- //MoveToEx( hdc, 0, height-3,0);\r
- LineTo (hdc, 0, 2);\r
- LineTo (hdc, 2, 0);\r
-\r
- SelectObject(hdc, hpold);\r
-\r
- //draw the highlight (vertical)\r
- hpold = SelectObject(hdc, hpfg);\r
- MoveToEx(hdc, width - 2, 3, NULL);\r
- LineTo (hdc, width - 2, height - 2);\r
- \r
- //(horz)\r
- MoveToEx(hdc, width - 3, height-2, NULL);\r
- LineTo (hdc, 3, height-2);\r
- SelectObject(hdc, hpold);\r
- \r
- //draw the background\r
- InflateRect(&rect, -2, -2);\r
- DrawCheckedRect(hdc, &rect, MAKE_PALETTERGB(bg), MAKE_PALETTERGB(fg));\r
-\r
- //overwrite the top-left background pixel\r
- SetPixel(hdc, 2, 2, MAKE_PALETTERGB(bg));\r
-\r
- DeleteObject(hpsh);\r
- DeleteObject(hpsh2);\r
- DeleteObject(hpfg);\r
- DeleteObject(hpbg);\r
-\r
- \r
- return hbm;\r
+ HANDLE hold, hpold;\r
+ HBITMAP hbm = CreateCompatibleBitmap(hdcCompat, width, height);\r
+\r
+ HPEN hpfg, hpbg, hpsh, hpsh2;\r
+\r
+ RECT rect;\r
+ COLORREF fg, bg, shadow, shadow2;\r
+\r
+ GetSinkCols(col, &fg, &bg, &shadow, &shadow2);\r
+\r
+ hold = SelectObject(hdc, hbm);\r
+\r
+ //fill with a solid base colour\r
+ SetRect(&rect, 0,0,width,height);\r
+ PaintRect(hdc, &rect, MAKE_PALETTERGB(bg));\r
+\r
+ //draw the outline\r
+ hpfg = CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(fg));\r
+ hpbg = CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(bg));\r
+ hpsh = CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(shadow));\r
+ hpsh2= CreatePen(PS_SOLID, 0, MAKE_PALETTERGB(shadow2)); \r
+\r
+ hpold = SelectObject(hdc, hpsh);\r
+ MoveToEx(hdc, 2, 0, NULL);\r
+ LineTo (hdc, width-3,0);\r
+ LineTo (hdc, width-1, 2);\r
+ \r
+ SelectObject(hdc, hpold);\r
+ hpold = SelectObject(hdc, hpsh2);\r
+ LineTo (hdc, width-1, height-3); //vertical\r
+ LineTo (hdc, width-3, height-1);\r
+ LineTo (hdc, 2, height-1);\r
+ LineTo (hdc, 0, height-3);\r
+ SelectObject(hdc, hpold);\r
+ hpold = SelectObject(hdc, hpsh);\r
+\r
+ //MoveToEx( hdc, 0, height-3,0);\r
+ LineTo (hdc, 0, 2);\r
+ LineTo (hdc, 2, 0);\r
+\r
+ SelectObject(hdc, hpold);\r
+\r
+ //draw the highlight (vertical)\r
+ hpold = SelectObject(hdc, hpfg);\r
+ MoveToEx(hdc, width - 2, 3, NULL);\r
+ LineTo (hdc, width - 2, height - 2);\r
+ \r
+ //(horz)\r
+ MoveToEx(hdc, width - 3, height-2, NULL);\r
+ LineTo (hdc, 3, height-2);\r
+ SelectObject(hdc, hpold);\r
+ \r
+ //draw the background\r
+ InflateRect(&rect, -2, -2);\r
+ DrawCheckedRect(hdc, &rect, MAKE_PALETTERGB(bg), MAKE_PALETTERGB(fg));\r
+\r
+ //overwrite the top-left background pixel\r
+ SetPixel(hdc, 2, 2, MAKE_PALETTERGB(bg));\r
+\r
+ DeleteObject(hpsh);\r
+ DeleteObject(hpsh2);\r
+ DeleteObject(hpfg);\r
+ DeleteObject(hpbg);\r
+\r
+ \r
+ return hbm;\r
}\r
\r
\r
\r
void CopyColor(PALETTEENTRY *pe, COLORREF col)\r
{\r
- pe->peBlue = GetBValue(col);\r
- pe->peGreen = GetGValue(col);\r
- pe->peRed = GetRValue(col);\r
- pe->peFlags = 0;\r
+ pe->peBlue = GetBValue(col);\r
+ pe->peGreen = GetGValue(col);\r
+ pe->peRed = GetRValue(col);\r
+ pe->peFlags = 0;\r
}\r
\r
HPALETTE MakePaletteFromCols(COLORREF cols[], int nNumColours)\r
{\r
- LOGPALETTE *lp;\r
- HPALETTE hPalette;\r
+ LOGPALETTE *lp;\r
+ HPALETTE hPalette;\r
\r
- // Allocate memory for the logical palette\r
- lp = (LOGPALETTE *)HeapAlloc(\r
- GetProcessHeap(), 0, sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * nNumColours);\r
+ // Allocate memory for the logical palette\r
+ lp = (LOGPALETTE *)HeapAlloc(\r
+ GetProcessHeap(), 0, sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * nNumColours);\r
\r
- lp->palNumEntries = nNumColours;\r
- lp->palVersion = 0x300;\r
+ lp->palNumEntries = nNumColours;\r
+ lp->palVersion = 0x300;\r
\r
- //copy the colours into the logical palette format\r
- for(int i = 0; i < nNumColours; i++)\r
- {\r
- CopyColor(&lp->palPalEntry[i], cols[i]);\r
- }\r
+ //copy the colours into the logical palette format\r
+ for(int i = 0; i < nNumColours; i++)\r
+ {\r
+ CopyColor(&lp->palPalEntry[i], cols[i]);\r
+ }\r
\r
- // create palette!\r
- hPalette = CreatePalette(lp);\r
+ // create palette!\r
+ hPalette = CreatePalette(lp);\r
\r
- HeapFree(GetProcessHeap(), 0, lp);\r
+ HeapFree(GetProcessHeap(), 0, lp);\r
\r
- return hPalette;\r
+ return hPalette;\r
}\r