}
if (appData.highlightDragging) {
SetHighlights(fromX, fromY, -1, -1);
+ } else {
+ ClearHighlights();
}
} else fromX = fromY = -1;
return;
if(x >= BOARD_LEFT && x < BOARD_RGHT) clearFlag = 1; // and defer click-click move of empty-square to up-click
return;
}
- /* Finish clickclick move */
- if (appData.animate || appData.highlightLastMove) {
- SetHighlights(fromX, fromY, toX, toY);
- } else {
- ClearHighlights();
- }
if(HasPromotionChoice(fromX, fromY, toX, toY, &promoChoice, FALSE)) {
if(appData.sweepSelect) {
ChessSquare piece = boards[currentMove][fromY][fromX];
}
return; // promo popup appears on up-click
}
+ /* Finish clickclick move */
+ if (appData.animate || appData.highlightLastMove) {
+ SetHighlights(fromX, fromY, toX, toY);
+ } else {
+ ClearHighlights();
+ }
} else {
/* Finish drag move */
if (appData.highlightLastMove) {
AnimState anims[NrOfAnims];
static void DrawSquare P((int row, int column, ChessSquare piece, int do_flash));
+static Boolean IsDrawArrowEnabled P((void));
+static void DrawArrowHighlight P((int fromX, int fromY, int toX,int toY));
+static void ArrowDamage P((int s_col, int s_row, int d_col, int d_row));
static void
drawHighlight (int file, int rank, int type)
void
SetHighlights (int fromX, int fromY, int toX, int toY)
{
+ int arrow = hi2X > 0 && IsDrawArrowEnabled();
+
if (hi1X != fromX || hi1Y != fromY) {
if (hi1X >= 0 && hi1Y >= 0) {
drawHighlight(hi1X, hi1Y, 0);
drawHighlight(hi2X, hi2Y, 0);
}
}
+
+ if(arrow) // there currently is an arrow displayed
+ ArrowDamage(hi1X, hi1Y, hi2X, hi2Y); // mark which squares it damaged
+
if (hi1X != fromX || hi1Y != fromY) {
if (fromX >= 0 && fromY >= 0) {
drawHighlight(fromX, fromY, 1);
}
}
- if(toX<0) // clearing the highlights must have damaged arrow
- DrawArrowHighlight(hi1X, hi1Y, hi2X, hi2Y); // for now, redraw it (should really be cleared!)
-
hi1X = fromX;
hi1Y = fromY;
hi2X = toX;
hi2Y = toY;
+
+ if(arrow || toX < 0 && IsDrawArrowEnabled())
+ DrawPosition(FALSE, NULL); // repair any arrow damage, or draw a new one
}
void
}
/* Draw an arrow between two points using current settings */
-void
+static void
DrawArrowBetweenPoints (int s_x, int s_y, int d_x, int d_y)
{
Pnt arrow[8];
// Polygon( hdc, arrow, 7 );
}
-void
+static void
ArrowDamage (int s_col, int s_row, int d_col, int d_row)
{
int hor, vert, i, n = partnerUp * twoBoards;
}
/* [AS] Draw an arrow between two squares */
-void
+static void
DrawArrowBetweenSquares (int s_col, int s_row, int d_col, int d_row)
{
int s_x, s_y, d_x, d_y;
ArrowDamage(s_col, s_row, d_col, d_row);
}
-Boolean
+static Boolean
IsDrawArrowEnabled ()
{
return (appData.highlightMoveWithArrow || twoBoards && partnerUp) && squareSize >= 32;
}
-void
+static void
DrawArrowHighlight (int fromX, int fromY, int toX,int toY)
{
if( IsDrawArrowEnabled() && fromX >= 0 && fromY >= 0 && toX >= 0 && toY >= 0)
void CopyRectangle P((AnimNr anr, int srcBuf, int destBuf, int srcX, int srcY, int width, int height, int destX, int destY));
void SetDragPiece P((AnimNr anr, ChessSquare piece));
void DragPieceMove P((int x, int y));
-void DrawArrowHighlight P((int fromX, int fromY, int toX,int toY));
-Boolean IsDrawArrowEnabled P((void));
extern int damage[2][BOARD_RANKS][BOARD_FILES];