From 42e494323a53e20c933712108c261ae0bb27f254 Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Wed, 3 Oct 2012 12:00:07 +0200 Subject: [PATCH] Redo arrow highlighting with cairo --- xboard.c | 32 +++++++++++++++++++++++++------- 1 files changed, 25 insertions(+), 7 deletions(-) diff --git a/xboard.c b/xboard.c index 92896f4..60a5632 100644 --- a/xboard.c +++ b/xboard.c @@ -3878,14 +3878,32 @@ SetDragPiece (AnimNr anr, ChessSquare piece) /* [AS] Arrow highlighting support */ -void -DrawPolygon (Pnt arrow[], int nr) -{ - XPoint pts[10]; +void DrawPolygon(Pnt arrow[], int nr) +{ // for now on own surface; eventually this should become a global that is only destroyed on resize + cairo_surface_t *boardSurface; + cairo_t *cr; int i; - for(i=0; i<10; i++) pts[i].x = arrow[i].x, pts[i].y = arrow[i].y; - XFillPolygon(xDisplay, xBoardWindow, highlineGC, pts, nr, Nonconvex, CoordModeOrigin); - if(appData.monoMode) arrow[nr] = arrow[0], XDrawLines(xDisplay, xBoardWindow, darkSquareGC, pts, nr+1, CoordModeOrigin); + int w = lineGap + BOARD_WIDTH * (squareSize + lineGap); + int h = lineGap + BOARD_HEIGHT * (squareSize + lineGap); + boardSurface = cairo_xlib_surface_create(xDisplay, xBoardWindow, DefaultVisual(xDisplay, 0), w, h); + cr = cairo_create (boardSurface); + cairo_move_to (cr, arrow[nr-1].x, arrow[nr-1].y); + for (i=0;i