X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=winboard%2Fwinboard.c;h=87eb9eb129d0c083ccc84219ae8611d94d95b49c;hb=d91dfdc72d9abeb6733b72c9bef81ccee55b9735;hp=e943a22a8f71361f9340374f761e98998ffbbb77;hpb=448a8a613868681c5505ea5c92ab28c60ec392d4;p=xboard.git diff --git a/winboard/winboard.c b/winboard/winboard.c index e943a22..87eb9eb 100644 --- a/winboard/winboard.c +++ b/winboard/winboard.c @@ -134,6 +134,8 @@ typedef struct { static HighlightInfo highlightInfo = { {{-1, -1}, {-1, -1}} }; static HighlightInfo premoveHighlightInfo = { {{-1, -1}, {-1, -1}} }; +static HighlightInfo partnerHighlightInfo = { {{-1, -1}, {-1, -1}} }; +static HighlightInfo oldPartnerHighlight = { {{-1, -1}, {-1, -1}} }; typedef struct { // [HGM] atomic int fromX, fromY, toX, toY, radius; @@ -836,8 +838,6 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine) EngineOutputPopUp(); } - InitBackEnd2(); - /* Make the window visible; update its client area; and return "success" */ EnsureOnScreen(&wpMain.x, &wpMain.y, minX, minY); wp.length = sizeof(WINDOWPLACEMENT); @@ -850,6 +850,8 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine) wp.rcNormalPosition.bottom = wpMain.y + wpMain.height; SetWindowPlacement(hwndMain, &wp); + InitBackEnd2(); // [HGM] moved until after all windows placed, to save correct position if fatal error on engine start + if(!appData.noGUI) SetWindowPos(hwndMain, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); @@ -1220,7 +1222,14 @@ PrintCommPortSettings(FILE *f, char *name) int MySearchPath(char *installDir, char *name, char *fullname) { - char *dummy; + char *dummy, buf[MSG_SIZ]; + if(name[0] == '%' && strchr(name+1, '%')) { // [HGM] recognize %*% as environment variable + strcpy(buf, name+1); + *strchr(buf, '%') = 0; + installDir = getenv(buf); + sprintf(fullname, "%s\\%s", installDir, strchr(name+1, '%')+1); + return strlen(fullname); + } return (int) SearchPath(installDir, name, NULL, MSG_SIZ, fullname, &dummy); } @@ -2489,23 +2498,14 @@ DrawHighlightOnDC(HDC hdc, BOOLEAN on, int x, int y, int pen) } VOID -DrawHighlightsOnDC(HDC hdc) +DrawHighlightsOnDC(HDC hdc, HighlightInfo *h, int pen) { int i; for (i=0; i<2; i++) { - if (highlightInfo.sq[i].x >= 0 && highlightInfo.sq[i].y >= 0) + if (h->sq[i].x >= 0 && h->sq[i].y >= 0) DrawHighlightOnDC(hdc, TRUE, - highlightInfo.sq[i].x, highlightInfo.sq[i].y, - HIGHLIGHT_PEN); - } - for (i=0; i<2; i++) { - if (premoveHighlightInfo.sq[i].x >= 0 && - premoveHighlightInfo.sq[i].y >= 0) { - DrawHighlightOnDC(hdc, TRUE, - premoveHighlightInfo.sq[i].x, - premoveHighlightInfo.sq[i].y, - PREMOVE_PEN); - } + h->sq[i].x, h->sq[i].y, + pen); } } @@ -3289,6 +3289,29 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board) } } } + } else { // nr == 1 + partnerHighlightInfo.sq[0].y = board[EP_STATUS-4]; + partnerHighlightInfo.sq[0].x = board[EP_STATUS-3]; + partnerHighlightInfo.sq[1].y = board[EP_STATUS-2]; + partnerHighlightInfo.sq[1].x = board[EP_STATUS-1]; + for (i=0; i<2; i++) { + if (partnerHighlightInfo.sq[i].x >= 0 && + partnerHighlightInfo.sq[i].y >= 0) { + SquareToPos(partnerHighlightInfo.sq[i].y, + partnerHighlightInfo.sq[i].x, &x, &y); + clips[num_clips++] = + CreateRectRgn(x - lineGap, y - lineGap, + x + squareSize + lineGap, y + squareSize + lineGap); + } + if (oldPartnerHighlight.sq[i].x >= 0 && + oldPartnerHighlight.sq[i].y >= 0) { + SquareToPos(oldPartnerHighlight.sq[i].y, + oldPartnerHighlight.sq[i].x, &x, &y); + clips[num_clips++] = + CreateRectRgn(x - lineGap, y - lineGap, + x + squareSize + lineGap, y + squareSize + lineGap); + } + } } } else { fullrepaint = TRUE; @@ -3379,14 +3402,21 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board) ExtSelectClipRgn(hdcmem, clips[num_clips++], RGN_OR); } DrawGridOnDC(hdcmem); - DrawHighlightsOnDC(hdcmem); + DrawHighlightsOnDC(hdcmem, &highlightInfo, HIGHLIGHT_PEN); + DrawHighlightsOnDC(hdcmem, &premoveHighlightInfo, PREMOVE_PEN); DrawBoardOnDC(hdcmem, board, tmphdc); oldBrush = SelectObject(hdcmem, explodeBrush); Ellipse(hdcmem, x-r, y-r, x+r, y+r); SelectObject(hdcmem, oldBrush); } else { DrawGridOnDC(hdcmem); - if(nr == 0) DrawHighlightsOnDC(hdcmem); // [HGM] dual: no highlights on right board yet + if(nr == 0) { // [HGM] dual: decide which highlights to draw + DrawHighlightsOnDC(hdcmem, &highlightInfo, HIGHLIGHT_PEN); + DrawHighlightsOnDC(hdcmem, &premoveHighlightInfo, PREMOVE_PEN); + } else { + DrawHighlightsOnDC(hdcmem, &partnerHighlightInfo, HIGHLIGHT_PEN); + oldPartnerHighlight = partnerHighlightInfo; + } DrawBoardOnDC(hdcmem, board, tmphdc); } if(nr == 0) // [HGM] dual: markers only on left board @@ -3774,20 +3804,20 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) if (PtInRect((LPRECT) &whiteRect, pt)) { if (gameMode == EditPosition) { SetWhiteToPlayEvent(); + } else if (gameMode == EditGame || GetKeyState(VK_SHIFT) < 0) { + AdjustClock(flipClock, -1); } else if (gameMode == IcsPlayingBlack || gameMode == MachinePlaysWhite) { CallFlagEvent(); - } else if (gameMode == EditGame) { - AdjustClock(flipClock, -1); } } else if (PtInRect((LPRECT) &blackRect, pt)) { if (gameMode == EditPosition) { SetBlackToPlayEvent(); + } else if (gameMode == EditGame || GetKeyState(VK_SHIFT) < 0) { + AdjustClock(!flipClock, -1); } else if (gameMode == IcsPlayingWhite || gameMode == MachinePlaysBlack) { CallFlagEvent(); - } else if (gameMode == EditGame) { - AdjustClock(!flipClock, -1); } } dragInfo.start.x = dragInfo.start.y = -1; @@ -3867,10 +3897,11 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) if(y == -2) { /* [HGM] right mouse button in clock area edit-game mode ups clock */ if (PtInRect((LPRECT) &whiteRect, pt)) { - if (gameMode == EditGame) AdjustClock(flipClock, 1); + if (gameMode == EditGame || GetKeyState(VK_SHIFT) < 0) AdjustClock(flipClock, 1); } else if (PtInRect((LPRECT) &blackRect, pt)) { - if (gameMode == EditGame) AdjustClock(!flipClock, 1); + if (gameMode == EditGame || GetKeyState(VK_SHIFT) < 0) AdjustClock(!flipClock, 1); } + break; } DrawPosition(TRUE, NULL); @@ -6126,6 +6157,12 @@ TypeInNameDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) GetDlgItemText(hDlg, OPT_Name, move, sizeof(move)); appData.userName = strdup(move); SetUserLogo(); + SetGameInfo(); + if(gameMode == MachinePlaysWhite || gameMode == MachinePlaysBlack) { + sprintf(move, "%s vs. %s", gameInfo.white, gameInfo.black); + DisplayTitle(move); + } + EndDialog(hDlg, TRUE); return TRUE;