X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=winboard%2Fwinboard.c;h=8a965c4ee1d9d7ad3f2e8d653e4d24c5109cce9c;hb=18ccb0da4151e649009780bd4db7ecbdea7a93c8;hp=b34afa101f7a9343ced68af0f1b5260d7ea19b3f;hpb=acca181c7d39eea4904084170f8b5fae08361846;p=xboard.git diff --git a/winboard/winboard.c b/winboard/winboard.c index b34afa1..8a965c4 100644 --- a/winboard/winboard.c +++ b/winboard/winboard.c @@ -153,6 +153,7 @@ char *programName; char *settingsFileName; Boolean saveSettingsOnExit; char installDir[MSG_SIZ]; +int errorExitStatus; BoardSize boardSize; Boolean chessProgram; @@ -190,6 +191,7 @@ static HBITMAP pieceBitmap[3][(int) BlackPawn]; /* [HGM] nr of bitmaps referred static HBRUSH lightSquareBrush, darkSquareBrush, blackSquareBrush, /* [HGM] for band between board and holdings */ explodeBrush, /* [HGM] atomic */ + markerBrush, /* [HGM] markers */ whitePieceBrush, blackPieceBrush, iconBkgndBrush /*, outlineBrush*/; static POINT gridEndpoints[(BOARD_RANKS + BOARD_FILES + 2) * 2]; static DWORD gridVertexCounts[BOARD_RANKS + BOARD_FILES + 2]; @@ -884,6 +886,9 @@ InitMenuChecks() #define ICS_TEXT_MENU_SIZE (IDM_CommandXLast - IDM_CommandX + 1) #define XBOARD FALSE +#define OPTCHAR "/" +#define SEPCHAR "=" + #include "args.h" // front-end part of option handling @@ -1849,6 +1854,7 @@ InitDrawingColors() blackPieceBrush = CreateSolidBrush(blackPieceColor); iconBkgndBrush = CreateSolidBrush(GetSysColor(COLOR_BACKGROUND)); explodeBrush = CreateSolidBrush(highlightSquareColor); // [HGM] atomic + markerBrush = CreateSolidBrush(premoveHighlightColor); // [HGM] markers /* [AS] Force rendering of the font-based pieces */ if( fontBitmapSquareSize > 0 ) { fontBitmapSquareSize = 0; @@ -3308,6 +3314,18 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board) DrawHighlightsOnDC(hdcmem); DrawBoardOnDC(hdcmem, board, tmphdc); } + for (row = 0; row < BOARD_HEIGHT; row++) { + for (column = 0; column < BOARD_WIDTH; column++) { + if (marker[row][column]) { // marker changes only occur with full repaint! + HBRUSH oldBrush = SelectObject(hdcmem, + marker[row][column] == 2 ? markerBrush : explodeBrush); + SquareToPos(row, column, &x, &y); + Ellipse(hdcmem, x + squareSize/4, y + squareSize/4, + x + 3*squareSize/4, y + 3*squareSize/4); + SelectObject(hdcmem, oldBrush); + } + } + } if(logoHeight) { HBITMAP whiteLogo = (HBITMAP) first.programLogo, blackLogo = (HBITMAP) second.programLogo; if(appData.autoLogo) { @@ -3701,6 +3719,7 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) break; case WM_MOUSEMOVE: + MovePV(pt.x - boardRect.left, pt.y - boardRect.top, boardRect.bottom - boardRect.top); if ((appData.animateDragging || appData.highlightDragging) && (wParam & MK_LBUTTON) && dragInfo.from.x >= 0) @@ -3738,6 +3757,12 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) } break; + case WM_MBUTTONUP: + case WM_RBUTTONUP: + ReleaseCapture(); + UnLoadPV(); + break; + case WM_MBUTTONDOWN: case WM_RBUTTONDOWN: ErrorPopDown(); @@ -3761,8 +3786,10 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) DrawPosition(TRUE, NULL); switch (gameMode) { - case EditPosition: case IcsExamining: + if(x < BOARD_LEFT || x >= BOARD_RGHT) break; + case EditPosition: + if (x == BOARD_LEFT-1 || x == BOARD_RGHT) break; if (x < 0 || y < 0) break; fromX = x; fromY = y; @@ -3782,15 +3809,29 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) MenuPopup(hwnd, pt, LoadMenu(hInst, "ShogiPieceMenu"), -1); } break; + case IcsObserving: + if(!appData.icsEngineAnalyze) break; case IcsPlayingWhite: case IcsPlayingBlack: - case EditGame: + if(!appData.zippyPlay) goto noZip; case MachinePlaysWhite: case MachinePlaysBlack: - if (appData.testLegality && - gameInfo.variant != VariantBughouse && - gameInfo.variant != VariantCrazyhouse) break; + case TwoMachinesPlay: + case AnalyzeMode: + case AnalyzeFile: + if (!appData.dropMenu) { + SetCapture(hwndMain); + LoadPV(pt.x - boardRect.left, pt.y - boardRect.top); + break; + } + if(gameMode == TwoMachinesPlay || gameMode == AnalyzeMode || + gameMode == AnalyzeFile || gameMode == IcsObserving) break; + case EditGame: + noZip: if (x < 0 || y < 0) break; + if (!appData.dropMenu || appData.testLegality && + gameInfo.variant != VariantBughouse && + gameInfo.variant != VariantCrazyhouse) break; fromX = x; fromY = y; hmenu = LoadMenu(hInst, "DropPieceMenu"); @@ -6062,6 +6103,7 @@ ErrorPopDown() if (errorDialog == NULL) return; DestroyWindow(errorDialog); errorDialog = NULL; + if(errorExitStatus) ExitEvent(errorExitStatus); } LRESULT CALLBACK