* Massachusetts. \r
*\r
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,\r
- * 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.\r
+ * 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.\r
*\r
* Enhancements Copyright 2005 Alessandro Scotti\r
*\r
RECT boardRect;\r
COLORREF lightSquareColor, darkSquareColor, whitePieceColor, \r
blackPieceColor, highlightSquareColor, premoveHighlightColor;\r
+COLORREF markerColor[8] = { 0x00FFFF, 0x0000FF, 0x00FF00, 0xFF0000, 0xFFFF00, 0xFF00FF, 0xFFFFFF, 0x000000 };\r
HPALETTE hPal;\r
ColorClass currentColorClass;\r
\r
static HBRUSH lightSquareBrush, darkSquareBrush,\r
blackSquareBrush, /* [HGM] for band between board and holdings */\r
explodeBrush, /* [HGM] atomic */\r
- markerBrush, /* [HGM] markers */\r
+ markerBrush[8], /* [HGM] markers */\r
whitePieceBrush, blackPieceBrush, iconBkgndBrush /*, outlineBrush*/;\r
static POINT gridEndpoints[(BOARD_RANKS + BOARD_FILES + 2) * 2];\r
static DWORD gridVertexCounts[BOARD_RANKS + BOARD_FILES + 2];\r
#if __GNUC__ && !defined(_winmajor)\r
#define oldDialog 0 /* cygwin doesn't define _winmajor; mingw does */\r
#else\r
+\r
#if defined(_winmajor)\r
#define oldDialog (_winmajor < 4)\r
#else\r
OPT_ChooseTellColor, OPT_ChooseChallengeColor, OPT_ChooseRequestColor,\r
OPT_ChooseSeekColor, OPT_ChooseNormalColor, OPT_ChooseBackgroundColor,\r
OPT_DefaultColors, OPT_DontColorize, IDC_Boxes, GPB_Colors, GPB_Premove,\r
- GPB_General, GPB_Alarm }, \r
+ GPB_General, GPB_Alarm, OPT_AutoCreate }, \r
{ DLG_BoardOptions, IDOK, IDCANCEL, OPT_SizeTiny, OPT_SizeTeeny, OPT_SizeDinky,\r
OPT_SizePetite, OPT_SizeSlim, OPT_SizeSmall, OPT_SizeMediocre, OPT_SizeMiddling,\r
OPT_SizeAverage, OPT_SizeModerate, OPT_SizeMedium, OPT_SizeBulky, OPT_SizeLarge,\r
backTextureSquareSize = 0; // kludge to force recalculation of texturemode\r
\r
if( appData.liteBackTextureFile && appData.liteBackTextureFile[0] != NULLCHAR && appData.liteBackTextureFile[0] != '*' ) {\r
+ if(liteBackTexture) DeleteObject(liteBackTexture);\r
liteBackTexture = LoadImage( 0, appData.liteBackTextureFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );\r
liteBackTextureMode = appData.liteBackTextureMode;\r
\r
}\r
\r
if( appData.darkBackTextureFile && appData.darkBackTextureFile[0] != NULLCHAR && appData.darkBackTextureFile[0] != '*' ) {\r
+ if(darkBackTexture) DeleteObject(darkBackTexture);\r
darkBackTexture = LoadImage( 0, appData.darkBackTextureFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );\r
darkBackTextureMode = appData.darkBackTextureMode;\r
\r
\r
if (SearchPath(NULL, "WinBoard.exe", NULL, MSG_SIZ, installDir, &filepart)) {\r
*filepart = NULLCHAR;\r
+ SetCurrentDirectory(installDir);\r
} else {\r
GetCurrentDirectory(MSG_SIZ, installDir);\r
}\r
InitDrawingColors();\r
screenHeight = GetSystemMetrics(SM_CYSCREEN);\r
screenWidth = GetSystemMetrics(SM_CXSCREEN);\r
+ InitPosition(0); // to set nr of ranks and files, which might be non-default through command-line args\r
for (ibs = (int) NUM_SIZES - 1; ibs >= 0; ibs--) {\r
/* Compute window size for each board size, and use the largest\r
size that fits on this screen as the default. */\r
p = q + 1;\r
} else {\r
q = mfp->faceName;\r
+\r
while (*p && !isdigit(*p)) {\r
*q++ = *p++;\r
if (q - mfp->faceName >= sizeof(mfp->faceName))\r
VOID\r
InitDrawingColors()\r
{\r
+ int i;\r
if (pLogPal == NULL) {\r
/* Allocate enough memory for a logical palette with\r
* PALETTESIZE entries and set the size and version fields\r
blackPieceBrush = CreateSolidBrush(blackPieceColor);\r
iconBkgndBrush = CreateSolidBrush(GetSysColor(COLOR_BACKGROUND));\r
explodeBrush = CreateSolidBrush(highlightSquareColor); // [HGM] atomic\r
- markerBrush = CreateSolidBrush(premoveHighlightColor); // [HGM] markers\r
- /* [AS] Force rendering of the font-based pieces */\r
+ for(i=0; i<8;i++) markerBrush[i] = CreateSolidBrush(markerColor[i]); // [HGM] markers\r
+\r
+ /* [AS] Force rendering of the font-based pieces */\r
if( fontBitmapSquareSize > 0 ) {\r
fontBitmapSquareSize = 0;\r
}\r
\r
/* [HGM] call with -2 uses old size (for if nr of files, ranks changes) */\r
if(boardSize == (BoardSize)(-2) ) boardSize = oldBoardSize;\r
+ if(boardSize == -1) return; // no size defined yet; abort (to allow early call of InitPosition)\r
oldBoardSize = boardSize;\r
\r
if(boardSize != SizeMiddling && boardSize != SizePetite && boardSize != SizeBulky && !appData.useFont)\r
boardSize = SizeMiddling;\r
}\r
}\r
- if(!appData.useFont && boardSize == SizePetite && (v == VariantShogi || v == VariantKnightmate)) boardSize = SizeMiddling; // no Unicorn in Petite\r
+ if(!appData.useFont && boardSize == SizePetite && (v == VariantKnightmate)) boardSize = SizeMiddling; // no Unicorn in Petite\r
\r
oldRect.left = wpMain.x; //[HGM] placement: remember previous window params\r
oldRect.top = wpMain.y;\r
}\r
\r
return result;\r
+\r
}\r
\r
BOOL IsDrawArrowEnabled()\r
HDC tmphdc;\r
HBITMAP hbm;\r
static char oldBorder[MSG_SIZ];\r
- int w = 600, h = 600;\r
+ int w = 600, h = 600, mode;\r
\r
if(strcmp(appData.border, oldBorder)) { // load new one when old one no longer valid\r
strncpy(oldBorder, appData.border, MSG_SIZ-1);\r
w = bi.bmWidth;\r
h = bi.bmHeight;\r
}\r
+ mode = SetStretchBltMode(hdc, COLORONCOLOR);\r
StretchBlt(hdc, boardRect.left, boardRect.top, boardRect.right - boardRect.left, \r
boardRect.bottom - boardRect.top, tmphdc, 0, 0, w, h, SRCCOPY);\r
+ SetStretchBltMode(hdc, mode);\r
SelectObject(tmphdc, hbm);\r
DeleteDC(tmphdc);\r
}\r
DisplayHoldingsCount(hdc, x, y, flipView, (int) board[row][column]);\r
else if( column == BOARD_RGHT) /* right align */\r
DisplayHoldingsCount(hdc, x, y, !flipView, (int) board[row][column]);\r
+ else if( piece == DarkSquare) DisplayHoldingsCount(hdc, x, y, 0, 0);\r
else\r
if (appData.monoMode) {\r
if (piece == EmptySquare) {\r
{\r
int square = color & 0x80;\r
HBRUSH oldBrush = SelectObject(hdcSeek, \r
- color == 0 ? markerBrush : color == 1 ? darkSquareBrush : explodeBrush);\r
+ color == 0 ? markerBrush[1] : color == 1 ? darkSquareBrush : explodeBrush);\r
color &= 0x7F;\r
if(square)\r
Rectangle(hdcSeek, boardRect.left+x - squareSize/9, boardRect.top+y - squareSize/9,\r
for (row = 0; row < BOARD_HEIGHT; row++) {\r
for (column = 0; column < BOARD_WIDTH; column++) {\r
if (marker[row][column]) { // marker changes only occur with full repaint!\r
- HBRUSH oldBrush = SelectObject(hdcmem, \r
- marker[row][column] == 2 ? markerBrush : explodeBrush);\r
+ HBRUSH oldBrush = SelectObject(hdcmem, markerBrush[marker[row][column]-1]);\r
SquareToPos(row, column, &x, &y);\r
Ellipse(hdcmem, x + squareSize/4, y + squareSize/4,\r
x + 3*squareSize/4, y + 3*squareSize/4);\r
}\r
\r
shiftKey = GetKeyState(VK_SHIFT) < 0; // [HGM] remember last shift status\r
+ controlKey = GetKeyState(VK_CONTROL) < 0; // [HGM] remember last shift status\r
\r
switch (message) {\r
case WM_LBUTTONDOWN:\r
dragInfo.pos = pt;\r
}\r
if (appData.highlightDragging) {\r
- SetHighlights(fromX, fromY, x, y);\r
+ HoverEvent(highlightInfo.sq[1].x, highlightInfo.sq[1].y, x, y);\r
if( IsDrawArrowEnabled() && (x < 0 || x >= BOARD_WIDTH || y < 0 || y >= BOARD_HEIGHT) ) {\r
full_repaint = TRUE;\r
}\r
FILE *f;\r
UINT number;\r
char fileTitle[MSG_SIZ];\r
- char buf[MSG_SIZ];\r
static SnapData sd;\r
static int peek=0;\r
\r
nnew = RealizePalette(hdc);\r
if (nnew > 0) {\r
paletteChanged = TRUE;\r
+\r
InvalidateRect(hwnd, &boardRect, FALSE);\r
}\r
ReleaseDC(hwnd, hdc);\r
}\r
break;\r
\r
+ case IDM_CreateBook:\r
+ CreateBookEvent();\r
+ break;\r
+\r
case IDM_CopyGame:\r
CopyGameToClipboard();\r
break;\r
BoardOptionsPopup(hwnd);\r
break;\r
\r
+ case IDM_ThemeOptions:\r
+ ThemeOptionsPopup(hwnd);\r
+ break;\r
+\r
case IDM_EnginePlayOptions:\r
EnginePlayOptionsPopup(hwnd);\r
break;\r
/* see wedittags.c for Edit Tags functions */\r
\r
\r
-VOID\r
+int\r
ICSInitScript()\r
{\r
FILE *f;\r
if (f != NULL) {\r
ProcessICSInitScript(f);\r
fclose(f);\r
+ return TRUE;\r
}\r
}\r
+ return FALSE;\r
}\r
\r
\r
}\r
return 0;\r
}\r
+\r
+char *\r
+Col2Text (int n)\r
+{\r
+ static int i=0;\r
+ static char col[8][20];\r
+ COLORREF color = *(COLORREF *) colorVariable[n];\r
+ i = i+1 & 7;\r
+ snprintf(col[i], 20, "#%02lx%02lx%02lx", color&0xff, (color>>8)&0xff, (color>>16)&0xff);\r
+ return col[i];\r
+}\r
+\r
+void\r
+ActivateTheme (int new)\r
+{ // Redo initialization of features depending on options that can occur in themes\r
+ InitTextures();\r
+ if(new) InitDrawingColors();\r
+ fontBitmapSquareSize = 0; // request creation of new font pieces\r
+ InitDrawingSizes(boardSize, 0);\r
+ InvalidateRect(hwndMain, NULL, TRUE);\r
+}\r