CardButton::CardButton(CardWindow &parent, int Id, TCHAR *szText, UINT Style, bool visible,\r
int x, int y, int width, int height)\r
\r
- : parentWnd(parent), id(Id), fVisible(visible), uStyle(Style), ButtonCallback(0)\r
+ : parentWnd(parent), id(Id), uStyle(Style), fVisible(visible), ButtonCallback(0)\r
{\r
crText = RGB(255,255,255);\r
crBack = RGB(0, 128, 0);\r
\r
COLORREF ColorDarker(COLORREF col, double ratio)\r
{\r
- static double Hue, Lum, Sat;\r
-\r
- //RGBtoHLS(col, &Hue, &Lum, &Sat);\r
-\r
- //col = HLStoRGB(Hue, fMax(0.0,Lum-ratio), Sat);\r
-\r
return ColorScaleHSL(col, RGB(0,0,0), ratio);\r
-\r
- //return col;\r
}\r
\r
COLORREF ColorLighter(COLORREF col, double ratio)\r
{\r
- static double Hue, Lum, Sat;\r
-\r
- //RGBtoHLS(col, &Hue, &Lum, &Sat);\r
-\r
- //col = HLStoRGB(Hue, fMin(1.0,Lum+ratio), Sat);\r
-\r
return ColorScaleHSL(col, RGB(255,255,255), ratio);\r
-\r
- //return col;\r
}\r
\r
//\r
\r
if(count[index] > 0) \r
count[index]--;\r
-}
\ No newline at end of file
+}\r
\r
void LoadCardBitmaps(void);\r
\r
-static bool __CARDLIB_ACES_HIGH = false;\r
+//static bool __CARDLIB_ACES_HIGH = false;\r
extern double __CARDZOOMSPEED;\r
\r
//\r
void PaintRect(HDC hdc, RECT *rect, COLORREF colour);\r
\r
CardRegion::CardRegion(CardWindow &parent, int Id, bool visible, int x, int y, int xOffset, int yOffset) \r
-: parentWnd(parent), id(Id), fVisible(visible), xpos(x), ypos(y), xoffset(xOffset), yoffset(yOffset)\r
+: id(Id), parentWnd(parent), xpos(x), ypos(y), xoffset(xOffset), yoffset(yOffset), fVisible(visible)\r
{\r
width = __cardwidth;\r
height = __cardheight;\r
\r
nFlashCount = 0;\r
fFlashVisible = false;\r
- uFlashTimer = -1;\r
+ uFlashTimer = (UINT)-1;\r
\r
fMouseDragging = false;\r
\r
\r
void CardRegion::StopFlash()\r
{\r
- if(uFlashTimer != -1)\r
+ if(uFlashTimer != (UINT)-1)\r
{\r
KillTimer((HWND)parentWnd, uFlashTimer);\r
nFlashCount = 0;\r
- uFlashTimer = -1;\r
+ uFlashTimer = (UINT)-1;\r
fFlashVisible = true;\r
}\r
}\r
\r
void CardRegion::DoFlash()\r
{\r
- if(uFlashTimer != -1)\r
+ if(uFlashTimer != (UINT)-1)\r
{\r
fFlashVisible = !fFlashVisible;\r
\r
if(--nFlashCount == 0)\r
{\r
KillTimer((HWND)parentWnd, uFlashTimer);\r
- uFlashTimer = -1;\r
+ uFlashTimer = (UINT)-1;\r
fFlashVisible = true;\r
}\r
\r
}\r
\r
return true;\r
-}
\ No newline at end of file
+}\r
\r
bool fMouseDragging;\r
\r
- int xoffset; //direction that cards take\r
- int yoffset;\r
- \r
int xpos; //coordinates of stack\r
int ypos;\r
\r
+ int xoffset; //direction that cards take\r
+ int yoffset;\r
+\r
int width; //stack-size of all cards\r
int height;\r
\r
//\r
#include <windows.h>\r
#include <math.h>\r
+#include <stdio.h>\r
\r
#include "cardlib.h"\r
#include "cardwindow.h"\r
#include "cardregion.h"\r
\r
+#if 1\r
+#define TRACE(s)\r
+#else\r
+#define TRACE(s) printf("%s(%i): %s",__FILE__,__LINE__,s)\r
+#endif\r
+\r
double __CARDZOOMSPEED = 32;\r
\r
int ClipCard(HDC hdc, int x, int y, int width, int height);\r
\r
// If have found a stack to drop onto\r
//\r
+ TRACE ( "can I drop card?\n" );\r
if(pDestStack && pDestStack->CanDropCards(dragstack)) \r
{\r
+ TRACE ( "yes, dropping card\n" );\r
hdc = GetDC((HWND)parentWnd);\r
// UseNicePalette(hdc);\r
ZoomCard(hdc, x - mousexoffset, y - mouseyoffset, pDestStack);\r
pDestStack->AddCallback(*pDestStack, pDestStack->cardstack);//index, deststack->numcards);\r
\r
RedrawIfNotDim(pDestStack, true);\r
- } \r
+ TRACE ( "done dropping card\n" );\r
+ }\r
\r
//\r
// Otherwise, let the cards snap back onto this stack\r
//\r
else\r
{\r
- \r
+ TRACE ( "no, putting card back\n" );\r
hdc = GetDC((HWND)parentWnd);\r
+ TRACE ( "calling ZoomCard()\n" );\r
ZoomCard(hdc, x - mousexoffset, y - mouseyoffset, this);\r
+ TRACE ( "cardstack += dragstack\n" );\r
cardstack += dragstack;\r
+ TRACE ( "calling ReleaseDC()\n" );\r
ReleaseDC((HWND)parentWnd, hdc);\r
\r
+ TRACE ( "calling Update()\n" );\r
Update(); //Update this stack's card count + size\r
+ TRACE ( "done putting card back\n" );\r
}\r
\r
ReleaseDragBitmaps();\r
ReleaseCapture();\r
\r
+ TRACE ( "OnLButtonUp() done\n" );\r
return true;\r
}\r
\r
#else\r
void CardRegion::ZoomCard(HDC hdc, int xpos, int ypos, CardRegion *pDestStack)\r
{\r
+ TRACE ( "ENTER ZoomCard()\n" );\r
double dx, dy, x ,y;\r
int apparentcards;\r
x = (double)xpos; y = (double)ypos;\r
//normalise the motion vector\r
dx = idestx - x;\r
dy = idesty - y;\r
+ if ( fabs(dx) + fabs(dy) < 0.001f )\r
+ {\r
+ MoveDragCardTo(hdc, idestx, idesty);\r
+ return;\r
+ }\r
double recip = 1.0 / sqrt(dx*dx + dy*dy);\r
dx *= recip * __CARDZOOMSPEED; dy *= recip * __CARDZOOMSPEED;\r
\r
\r
ix = (int)x;\r
iy = (int)y;\r
- if(dx < 0.0 && ix < idestx) ix = idestx; \r
+\r
+ if(dx < 0.0 && ix < idestx) ix = idestx;\r
else if(dx > 0.0 && ix > idestx) ix = idestx;\r
else attarget = false;\r
\r
\r
Sleep(10);\r
}\r
+ TRACE ( "EXIT ZoomCard()\n" );\r
}\r
#endif\r
{\r
int i;\r
RECT rect;\r
- int xpos = 10;\r
HPALETTE hOldPal;\r
\r
hOldPal = UseNicePalette(hdc, __hPalette);\r
TARGET_TYPE = program\r
\r
TARGET_APPTYPE = windows\r
+# change to console for debugging purposes...\r
+#TARGET_APPTYPE = console\r
\r
TARGET_INSTALLDIR = system32\r
\r
#include <windows.h>\r
#include <commctrl.h>\r
#include <tchar.h>\r
+#include <stdio.h>\r
#include "resource.h"\r
#include "cardlib/cardlib.h"\r
//#include "../catch22lib/trace.h"\r
#include "solitaire.h"\r
\r
+#if 1\r
+#define TRACE(s)\r
+#else\r
+#define TRACE(s) printf("%s(%i): %s",__FILE__,__LINE__,s)\r
+#endif\r
+\r
CardStack activepile;\r
bool fGameStarted = false;\r
\r
void NewGame(void)\r
{\r
+ TRACE("ENTER NewGame()\n");\r
int i, j;\r
\r
SolWnd.EmptyStacks();\r
SolWnd.Redraw();\r
\r
fGameStarted = false;\r
+ TRACE("EXIT NewGame()\n");\r
}\r
\r
//\r
//\r
bool CARDLIBPROC RowStackDragProc(CardRegion &stackobj, int iNumDragCards)\r
{\r
+ TRACE("ENTER RowStackDragProc()\n");\r
int numfacedown;\r
int numcards;\r
\r
\r
numcards = stackobj.NumCards();\r
\r
+ TRACE("EXIT RowStackDragProc()\n");\r
if(iNumDragCards <= numcards-numfacedown)\r
return true;\r
else\r
//\r
bool CARDLIBPROC RowStackDropProc(CardRegion &stackobj, const CardStack &dragcards)\r
{\r
+ TRACE("ENTER RowStackDropProc()\n");\r
Card dragcard = dragcards[dragcards.NumCards() - 1];\r
\r
//if we are empty, can only drop a stack with a King at bottom\r
if(stackobj.NumCards() == 0)\r
{\r
if(dragcard.LoVal() != 13)\r
+ {\r
+ TRACE("EXIT RowStackDropProc(false)\n");\r
return false;\r
+ }\r
}\r
else\r
{\r
\r
//can only drop if card is 1 less\r
if(mystack[0].LoVal() != dragcard.LoVal() + 1)\r
+ {\r
+ TRACE("EXIT RowStackDropProc(false)\n");\r
return false;\r
+ }\r
\r
//can only drop if card is different colour\r
if( mystack[0].IsBlack() && !dragcard.IsRed() ||\r
!mystack[0].IsBlack() && dragcard.IsRed() )\r
+ {\r
+ TRACE("EXIT RowStackDropProc(false)\n");\r
return false;\r
+ }\r
}\r
\r
+ TRACE("EXIT RowStackDropProc(true)\n");\r
return true;\r
}\r
\r
//\r
bool CanDrop(CardRegion &stackobj, Card card)\r
{\r
+ TRACE("ENTER CanDrop()\n");\r
int topval;\r
\r
const CardStack &cardstack = stackobj.GetCardStack();\r
{\r
if(card.Suit() != cardstack[0].Suit())\r
{\r
+ TRACE("EXIT CanDrop()\n");\r
return false;\r
}\r
\r
\r
//make sure 1 higher\r
if(card.LoVal() != (topval + 1))\r
+ {\r
+ TRACE("EXIT CanDrop()\n");\r
return false;\r
+ }\r
\r
+ TRACE("EXIT CanDrop()\n");\r
return true;\r
}\r
\r
//\r
bool CARDLIBPROC SuitStackDropProc(CardRegion &stackobj, const CardStack &dragcards)\r
{\r
- int topval = 0;\r
-\r
+ TRACE("ENTER SuitStackDropProc()\n");\r
//only drop 1 card at a time\r
if(dragcards.NumCards() != 1)\r
+ {\r
+ TRACE("EXIT SuitStackDropProc()\n");\r
return false;\r
+ }\r
\r
- return CanDrop(stackobj, dragcards[0]);\r
+ bool b = CanDrop(stackobj, dragcards[0]);\r
+ TRACE("EXIT SuitStackDropProc()\n");\r
+ return b;\r
}\r
\r
//\r
//\r
void CARDLIBPROC RowStackClickProc(CardRegion &stackobj, int iNumClicked)\r
{\r
+ TRACE("ENTER RowStackClickProc()\n");\r
int numfacedown;\r
\r
stackobj.GetFaceDirection(&numfacedown);\r
stackobj.SetFaceDirection(CS_FACE_DOWNUP, numfacedown);\r
stackobj.Redraw();\r
}\r
+ TRACE("EXIT RowStackClickProc()\n");\r
}\r
\r
//\r
//\r
CardRegion *FindSuitStackFromCard(Card card)\r
{\r
+ TRACE("ENTER FindSuitStackFromCard()\n");\r
for(int i = 0; i < 4; i++)\r
{\r
if(CanDrop(*pSuitStack[i], card))\r
+ {\r
+ TRACE("EXIT FindSuitStackFromCard()\n");\r
return pSuitStack[i];\r
+ }\r
}\r
\r
+ TRACE("EXIT FindSuitStackFromCard()\n");\r
return 0;\r
}\r
\r
//\r
void CARDLIBPROC SuitStackAddProc(CardRegion &stackobj, const CardStack &added)\r
{\r
+ TRACE("ENTER SuitStackAddProc()\n");\r
bool fGameOver = true;\r
\r
for(int i = 0; i < 4; i++)\r
pSuitStack[i]->Flash(11, 100);\r
}\r
}\r
+ TRACE("EXIT SuitStackAddProc()\n");\r
}\r
\r
//\r
//\r
void CARDLIBPROC RowStackDblClickProc(CardRegion &stackobj, int iNumClicked)\r
{\r
+ TRACE("ENTER RowStackDblClickProc()\n");\r
//can only move 1 card at a time\r
if(iNumClicked != 1)\r
+ {\r
+ TRACE("EXIT RowStackDblClickProc()\n");\r
return;\r
+ }\r
\r
//find a suit-stack to move the card to...\r
const CardStack &cardstack = stackobj.GetCardStack();\r
//AddProc callbacks called for us on the destination stacks...\r
stackobj.SimulateDrag(pDest, 1, true);\r
}\r
+ TRACE("EXIT RowStackDblClickProc()\n");\r
}\r
\r
//\r
//\r
void CARDLIBPROC PileDblClickProc(CardRegion &stackobj, int iNumClicked)\r
{\r
+ TRACE("ENTER PileDblClickProc()\n");\r
RowStackDblClickProc(stackobj, iNumClicked);\r
+ TRACE("EXIT PileDblClickProc()\n");\r
}\r
\r
//\r
//\r
void CARDLIBPROC PileRemoveProc(CardRegion &stackobj, int iItems)\r
{\r
+ TRACE("ENTER PileRemoveProc()\n");\r
//modify our "virtual" pile by removing the same card\r
//that was removed from the physical card stack\r
activepile.Pop(iItems);\r
stackobj.SetOffsets(0,0);\r
stackobj.SetCardStack(activepile);\r
}\r
+ TRACE("EXIT PileRemoveProc()\n");\r
}\r
\r
//\r
//\r
void CARDLIBPROC DeckClickProc(CardRegion &stackobj, int iNumClicked)\r
{\r
+ TRACE("ENTER DeckClickProc()\n");\r
CardStack cardstack = stackobj.GetCardStack();\r
CardStack pile = pPile->GetCardStack();\r
\r
pPile->SetCardStack(pile);\r
\r
SolWnd.Redraw();\r
+ TRACE("EXIT DeckClickProc()\n");\r
}\r
lstrcpy(ptr + 1, szExt);\r
}\r
\r
+int main ( int argc, char** argv )\r
+{\r
+ return WinMain ( NULL, NULL, NULL, SW_SHOW );\r
+}\r
+\r
//\r
// Main entry point\r
//\r